“Software development is a kissing cousin of engineering (if not an engineering discipline itself), and blends creativity with math and science. That’s why I find that a lot of advice to creative types is also applicable to software developers.” – Joey deVilla
Creativity is something which we generally do not relate to programming/software development. Typically we consider software development to be highly algorithmic in nature, where you can define what you want and how you can implement it. But essentially, its not the only thing which defines a software. I think software development is one such field where invention happens every now and then. I am not talking about new technologies being released; I am talking about the programs that we write everyday. Everyday we write something unique, for our product or project. But why are we so reluctant to recognize these creations? Partly because, these things are often taken for granted by most of the customers. Some ( or many) cases it is even worse, as the managers also do the same. This phenomenon is so dominant that many non-developers think anything is possible in software and it can be developed in “no time”. Especially this is applicable to IT services, where big fat non-IT customers pay big chunk of money to expect a miracle to happen, as if overnight they will become a market leader or reduce their production cost or whatever reason they are developing the system for. Although not all customers are like this, but most of them are. In this mess; most of the time; the creativity remains unnoticed. Even the developers themselves don’t realize that they actually created something to be proud of.
Creativity is highly relative. Don’t get deceived by thinking that, it is just about implementing any software. All developers do that. The difference lies in creating original idea and problem solving.
Original idea: Sometimes, a simple idea makes a big difference. This is not only applicable to features of a software, but also the way softwares are implemented. Many times this has something to do with mixing different technologies/approaches. Its the uniqueness of how you have solved a problem.
Problem solving: Many times it turns out that the conventional tools are not sufficient. Many developers just beat around the bush, hoping to get some solution. But creative ones, can differentiate between what’s possible and what’s not. When it is not possible, they create something on their own. I always believe that developers who go by their intuition get things right in this department, than sheer intellectuals. Definitely, being intellectual helps, but there are cases when you also need intuition of how things should work. This helps to create radically new solutions to many problems, which otherwise wasn’t possible. For some reasons, we Indians give extremely high importance to intellect, talent and analytical power. But that isn’t enough when it comes to creativity and innovation [this is a big topic of discussion]. Walter Isaacson wrote in NYTimes:
“China and India are likely to produce many rigorous analytical thinkers and knowledgeable technologists. But smart and educated people don’t always spawn innovation. America’s advantage, if it continues to have one, will be that it can produce people who are also more creative and imaginative, those who know how to stand at the intersection of the humanities and the sciences. That is the formula for true innovation, as Steve Jobs’s career showed.“
The expectations (and possibilities) from a software system has changed dramatically in last 10 years. Initially it was thrilling to create a “xxx management system”. As the technologies made advancement in terms of libraries and frameworks, it is neither thrilling to customers nor it is challenging enough. So how can we make a difference then? This should be addressed inside the software. Its the way we are implementing, the technologies/tools we are using and creating to solve the problem in hand. Customers will barely notice this, but when things “just works”, it makes that difference. The software doesn’t necessarily need a mind blowing feature. Whatever it has, it should just work the way it is expected and be as simple to the user as possible. This seems very easy but it is arguably the hardest thing in software development. We constantly need to look for new ways of solving problem, come up with innovative techniques to solve a problem. Only then we can stay ahead.
While creativity cannot be measured, there are some factors which drives a developer to be more creative:
1. Be passionate about what you are developing
2. Try to make the software beautiful from inside. Pretty, smart and less code always matters.
3. Do not re-invent the wheel, but don’t hesitate to invent whenever necessary.
4. Try to see the bigger picture.
5. Don’t just code the module you are responsible for, and shut your eyes when you see others code.
6. Break and disassemble others’ code.
7. Accept honest criticism of your code.
8. Don’t be an evangelist, be a pragmatic technologist, even though “evangelist” sounds cool.
9. Do not forget to get your hands dirty with technology and code, no matter how many years of experience you have in your pocket.
10. “Stay hungry, Stay foolish”. (Shamelessly copied from Steve Jobs’ speech)
There are awful lot of people (at least in IT services) who are neither creative, nor they fall in the category of developers, even though they are paid to be so. Leaving this lot aside, others are unaware of their own creation. There has been a lot of discussion around quality of the software made by Indian IT service providers. While its a broad area to touch upon, the most basic thing which we can do to improve the scenario, is creative programming. No matter what kind of project it is, there will always be a scope for innovation. While most of the IT crowd need to learn this the hard way, the rest of them need to realize that they are in middle of creativity and technology. Blending both in some way, is their duty, as programming without creativity is lifeless.