Software is developed within constraints. Resources, mainly time and brainpower, are always limited. Given enough time, (mostly) everything can be solved, but as time is always limited, creativity is necessary to find ways to solve a given problem in the given time.
Creativity requires a certain environment and condition. A lot of ideas come when you aren’t looking for them, maybe under the shower. Brainstorming is a rather chaotic process, but aims at gathering ideas. Though brainstorming isn’t usually something you’d do while working on some software problem, so a certain level of chaos can be good while doing that.
For example, I’m having Google Reader open during the day, reading once in a while about some new gadget, watching a video mashup of Star Wars with mupped show music or some online comic, like Dilbert. Two colleagues do the same, sharing entries all the time.
On the other hand, discipline is very much required for software development. Forgetting to run tests before a commit can waste a few minutes for everyone else. Forgetting to write a test can be much worse, especially when the issue that wasn’t covered is discovered days or weeks later.
In that regards, creativity and discipline are somewhat opposites. Having both isn’t easy. One idea that I want to try is to print out short checklists with a few bullet points for two or three essential activities, like starting and new task (gather requirements, design, estimate) or commiting something (updating, running tests, review changes by peer, commit).
Further reading:
- inc.com: Does Discipline Squelch Flexibility and Creativity? Focuses on processes vs. flexibility in business
- Creativity – The Discipline of Innovation describes seven sources of innovation that can be tapped by concious and purposeful search; each is illustrated with various historic examples, a good read!
Have your say!
This blog post should evolve over time and your feedback is invaluable in achieving this by helping me fix factual errors, fill in details, and expand the original post.
Do you think creativity and discipline are opposites? How do you maintain a creative enviroment, if at all? How do you make sure you don’t forget some of the crucial steps or writing software in a team? Leave a comment and enlighten us!