“As an engineer, your goal should be more about solving solutions and learning through them rather than picking a shiny architecture pattern, in hopes that that will solve your problem.”
Gergely Orosz is the engineering lead at Uber. He has contributed to rewriting Uber's distributed payment systems, designing and shipping Skype on Xbox One and open-sourcing RIBs, Uber's mobile architecture framework. In this post, he explains how it is all about simple design and not any software architecture pattern when it comes to creating software systems. None of the system design processes at leading tech startups use any standard software architecture planning tools. No project has one person owning the architecture or design and nobody talks in terms of the common architecture patterns while trying to design a software system.
The process of designing software is fairly simple and open one. It encourages inputs from everyone on the team irrespective of their number of years of experience. Almost everyone just starts with addressing the business problem, brainstorming an approach to solve it and putting this approach on a whiteboard while discussing & refining it. This exercise on the whiteboard clearly describes the architecture of the system. This gets written up in a simple document with the simplest diagrams possible. This document also states why certain choices are being made based on the context of the problem at hand, what are the tradeoffs for & the alternatives to these choices. And in the end, this document gets sent to the engineering team to take feedback from everyone.
There is no following software architecture patterns, just solving a problem in the simplest way possible and making sure that even the junior-most engineer on the team understands everything that’s going on.
“The last thing you want to do is taking one or more architecture pattern, using it as a hammer, looking for nails to use it on.”