What Does System Design Actually Look Like?

Creating a WhenIsGood Clone From Scratch

System design is a complicated skill that takes engineers of all disciplines years to become proficient in, yet alone master. In order to practice my low-level system design skills and tackle an inconvenience I often have, I decided to recreate the popular meeting scheduling website WhenIsGood [whenisgood.net] and make it my own. I wanted to extract only the parts of WhenIsGood that I needed and strip away my biggest gripe (the downtime!).

The most important step in creating any new system occurs before any code is written: the flowchart. This flowchart may simply be a mental model to describe a system or a digitally drawn series of connections that allows for easy communication and visualization.

The Flowchart Diagram for WhenIsGooder

Ensuring that the system design is rational saves significant time down the line when implementing the solution. Initially my design was to have responses.db styled as a table, where each unique responder would have a single response row that stored all the times they were available. Since I had not thought that far ahead when I created the project, I had to rewrite some code to instead model each individual time as a separate response. This change significantly cleaned up the internal flow of the webapp with minimal memory drawbacks. 

I deployed this webapp on Heroku and was surprised by the streamlined process that they boast. I was able to define some dependencies and connect directly to the private project on my github and deploy it in less than 15 minutes. Then it only took a moment more to connect to my custom domain [whenisgooder.com].

Overall, I had a lot of fun making this and I consider it a perfectly-sized weekend project. I highly recommend that anyone who is interested in software development to go out there and try and make a few small scale projects like this. Next time you are scheduling a meeting, consider WhenIsGooder!

Leave a Reply

Your email address will not be published. Required fields are marked *

Close