Fortune Telling, Hocus Pocus, and Software Design

Software design is all about trade-offs.

This I hope isn’t too controversial a statement. After all, if it were possible to make software do everything its users could possibly want, easily, quickly, securely, for free… then I’d be out of a job. We’d have one app. It’d be called Magic.

Worse, those trade-offs need to be made based on imperfect information. When we’re designing software, we’re making guesses about what shape it will take when it’s done. We’re guessing at how perfomant/scalable it is going to be, how…