iOS Apprentice page 320

If you think development is a little messy, then you’re absolutely right.

You started out with one design, but as you continued development you found out that things didn’t work out so well in practice, and that you had to refactor your approach a few times to find a way that works.

This is actually how software development goes in practice.

You first build a small part of your app and everything looks and works fine. Then you add the next small part on top of that and suddenly everything breaks down. The proper thing to do is to go back and restructure your entire approach so that everything is hunky-dory again. Until the next change you need to make.

Software development is a constant process of refinement. You’re working your way from zero to a full app, exactly the way a pro developer would, including the mistakes and dead ends.

Isn’t it possible to create a design up-front - sometimes called a “software architecture design” - that deals with all of these situations, something like a blueprint for software?

I don’t believe in such designs. Sure, it’s always good to plan ahead. I made a few quick sketches of how I imagined each app would turn out. That was useful to envision the amount of work, but as usual, some of my assumptions and guesses turned out to be wrong and the design stopped being useful about halfway in.

That doesn’t mean you shouldn’t spend any time on planning and design, just not too much. ;-)

Simply start somewhere and keep going until you get stuck, then backtrack and improve on your approach. This is called iterative development and it’s usually faster and provides better results than meticulous up-front planning.