Technical Choices and Scaling Teams / by Owein Reese

As companies grow, they often struggle with effective prioritization because they are unable to allocate resources appropriately. When a particular team becomes a bottleneck, simply adding more people may not be a feasible short or even medium term solution. In software development, the challenge goes beyond a lack of domain knowledge; it can also stem from unfamiliarity with the technical stack itself.

This is why I advocate for a "less is more" philosophy when it comes to technology choices. Instead of introducing unnecessary complexity, it's often better to streamline and standardize the tech stack. This approach involves making judicious selections for key components, such as:

  1. Database: Pick one primary database solution that meets the majority of needs.

  2. KV Store: Choose a reliable key-value store for caching or other use cases.

  3. Internal Communication Protocol: Standardize on a single protocol (e.g., RPC, JSON over HTTPS, Kafka) for inter-service communication.

  4. Primary Development Language: Settle on one language for service development and one tech for the front end (React, Vue, etc.)

  5. Core Framework: Within the chosen language, adopt a single robust framework for building services.

  6. Monitoring: choose a telemetry stack and integrate it into the core framework.

By minimizing the number of technologies and frameworks in use, teams can develop deeper expertise and familiarity with the chosen stack. This focused approach simplifies onboarding and knowledge sharing, allows more targetted recruiting, and lowers the barriers to employee migrations between teams. 

Moreover, a streamlined tech stack can facilitate better collaboration, easier maintenance, and more efficient resource allocation. When teams aren't spread thin across various tools and platforms, it becomes easier to identify and address the bottlenecks effectively, leading to improved overall productivity and resource utilization planning.