No offense to the author (I don't really disagree with anything he's written) but the stuff he's talking about isn't the hard part about keeping code clean.<p>The thing that I find hard about keeping code clean is:<p>- time pressure: someone wants something now and you feel the pressure and you need to make quick changes<p>- failed attempts at abstractions: people try to rewrite/refactor something in order to make it more reusable, they get halfway there, something else takes priority, and you're left with a mess<p>- unclear/changing requirements: you're kinda tweaking and feeling your way along and by the time it's doing what it should do, it's a bit messy, but time pressure means you're not going to go back to it<p>- god awful things done in the name of testability: people not really knowing how to write great tests leaking the guts of the implementation all over<p>- quick hacks to fix nasty bugs: root causes never fixed, band-aids and duct tape all over<p>- performance over readability: sometimes something needs to be fast and that doesn't necessary mean that someone jumping into the codebase is going to be able to grok it right away<p>- did I mention time constraints? Given infinite time, most of us will produce a reasonably readable function