There was never any engineering team that I have worked with or know of that do not work under pressure to deliver a feature with tight deadlines. Often times, it is feature X need to be delivered by so and so date. The engineering teams get to work and crank out code to ship it out asap.
During this process, the team inadvertently accumulates tech debt. The tech debt ranges from improper design to methods with hundreds of lines of code or lack of proper automation coverage etc. But often times the team never gets the time to address this tech debt properly. When customers start to use the product and run into bugs, it’s just applying one bandaid after another to save the day. Even if customers don’t run into issues, developers are just too worried to do any changes to code of the fear of breaking something else.
But, what causes poor quality and how it can be avoided?
Pressure to deliver a feature
Everyone wants to put a feature out for customers to use asap. But delivering a feature with quality is so much important than delivering that feature at all. Developers should be able to voice their opinion if the deadlines are unreasonable and management should be supportive of such feedback if it helps the product towards longer term goals.
Lack of automated tests
Not writing automated tests is the worst thing anyone can do while developing new features. Almost any code smell can be pointed to lack of tests. Writing unit tests will force your code to be modular with simpler methods so you can get to better code coverage. With good code coverage, developers will be more willing to do changes to existing classes or even to go out of the way to fix something they find while navigating through code.
Company or Team Culture
Does the company or the team promote the culture of refactoring to improve quality and if everyone in the team are committed to maintain the codebase. Good teams push each other with the best practices that everyone would follow and they make time for doing so. Companies that promote and strive to prioritize quality over quantity thrive. Often times you hear about awards given away to person or team that helped resolve a P1 issue, but never to teams that deliver features with highest quality or code coverage. After all, prevention is better than cure and those who prevent disasters from happening in production must be rewarded.
If you are a developer, feature quality is your responsibility and it’s in your best interest to deliver features with quality. Lack of quality means suffering through escalations, unnecessary stress, frustrated customers and endless meetings for rolling out fixes. Identify the tools and processes that help your team deliver with quality. As a developer if you are not happy with putting a feature out, voice your opinion and communicate the plan to make it right and to get the feature out by a reasonable date. If you just voice your opinion without specific actions is just useless waste of everyone’s time.