Why Writing a Webapp Reminds me of Playing a RPG
I’m sure you’ve played an RPG of some sort… Diablo, Torchlight, Titan’s Quest, City of Heroes, World of Warcraft, Pirates of the Burning Sea, Aion, Eve Online, Dark Age of Camelot, Age of Conan, etc. These all invariably involve the same pattern of gameplay.
You design a character — it’s gender, appearance, skin tone, and of course role/class. You enter the world, simple and weak, using the same basic skills to accomplish every task. As you grown in experience you begin to use more tools to accomplish the same tasks. In the “middle” portion of this experience, between when you first created the character and the maximum level is probably the highlight of playing: You’re progressing at a very notable pace, you frequently receive gear upgrades and new skills, and the sense of accomplishment is very high. As you start to near level cap the “newness” begins to wear off: you only receive more powerful versions of the spells you already had. There isn’t anything new, just bigger numbers. Hitting level cap the sense of accomplishment trails off very fast. The only progression left is to try to acquire more and more esoteric pieces of gear/upgrades. The time between those upgrades becomes farther and farther apart as more time investment is required to attain them.
I see a lot of similarities with writing a webapp. You start off designing your technology stack — it’s web server, server framework, client framework, and of course language. You write your first few lines of code, simple and weak, using the same basic patterns that you read in the “Getting Started in X Web Framework” tutorial. As you grow in expirience, reading more Stack Overflow answers you begin to use more refined tools to accomplish the same tasks in ways you’d label “better architected” or “more scalable”. In the “middle” portion of this new webapp when you hit Minimum Viable Product is probably the highlight of the webapp: You’re progressing at a very notable pace, you frequently add new features and upgrades to existing ones, and the sense of accomplishment is very high. As you start to near completion where all of the features have been implemented the “newness” begins to wear off: You’re only refining existing features now, making small slight changes and tweaks here and there. The only progression left begins to render very small changes. A 0.5% improvement here, a 0.75% iimprovement there. The time between “upgrades” becomes farther and father apart as more people begin to use your webapp and you risk upsetting people’s workflow by changing too much. The excitement and passion is slowly draining.
At this point what happens? Well in an RPG you’d either re-roll a new character or switch to another game. In webapp development you’d either “re-roll” the projects by re-writing huge portions of it in the latest language or framework. Or you’d switch to another “game” (a different project).
I think this is somewhat of a problem but I’m not sure what the fix is. Is there a way to keep excitement, newness, and a sense of accomplishment on a well establish project? If so how?


