Attributing the speed of a developer to that developer alone is a myth. Put a very fast developer into a slow codebase, and they’ll code slow. The only time these two factors meet is a fast developer in a codebase and an environment they can excel in. The biggest speed boost available to coders is the codebase they work in. Having a codebase that is well maintained and easy to make changes is a worthwhile pursuit. It allows for everyone working in it to work faster despite their current ability level.
What kind of elements in a codebase cause a developer to slow down? If I have to edit behaviour in four places before it is “live” to the customer is one obvious case. The inverse of this is also true. Clumsy abstractions make it difficult to get features out. Continuous Delivery is another major factor to the speed a developer works in. So what defines a codebase to be 10x versus 0.1x besides the nebulous and controversial “clean code”.
The mark of an exceptional coder is that the code is easy to understand. Often people expect the opposite. A smarter coders code is so exceptional no one else can understand it. The mark of “genius” is actually “extreme simplicity” not “overt complexity”.
Readers also understand the original intention of the code. Clear, descriptive names for variables, functions, and classes aide coding intention. Readability includes consistent naming patterns that match domain logic. The expert programmer prefers explicit over implicit logic. The expert coder makes it obvious what the code models assumptions are.
Expert coders also understand the need for abstraction or DRY concepts. They understand code duplication is necessary in this process. Sticking to single responsibility principle while offering library functions.
Maintainable code is easy to debug and find errors. Proper error handling involves clear meaningful error messages. Structured logging and monitoring allows for regular tracking of errors within production. Unit and integration tests to catch error edge cases before reaching production. Acceptance tests ensure the code is workable before every release.
Maintainable code requires modularity and a separation of concerns. Loose coupling between concerns within these modules, and high cohesion within the classes. Predictable and consistent design patterns enable easier extension of the functionality.
What does developing faster actually look like? Code that can change when presented with a new idea is the mark of a very good codebase. These codebases enable consistent and dependable addition of features. It’s not enough to push a new feature that works 85% of the time. The reality is even a 15% “not working” is a significant bug to the end user, especially given enough traffic.
Battling bugs is a failure state a codebase can exist in. High defect rates result in necessary rework on each feature produced. Large interruptions to planned work can occur due to the discovery of existing bugs. Constant firefighting within a codebase can hinder or halt progress. Leaving this state is necessary for true progress within the codebase.
Quick fixes within a codebase can be some of the most guilty solutions of poor abstractions. It is faster to get the feature out than make the code maintainable in the process. It is possible to get the feature out, and then later clean things up later. The “duct-tape” programmer is great for prototyping new ideas. This programmer can find new markets and new products. This same programmer is weak at creating codebases that are easy to maintain and grow.
A more maintainable solution will often look “over-engineered”. The problem with over-engineering is in the beginning. Premature optimization can run rampant. Often we don’t understand the problem enough early on. Good abstractions are created by duplicate functions.
Poor documentation and tribal knowledge being necessary is a code smell. It shows the existing codebase, variable names, and class names do not describe the intent. Tests can act as a double re-assurance that the original intention is correct.
The advantage of a 10x codebase is it aides developers in creating solutions. Do not let your competitors win this battle.