Skip to content
Discuss a project···
josip
All articlesJul 13, 20233 min readprogramming
Field notes

Opinions Are Overrated. Get the Job Done.

Opinions Are Overrated. Get the Job Done.

Some software engineers treat personal taste as a project requirement. They reformat generated code, add aliases to satisfy a naming preference, or introduce abstractions for requirements that do not exist. The code may look more familiar afterward, but the product is no better.

Good engineering still involves judgment. Naming, structure, and consistency matter when they help someone understand or change the system. The problem starts when tidiness becomes detached from an actual need.

Generated code

Generated code belongs to the generator. Manually converting its names or formatting only creates work that the next generation run will overwrite.

I once saw aliases added for every generated function so that their casing matched the surrounding code:

let getCustomer = GetCustomer;
let getInvoice = GetInvoice;

Those aliases added another layer to trace and maintain. Using the generated names directly would have been simpler. If the output is genuinely unusable, fix the generator or its configuration.

Comments that repeat the code

Comments are useful when they explain a constraint, a surprising decision, or behavior that cannot be obvious from the implementation. Restating a simple operation adds noise:

# incrementing the counter by 1
counter += 1

The comment forces the reader to process the same fact twice. A useful comment in that location would explain why the counter changes, or why it changes by one.

Debates without consequences

Style discussions can consume more time than the code deserves. On one team, an engineer spent much of a day arguing for a for loop instead of a while loop. Both versions were clear and neither changed performance. The discussion cost more than the decision.

Teams should automate routine style choices with a formatter and reserve review time for correctness, interfaces, failure modes, and maintainability.

Rewrites and speculative abstractions

A faster language does not automatically justify a rewrite. Go may be faster than Python and Rust may offer zero-cost abstractions, but those facts say little about a service that already meets its requirements. A rewrite needs a measured problem and a credible benefit.

The same rule applies to design patterns. I have encountered a factory built around a class with one implementation because another implementation might appear someday. Two years later, the second implementation still did not exist. The factory made every current change harder in preparation for an imaginary one.

A practical standard

Before changing working code, identify the problem the change solves. Consider who benefits, how often they benefit, and what new maintenance the change introduces. A measurable improvement in reliability, performance, security, or development speed is worth discussing. Personal preference alone is weak justification.

Software engineering is applied work. Keep the code understandable, automate mechanical decisions, and spend human attention on the parts that affect the result.

Found this useful? Share on X or send a note.Josip
Read next
More notes.
All articles