Design Decisions

These critical decisions behind your story.

Omar Elgabry
OmarElgabry's Blog

Newsletter

2 min readJul 20, 2018

--

The top secret, most dangerous incarcerated super-villains — source, movie

One of the best gifts in Software Engineering is the trade-offs. There is no best answer, no bullet-proof solution, and best practices can be broken — as long as you’ve a good reason.

It’s a creative process, the decisions you make, the architecture you layout, the insights and analysis you find out, they are all important aspects in building a scalable, robust applications.

What makes it interesting is when you dig deeper into the hidden secrets of how these big companies, and even small booming startups are structuring their applications, decisions they made, and the challenges down the road.

After all, you’ll reach a point, where the solution you’re looking for is no longer on Stackoverflow, it’s not written explicitly in any blog, and maybe it’s not on Google!.

It’s rather hidden under someone else’s experience, written between the lines in the books or the source code of a library, or, maybe, it has to be discovered by you through several trials and tests.

We’ll walk through building different types of applications. We’ll layout the overall architecture, addressing important issues, problems, solutions, and their trade-offs.

It’s presented in a narrative way — as much as possible. Though, they’re not a technical deep dive. It’s just the big picture. It drifts away from the underlying tools and frameworks choices unless it’s needed to shed some light on.

You can find a list of all the applications below till now. It’s worth mentioning that more applications will be added to the list. So, keep an eye.

  • Deadshot — Movie Streaming
  • Harley Quinn — The twitter-like application
  • Boomerang — Posts & comments: Share your ideas, thoughts, or advice.
  • Rick Flag — Newsfeed (links, votes, comments)
  • [TODO] Katana — Qs & As
  • [TODO] Diablo — From zero to hero

→ Reference

Before taking a look at these application. It worthwhile to address these simple, yet important questions:

Why do we need to scale?

  1. To serve more requests (and concurrent requests)
  2. To serve requests faster
  3. To accommodate large data
  4. To be able to handle failures

What do we scale?

Bandwidth, computers (memory, cpu), storage, power (since computers consuming power).

Techniques for scaling

  1. Optimize the code (and queries)
  2. Adding new machines
  3. Upgrade machines (more memory, cpu)
  4. Caching

Thank you for reading! If you enjoyed it, please clap 👏 for it.

--

--

Omar Elgabry
OmarElgabry's Blog

Software Engineer. Going to the moon 🌑. When I die, turn my blog into a story. @https://www.linkedin.com/in/omarelgabry