At most universities the computer science program is found in the College of Engineering. There’s a good reason for that - we may not be building something out of copper and steel, but rather we are engineering ideas. We are abstract engineers. Software developers take real world objects and concepts and model them in a way that is both usable by a computer and readable by a human. However, there is another, larger, difference between software developers and the more traditional schools of engineering, other than our choice of building materials: Software developers are the only engineers who can not only come up with the idea for their project, but also draw the blueprints and lay the brick. We build the things we imagine.
We Build Cathedrals
As software developers we also enjoy the good fortune of being able to think of a neat idea for a project or business, and then with just the investment of some free time, a few dollars for a domain name and some webspace, we can launch that idea and see if it works out. If it doesn’t, who cares? All you’re out is a bit of money and time, and you probably learned quite a bit about whatever technology you were using along the way. However, this system of idea-create-deliver also introduces a challenging change of mindset in the life cycle of your project. You’ll spend hours and days pouring over the technical details of your project, modelling data, designing the layout, orchestrating AJAX, researching how to pull off that certain UI effect you’re going for…and then you’re done. Of course there’s the ongoing maintenance and introduction of new features, but the real bulk of your development is done up front, building the core of your system.
After that step is over, your mindset must then shift from the dutiful developer to the charismatic content provider. It’s likely that during the development of your project you were consumed with thoughts of how to DRY up your code, how to improve performance, and making sure you were using all the latest and greatest best practices. Once your software is finished, and I use that term lightly, it’s up to you to fulfill the potential of your original idea. It may have sounded amazing when you first had the idea, and it probably still is, but I believe that as developers we have trouble seeing beyond the technical phase and into the actual usage of our product. We get excited about the technology we’ll be using, and we are content to build just for the sake of building, because the act of creation is in and of itself fun.
We who cut mere stones must always be envisioning cathedrals. - Quarry worker’s creed
Once this stage is over, though, and your product is out there in the wild and you’ve had your glass of celebratory champagne, it starts to sink in that you have really only just begun. Designing the software may have been difficult, but all you were really doing was taking your abstract ideas and engineering them into something the computer could understand. The completion of this component is a milestone in your project’s history, but no matter how great the design is, it doesn’t make it a success. You’ve built a museum, now it’s time to fill it with art.
At this point it’s time to go back to your idea. Remember what made it great - remember how you said to yourself, “This is something that I would like to use, and I think other people will to.” Get back into the mindset of wanting to deliver your idea - take a break from your code if you have to, let it rest, then get ready to make your software amazing.