I constantly have to fight with my inner perfectionist. I feel like being a programmer makes this a little more difficult – you have to be very precise when you write code. The computer will do exactly what you tell it to – and to err is human.
Most of the time, perfection is an impossible goal. To get anywhere near takes a lot of time and effort. With the current pace of game and app development, concepts like minimum viable product have taken hold as solutions and guidelines for development. I think the reality is much more messy than MVP sounds – so I prefer to say that success is scrappy.
I wish that I could write code once and have it work exactly as I intended. I also wish that the designs and art I receive are the final versions. But that isn’t reality, and development is often repetitive and messy. Or you could think of it as iterative and creative.
For coding, design, and art, I still think paper is the best place to start. It’s hard to convince people to take this approach when we have tablets and elaborate mock-up software. It’s still faster just to use a pen and paper, and you can test and share quite a bit with those simple tools. It won’t be pretty, but when you are starting out, it shouldn’t be.
You want to figure out what works and what doesn’t, as soon as possible. This means using the quickest tools to get you those answers. What this also means, is you might end up building several versions of the same thing. I find this hard to accept, but I understand it is realistic and rational. You can also minimize it by figuring out your toughest problems as early as possible.
UFO Dad is an indie title I made with Kevin Oke. It started as a prototype using Moai, written in Lua. We felt like we found some fun there, and continued to iterate on the prototype. Eventually we decided to develop it for the PlayStation Mobile platform. I evaluated the tools, ran tests, and came to the conclusion it would be faster and better to keep writing it in Lua, using Moai, and reimplement the parts of Moai we used for PSM. This worked out and we successfully shipped on time. You can see the stages of prototyping and development in this short video:
PlayRank is a mobile social sports app for iOS that I developed while at LiveRank Data. It started as some concept docs and a big vision. Screens were improved while still paper drawings, then shared in Google Docs, then mocked up by UI artists. Even before UI artists got at it, I was laying the screens out using Xcode Storyboards, with fake data, since there was no server or client/server communication existing yet. Revisions took place with a minimal amount of cut or rework. We successfully shipped in only six months with a tiny dev team.
Riot Games is famous for League of Legends. From what I know, they didn’t build on top of an existing engine, so they were faced with building their own engine and tools from scratch. They used Maya (I was told this, but it is also pictured here, sourced from here) as their level editor, and even authored effects scripts in text form. Slowly but surely they are making improvements to their pipelines, but if they had tried to get it perfect (or even just good) development would have taken much longer, and maybe it would never have become as huge of a success as it is?
Building something quickly and still maintaining quality is not easy. But more importantly, you want to be building the right thing. Build fast and be willing to throw away work early, until you know you’re on the right track. Then build in that direction methodically.