Sprint 7 marked a shift from infrastructure to user experience – making Connect 3D feel more like a connected, living game. This time, I focused on game statistics, player rankings, and matchmaking. It’s been both challenging and incredibly rewarding to see the game reach a point where competition and progression start to matter.

Game Statistics and Player History

I added a comprehensive stats system to track player behavior, performance and history – both for individual insights and future features like rankings, achievements, and seasonal events.

Here’s what the system tracks:

  • Player registration date.
  • Total games played.
  • Wins, losses, and draws.
  • Losses by timeout or resignation.
  • Match history: opponent, date/time, result, total time per player and number of moves.
  • Current ranking.
  • Historical ranking per day.
  • Average number of moves per match.
  • Average time per move.
  • Total time played.
  • Platform details (iOS/Android), app version and connection issues.
  • Number of friends.
  • Chat usage per game.
  • Highest ranking reached.
  • Total number of unique opponents.
  • Longest win/loss streaks.

Each player now has a dedicated stats profile screen with backend support powered by PostgreSQL. Some metrics are stored directly, while others are calculated on the fly. Right now most stats are still only available in the backend and not shown in the game at all.

To ensure proper compliance, I’ve also begun implementing GDPR and CCPA safeguards, such as data anonymization and user access controls – these will be finalized in an upcoming sprint.

For testing, I ran a mix of matches against myself, my AI opponents and a few brave early testers (thank you!). Watching the data accumulate in real time was not only fun but also eye-opening – especially seeing how this lays the foundation for future features like lifetime milestones, achievements and seasonal stats.

Screenshot: Early player stats screen.

Ranking System

With the new stats system in place, I also introduced a ranking system to give games a more competitive feel. Each win, loss or draw now updates your personal score using an ELO-style formula, and your current rank is shown on your player profile – as well as to your opponents before and after a match.

I chose an ELO-inspired approach because it’s ideal for casual yet competitive gameplay. It adjusts based on the strength of your opponent:

  • Beating stronger players increases your rank more.
  • Losing to weaker players results in a bigger drop.
  • Draws are factored in fairly.

To protect new players, there’s a lower bound that prevents their rank from falling too quickly, helping them ease into competitive matches without too much pressure.

For now, there’s no global leaderboard – intentionally. I want to avoid pressure and unhealthy competition. Instead, the focus is on personal progress and matchmaking balance. In the future, I may introduce seasonal tiers, leagues, or rewards, but for now, the system serves as a solid foundation for fair matchups and gradual improvement.

Random Matchmaking

The biggest gameplay improvement this sprint was the addition of random matchmaking – players can now start a game with a stranger, no friend connection required. During my market research interviews before development, this has been one of the most requested features and implementing it made the entire platform feel more dynamic and alive.

Technically, this was a bit tricky. It required a queuing system on the backend that could match players in real time, factoring in availability and rank balance. I designed a simple but effective matchmaking algorithm that follows this flow:

  • Try to match players with similar ELO rankings first.
  • If no immediate match, gradually expand the acceptable rank difference.
  • If no match is found within a time limit, notify the user gracefully.

The system handles edge cases like dropped connections and duplicate match attempts, and it scales well even under varying loads. I also added safeguards to avoid abuse or ghost queuing.

Honestly, seeing it work the first time was a goosebumps moment. Watching two test accounts auto-match and dive into a real game – with avatars, turn logic, chat and all – was one of those “it’s real now” milestones.

Screenshot: Starting a new game with another random player.

Next Sprint: Push Architecture and Notifications

Up until now, Connect 3D has used a polling model – regularly checking the server for updates. In the next sprint, I’ll move toward push-based logic, where updates are delivered in real-time via WebSocket and phone notifications.

This means:

  • Less battery and data usage.
  • Instant game state updates.
  • Native notifications when it’s your turn.
  • Less costs for the server – constant pulling is expensive!

This will be a major upgrade in user experience and technical design.

See you in two weeks!

Elena