I keep seeing certain practices treated as mandatory, even when they add more complexity than value to a project.
For example, some teams move to microservices too early, aim for 100% test coverage, hold too many Agile meetings, or use complicated design patterns for relatively simple problems.
In theory, these practices sound right. In real projects, however, they can sometimes slow development, increase maintenance, or create unnecessary work.
What is one software development “best practice” that you think is overrated?
Have you ever ignored or challenged it and achieved a better result?
I don’t know of anyone following all best practices. To me best practices are like theory. Some are well tested and accepted, and it generally is a good idea to follow them.
There are universal ones like documenting code as you go, instead of afterwards or never. Giving variables and functions good names. Using pure functions and automated testing.
Then there are best practices for organisational norms.
Following codebase and style guidelines, taking ergonomic breaks to avoid occupational health issues.
They are designed to reduce cognitive load and prevent systemic failures. What happens when an expert in a department leaves or retires, and no one asked to document their workflow?
If you treat them as theories, you can test them against reality. The best engineers break a universal rule based on context. They understand the intent behind the rule, allowing them to break the letter of it to save the spirit.
Writing unit tests: Break when building prototypes as rigid testing slows down the process. Enforce when it hits production.
Don’t repeat yourself: In game development, function calls and abstractions (which DRY relies on) carry performance costs, especially in heavy mathematical updates. Developers often intentionally copy-paste a small block of math, accepting duplication to avoid the CPU overhead of a generic function call.
Optimising for scale: At the beginning when a startup has limited resources, building dozens of microservices takes up most of the development time as the focus is on network latency, complex deployments, and distributed data management. Instead build a majestic monolith then unbundle based on performance and usage bottlenecks, scaling the team as necessary.
Add multi-factor authentication for security: If a mobile game is free, then barriers such as email verification, SMS code, and captchas to open the app may cause friction and cause people to delete the app before even playing a game.