Complexity

Essential versus accidental, simple versus easy, and the maxims — DRY, YAGNI, KISS — restated so they say something falsifiable.

Essential and Accidental Complexity

Some difficulty is the business rule itself and cannot be deleted, only moved somewhere honest. The rest is your encoding of it — and that part is negotiable.

Q · This feature felt ten times harder than the rule it implements. Which part of that difficulty was the problem, and which part did we build ourselves?
Simple Is Not Easy

Easy is about familiarity and how quickly you can start. Simple is about how few things are braided together. They come apart constantly, and most bad designs are the moment someone chose easy and called it simple.

Q · This choice made the feature fast to write and the codebase harder to reason about. What is the property I traded away, and what would I call it?
The Complexity Budget

Every feature spends concepts, states, dependencies and failure modes out of a budget nobody is tracking. Tracking it does not make features cheaper — it makes the price visible while the decision is still open.

Q · We keep saying yes to individually reasonable features and the system is getting hard to hold in one head. What are we actually spending, and how would we know we had run out?
YAGNI, With Its Bill Attached

Do not build features or flexibility for a requirement nobody has. The rule is right often enough to be a default, and its cost is real: the refactor you deferred arrives under deadline pressure.

Q · Someone wants to build for a requirement that has not been asked for. When is refusing that the cheap choice, and what am I agreeing to pay if I refuse?
KISS: Simplest for the Requirements You Have

The simplest design that satisfies the known requirements — which is a different thing from the smallest amount of code you can write by ignoring some of them.

Q · Two designs, one obviously smaller. How do I tell whether the small one is simple or just leaving the hard cases to whoever hits them?
DRY: Knowledge, Not Lines

The rule is about a piece of knowledge having one authoritative home. It is routinely remembered as a rule about text, and that misreading produces shared abstractions that couple things which have nothing to do with each other.

Q · Two pieces of code look alike. How do I tell whether they are one thing written twice, or two things that happen to resemble each other today?
Over-Design and Under-Design

Two opposite failures with the same cause — structure chosen without reference to expected change. The symptoms are recognisable, and the right amount is a function of how complex the domain is and how often it moves.

Q · One reviewer says this is over-engineered and the author says the last feature built the simple way took three days to change. How do I decide who is right?