4 minute read

I dove into this project with minimal technical knowledge. But as part of my learning journey, I was committed to be the developer for my app, at least in its early stages. Learning to code in the timeframe I wanted to launch was not possible, so I took the next best option: using a no code app builder.

Even without learning the syntax of any particular coding language, there was still a steep learning curve. To my surprise, most of this development work was exactly what I loved to do: solving puzzles! In building my app, I’ve practiced this cycle many times: understanding a functional requirement, breaking it down into smaller parts, implementing and testing it, and readjusting the logic until the requirement was met.

Figuring out how to design and implement each feature was a fun challenge. Even a seemingly simple interaction from a user’s perspective might be broken down into dozens of requirements. And once you have the broken-down requirements, there might still be multiple workflows that bring the requirements to life.

Due to this complexity, I’ll be honest and say I rarely get the technical implementation right the first time. I’m almost tired of hearing myself ask “why is it doing that?!” during testing. But this is also where the most exciting problem solving is found. The feeling of getting it to finally work the way you want is incredible. :smiley:

To illustrate a bit of the thinking that goes into each part of the app, here’s a non-exhaustive list of considerations for a simple “virtual game room” feature. Keep in mind this was only a small (and non-unique, as many other games have this as well) part of the entire app, so you can imagine how much longer this list truly is for the whole game!

User Actions Functional Requirements Implementation Units
Select a game Allow host to select a game - Create a “Select Game” button under the game title.
- Only allow the player to select the game if the player owns the game.
- If they don’t own any games, redirect them to the games shop.
Host must enter a name - Select game button opens a popup that prompts a name input.
- Only allow “Create Room” button to be clickable if the name input is at least 1 character long.
Go to game lobby - When the button on the name input popup (Create Room”) is clicked, the host is redirected to the game lobby.
- There must be at least one character in the name input before allowing “Create Room” to be clickable.
- When “Create Room” is clicked, the user’s info (player name) is saved.
View game lobby Room has a unique code that allows others to join it - When the host clicks “Create Room”, a 5 digit code is randomly generated.
- The code is presented in the game lobby screen.
- The code remains static while the room is active.
- The code is saved to the database alongside player name.
Show who is in the room lobby - Game lobby dynamically updates when a new player joins the room with the new player’s name.
- New players are added in order.
- Show when the game is full and prompt to fill the room when it is not full.
Do not allow the game to start unless the required number of players is present - Add condition to the “Start Game” button to be clickable only when required players condition is met.
- Explain that more players need to be added in order to start the game.
Multiple games can take place simultaneously without interfering with each other - Any data references to players must use the unique game code.
Join a room Unique code allows a user to join a specific room - Create input for code and player name.
- Only allow “Join Game” button to be clickable if the inputted code is 5 characters long.
Cannot join a room that does not exist - Do not navigate to or create a game lobby if the code does not already exist.
- Provide the user with an alert that the room code is not valid.
Cannot join a room that is full - Do not navigate to a game lobby that is already has the required/max number of players.
- Provide user with an alert that the room is full.
Players must have a name - Only allow “Join Game” button to be clickable if the name input is at least 1 character long.
- The user’s info (player name) is saved when they click on “Join Game” and associated to the specific game they joined.
Leave a room When a player leaves the room, they no longer appear in the room screen - Indicate whether the player is in or out of the game room in the database.
- Ensure game lobby includes only those who are in the game room.
- Maintain the order of players.
- Do not display gaps in the list of players in the game lobby.
The leaving player’s assigned character is freed to be assigned to a new player - Ignore an exited player’s character when assigning a character to a new player.
Cannot join a room that is full - Remove the player’s status as host.
- Update the another player’s status to host.
Rejoin a room Allow players to rejoin the room if they drop part way through the game, and retain their progress - If rejoined to the game lobby, add them to the bottom of the existing player list, not their original position.
- Do not assign a character that has already been assigned to someone else during their absence from the room.
- Keep all existing data relating to their game progress (e.g. clues obtained) so it will remain when they rejoin.