4 ms·
Something I'll call Milito's Meadow [1]. Start with a clean slate. Everything goes: fences, farmhouses, roads… Down to the bare earth. Then build up again from
by JKCalhoun 4mo ago
Something I'll call Milito's Meadow [1]. Start with a clean slate. Everything goes: fences, farmhouses, roads… Down to the bare earth.
Then build up again from scratch. Likely you will in fact put a fence here or there—but of course you'll know with certainty why it is there. (And more times than not, there will be fewer fences when you are done.)
[1] Naming this for a friend who taught me about fence razing.
- stephantul 4mo agoExtreme programming in a nutshell. I like doing this to features: build it, then take it down and rebuild but better.
- jpitz 4mo ago"Plan to throw one away. You will anyway."
- bombcar 4mo agoA ground-up rebuild can be wonderful, but something is lost in those US plaster-planned cities that attempt to imitate Florence or other EU cities; something about organic growth that is very hard to replicate ex-nihilo. This likely doesn’t correlate to code as much.
- asplake 4mo agoReminds me of Ackoff’s Idealised Design [1] [1] https://en.wikipedia.org/wiki/Interactive_planning#Idealized_Design https://en.wikipedia.org/wiki/Interactive_planning#Idealized...
- simondw 4mo agoSounds like a very expensive and time-consuming way to build something that won't work very well for a while. Is that the point?
- JKCalhoun 4mo agoIt takes technical debt head-on?
- cwmoore 4mo agoUnfortunately, before the fences are down you are in jail, and with you, it stays where it was.
- quietbritishjim 4mo agoThis is addressed by the classic article by Joel on Software (which is apt, as it's a classic mistake): https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/ https://www.joelonsoftware.com/2000/04/06/things-you-should-... To rephrase in the language of this conversation, he answers: why are there all those fences there? > I’ll tell you why: those are bug fixes. One of them fixes that bug that Nancy had when she tried to install the thing on a computer that didn’t have Internet Explorer. Another one fixes that bug that occurs in low memory conditions. Another one fixes that bug that occurred when the file is on a floppy disk and the user yanks out the disk in the middle. That LoadLibrary call is ugly but it makes the code work on old versions of Windows 95. (Yes the references are a bit out of date. The article is from over 25 years ago!)
- BoxFour 4mo agoActually, I think the old references are relevant. Sometimes those bug fixes and workarounds no longer matter. Windows 95 and Internet Explorer are long gone, we don’t need to architect our code base any longer to support them, but everyone’s petrified to remove the support for them. Or in the language of fences, the fence might’ve been built for a herd of cattle that no longer exists. Raze away!
- quietbritishjim 4mo agoRight. Chesterton's fence isn't "never remove a fence". It's "understand why it's there before you remove it". If you look and find out it's for a long-unsupported platform, go for it. In practice, a mature codebase is likely to have a mix of now-useless warts and seemingly useless but actually essential elements, along with some that fall in the middle (most often, in my experience: attempts to fix valid issues but in a way that no longer makes sense).
- tshaddox 4mo agoHaven’t there been successful rewrites of nontrivial applications? I’ve always been skeptical of Joel’s Netscape example. Was the rewrite really the mistake? Couldn’t the mistake have been making an application where no one knows how it’s supposed to behave?