Software developers do more than writing code all day long. Look at the job as a whole and you’ll find many orthogonal ways to improve.
What does it mean to be a software developer? What does a software developer do?
A software developer writes code to create digital products. But what does writing code mean?
Bear with me. This is not a navel-gazing language puzzle. I have a point to make on how to structure your work and grow, and to do that I need to dig a bit into what software developers do. So, back to what it means to write code.
Some say code is poetry, but there are no Muses that serendipitously inspire us to write code. The code is a means to an end. It can implement something new, modify something that already exists, or fix something that is broken.
When you implement something new, you are translating a more or less clear specification for a desired behavior into instructions to make that behavior happen. The quantum physicist David Deutsch argues that “if you can’t program it, you haven’t understood it. To program something correctly, we need to understand it first. Understanding is at the core of what a software developer does. The process of understanding is not a mere function of IQ. It requires careful reading (or listening), asking questions, and extrapolating good explanations. Those are all skills that can be trained.
It should go without saying that modifying existing behavior also requires understanding. In particular, one needs to build a correct mental representation of the code to manipulate it in one’s head. This is far from straightforward. For once, the mental whiteboard in which we can draw a representation of the code we read is tiny—ranging from four to seven items on average, depending on the studies you look at. Also, not all code is easy to understand. Software development often looks like the work of a philologist trying to decipher ancient text with little context to go by.
Bugfixing adds another layer to the software developer’s job. On top of deciphering and understanding existing code, bugfixing requires a scientific attitude. To squash a bug, you first need to find it. The hunt for a bug is a process of conjecturing possible causes and developing ways to refute them.
Writing code, in all its different facets, is only part of what a software developer does. Code doesn’t exist in a vacuum. The code you write relies on a given programming language and usually stands on top of a development framework and various third-party libraries. Those foundations are far from static. They evolve and improve all the time. A software developer needs to stay up to date with the latest changes or at least be able to quickly learn how to use a new tool when needed. Software developers are continuous learners.
When thinking about writing code, one could be tempted to imagine it as a solo effort, but that’s not the case. The vast majority of software is built by teams. Each line of code is shaped as much by the person typing it as by those reviewing it.
It’s not enough to write code that works. You also need to write code that gets approved by your peers. For this to happen, the code must be clear and in line with the codebase standards, and your contribution needs to be packaged and shared with others in a way that helps them review it. It pays to invest extra time to write a clear explanation of your changes, why they are needed, and the tradeoffs you considered, and to leaving context breadcrumbs to help reviewers access all the supporting information that shaped your work.
The importance of crafting compelling pull request descriptions reveals another aspect of the software developer job. Software developers are communicators, and they need to master writing in natural language, not just code. Pull requests are only one instance of the communicator role. Others are sharing RFCs to propose and discuss changes, writing updates that clearly show progress in a language accessible by colleagues unfamiliar with the technical details of the project, and advertising the impact of the work you have done.
Many developers use software engineer in their titles but don’t live up to the expectation that comes with it. Engineers apply the laws of physics to build stable systems within budget constraints. How many so-called software engineers can say the same? Software might not be bound to the same laws that determine whether a bridge will stand or a plane will fly, but there are still principles of sound design that should be followed and constraints that need to be considered.
Software development requires a careful balancing of tradeoffs. Building software is an ambiguous business, and developers need to be comfortable navigating it. At the micro-scale, they might need to choose between different code designs to achieve the same result. Zooming out, they might need to make a call on whether to spend time fixing bugs or developing a promising new feature. Zooming out even further, they might need to coordinate concurrent efforts on structural projects that will affect multiple areas of the product for months, sometimes years to come.
Writing software might be the first thing that comes to mind when thinking about what a software developer does, but it’s far from the whole picture. Coding is only the tip of the iceberg, the visible output of intricate weaving of activities.
Once you look at your job as a software development as a whole, you’ll notice that improving your coding skill is only one way of growing. In fact, past a certain threshold, any additional gain on that metric will be irrelevant if the other skills are not at a similar level.
Your ability to create good explanations, how strategic you are in allocating your time, the approach you take to learn, and your communication and collaboration skills all play as big a part in your success as your coding chops. Those crucial components are surrounded by a scaffold of supporting skills, such as how to structure your day to capitalize on your energy peaks and crests, how to keep work on track, or how to stop working so you can recover.
Wherever you are in your career, what got you there might not get you to where you want to go next. Whether you are looking for a promotion, to have more spare time, or to work on more exciting problems, take some time to unpack what it is that you do and what it takes to do it well. You’ll discover a vast landscape with many paths you can follow and opportunities ripe for the taking.