One part of the Software Development Process is prototyping, the step where the user interface and interactions are put to test. I wonder if a napkin drawing, static visual, mocks or templates transmit with accuracy how the final product will work? I’d say no, otherwise prototypes would be called “final product components”.
A common belief is that Prototyping in Code is costly. Developers’ time is very valuable, and we can not afford going back and forth coding each different iteration the product owner comes with.
The other day, while at GA in New York, I talked to Paul Canetti. This was on the same day Apple announced iOS 7 and he seemed very excited about it on Bloomberg. Among other things, we talked about prototyping. I usually do some basic prototyping on paper, before starting development, but then move on to do most of it in the code itself.
I always saw my lack of traditional prototyping as a bad practice, a weakness, and told Paul it was something I wanted to fix. He replied with something in the line of “…most people don’t prototype in code, because they can’t code”. We kept having an interesting discussion about the topic, but that phrase clicked on me. It was something that, as a developer, I always took for granted.
Having the ability to prototype in code is a gift, and we should take advantage of it. At least developing for iOS, I see a big advantage, and I’m sure other platforms can benefit from it as well. Prototyping directly in code can be far superior than other forms of prototyping. The set of available tools for iOS make it easier and less time consuming. Interface Builder and Storyboard allow us to have a real representation of how the final result is going to look like, test it on actual devices and take them for spin in some contextual tests out in the wild.
I know what you’re thinking: this is iterative development! Not exactly, iterative development assumes that your product functionality is already defined before starting to code, making incremental progress towards achieving the proposed goal. Code prototyping can completely change the direction of your app in an early stage, based on context experiences that paper, mocks and Omnigraffle can’t reproduce.
Code Prototyping allows the developer to better understand user objectives and other stakeholders to get better input of real scenarios early in the development process. Those iterations should not impact final delivery dates, on the contrary, they are an investment towards a more solid product reaching a higher level of maturity sooner than what it should.