to implement. Easier (for other developers) to understand, inherit, maintain, debug. Less likely to fail or break. Lessens the amount of cognitive overhead when working at scale.
much as you can. Every moving part is a potential point of failure. You’re inviting the chance for something to go wrong. Reduce both features and code.
caused yourself work, and cost the business money. No spec, so how do we know it’s right? How do we test it? Could end up influencing the rest of the project. Now you have to maintain something that no one even wanted. Solve each problem as you encounter it.
Usually the Best Reduce the Amount of Moving Parts Understand the Business Care Less, Care Appropriately Pragmatism Trumps Perfection Think at Product Level Do Not Design Systems around Edge-cases Do Not Make Decisions Based on Anecdotal Evidence Don’t Build It until You’ve Been Asked for It Expect and Accommodate Change