This is a card in Dave's Virtual Box of Cards.

Software Planning

Created: 2023-02-22

Jack Rusher has this great talk called "Stop Writing Dead Programs." At one point, he makes the case is that formal methods and fancy type systems are great at enforcing a spec…​but the spec is always wrong. Even if it’s somehow not wrong, it will change. (video + transcript and annotations)

So the ability to make stuff and then adapt it is more important than getting it "right" in the first place.

Conversely, I think that’s where the UNIX philosophy shines. If you make something small enough and single-purpose enough, it’s possible to get it (close to) 100% right. But even then, it doesn’t matter how you arrive at the perfect code - up front planning or evolution and fixing. The outcome is the same and it may take the same amount of time.

If something is going to go into space or deep into the ocean where bugs are super bad, the best combo is both formal methods up front and the ability to fix it remotely with some sort of dynamic language support.