Comment on page
I think the best engineers are those that can properly balance:
- Speed of development
- Demands of the short term, and the long term
- Understand how code complexity can increase/decrease problems
- Complex code may be good for the short term, terrible for the long term
- Doesn't over engineer, doesn't under engineer
- Understand the necessity of technical debt, and when to clean it
- Understand what fires to let burn, and which ones to put out
- Have developed a philosophy of engineering with answers that goes "it depends"
- Know when to implement hacks and exceptions, and when to architect larger solutions
- Good software engineers are able to deconstruct programs. Building is easy. Deconstructing/reconstructing/refactor programs are harder.
- They have some product sense
They realize that all code will be refactored eventually, so you need to write code that delivers a product ASAP but with just enough abstractions that allow it to be easily refactored in the future.
This is only learned through experience.
You need to have lived with code base for a long time to know how code evolves and the mistakes people normally make in a code base.
You want to optimize just enough, but don't want to pre-optimize too early.
Generalization: This doesn't favor people who enjoy prototyping, or building multiple apps as it doesn't give them the deep experience with how to build a product for the long term. They only know how to build a product for the short term.