It's never simple

Posted on Thursday May 27, 2021
Reading time: 2 minutes

I've worked with code for a long time now, I've come to realise that every 'simple' request is only simple on the surface. As any system grows, so does the number of considerations that have to be made when implementing a new feature or change to existing functionality.

Background: I work on a Capture-The-Flag (CTF) platform. Our system is used to deliver content, challenge briefings and leaderboards to players in a competitive environment.

Feature request: Hide a player or team from the leaderboard.

Sounds simple enough, right?

But what about:

  • Their team if they have one? (Which they may or may not depending on the mode of the CTF that's running)
  • Event-wide updates that are broadcast over serverless infrastructure and websockets to other players in the event?
  • Badge awarding for completing challenges?
  • Profile positions that show on your profile page? (à la https://www.tomahawque.com/profile/brunty)
  • Positional data - if they're hidden, do they count towards the position that they would be in on the leaderboard? Or do they just not appear at all? What about if the player themselves is viewing, what should they see? They need to know their own score and progress, surely?
  • Event management - what about the staff managing the event, they still need to see that player to manage them!
  • Reorganising into/out of a team, if they're hidden, or the team is hidden, should they be able to leave / join that team?
  • Visibility to other players/teams in the lobby? If someone (or their team) is hidden, should other players & teams not be able to see them in the lobby, or is it just the leaderboard?

It's never just about one thing. It's about clarifying what things they shouldn't be able to do as well as what they should (especially when your demographic are people who spend their lives trying to get around restrictions, trust me, our logs tell us that 😂)

It's never simple, eh? 😉

Built with Tailwind CSS using Hugo hosted on Netlify
© 2021 Matt Brunt