System Design: The Essential Skill Early Engineers Can't Afford to Ignore

At its core, system design is the blueprint that guides the implementation and operation of a software system. This end-to-end, holistic view enables developers to build the applications we use every day. Multiple software developers collaborate, hacking away to bring these systems to life.

System design typically takes place after an application's requirements have been thoroughly discussed and documented, often in a Product Requirements Document (PRD). From there, a Technical Design Document (TDD) outlines how software engineers can implement those requirements.

Writing a technical design document has traditionally been the domain of senior software engineers and architects. The reasoning is straightforward: designing a complex system end-to-end requires a depth of experience in software development. When user interfaces are involved, the intricacies of UI/UX also need to be integrated into the design, making the role even more critical. Sometimes, entire roles are dedicated to this function — often labeled as "architects" — delineating those who craft the blueprints from those who build from them.

However, the tech landscape is shifting. With the powerful tools at our disposal today and the remarkable productivity of individual engineers, it's time to reconsider who should be involved in system design. In my opinion, it benefits engineers' productivity, versatility, and growth to start tackling and understanding system design intentionally earlier in their careers.

By connecting different building blocks, early engineers can begin to grasp how systems interact as a whole. This leads to a deeper understanding of what they're building and fosters better problem-solving skills.

The LLM Revolution and Individual Productivity

Another compelling reason for this shift is the rise of Large Language Models (LLMs) and AI-driven development tools. As these tools evolve, the amount of code a single person can generate increases exponentially. We're already at a point where a single prompt to an LLM can generate an almost fully functional starting point for an application.

We've moved beyond when developers were amazed by frameworks like Ruby on Rails that could scaffold a blog with a few commands. Now, we can input a few sentences into a form and have code generated for us. This technology will only improve, empowering those who understand how systems fit together to build more parts of those systems quickly and efficiently.

My bet is that end-to-end understanding is going to be extremely valuable shortly at all software engineering levels. Learning system design informs development and enhances it — a win-win situation.

Building System Design Skills

Working on system designs together accelerates our learning of end-to-end product development. Being involved in the process is far more enriching than simply reading a system design document after the fact. It provides practical experience and fosters a deeper understanding that will be invaluable as technology evolves.

In today's fast-paced tech world, it is my opinion that system design is no longer a skill reserved for senior engineers. Early engagement with system design can significantly boost an engineer's growth, versatility, and productivity. As AI and automation tools continue to advance, the ability to understand and design complex systems will become even more critical.

So, to all the early-career engineers out there: Don't wait. Dive into system design now. Your future self — and your career — will thank you.

Ready to start your system design journey? Check out the free preview course or explore Course I: Universal Building Blocks.