Designing or engineering software

<p>The software business has been my home for more than 5 years now and I've seen quite a few applications take shape during that period. Some applications were better than others, but overall you can see that every single person, that is building software, is taking pride in his craft. Some people go even beyond their personal love for crafting software and start telling others how you should be building software. A very noble cause if you ask me.</p><!--more--><p>These people put processes and procedures in place to make sure that the quality at the end of a development cycle is up to standards that have been agreed upon before hand. It makes things much more predictable, so that when things go well in one instance there's a high chance they will go well a second time. The things I'm talking about here are all placed under the flag "Software Engineering". I probably shouldn't have told you all of this, because you're most likely one of the programmers, that follows a software engineering method every day. If you don't, I think it's time that you start following one. As I said, it makes things much more predictable.</p> <p>There is also another side of software. The creative process. The people that design software are very creative in doing so. The things you see in every day life, from live messenger up to firefox all comes from the minds of very creative people. The process that goes into thinking up these applications cannot be called engineering and here's why. Creativity exists in a form of chaos. People make weird jumps in their mind to come up with the most brilliant solutions to problems they think need to be solved. These jumps can look very chaotic to the observer and there's no fixed process in which these ideas take shape. You cannot tell someone who is designing, in what order he should get his ideas. It will stiffle his creativity and you end up with a kind of a bleh product.</p> <h2>Design versus engineering</h2> <p>When you look at the engineering aspect of software, it's all about making sure it works correctly and that it is maintainable. You will see order, straight lines, rectangles, kind of boring people, etc. However when you look at design you see curves, colors and people with wild designs on their T-shirts. Design en and engineering are two totally different worlds. </p> <p>The one thing that triggered me in writing all of this down is that I had a very short and dissatisfying discussion with one of the guys I work with on a software factory. He's responsible for writing down the engineering processes and making sure people follow them. </p> <p>I showed him a design I made for a mobile app. He asked me what program I used to make those designs and I told him, I use a design tool, because I can't work with tools like Balsamiq or Visio to create the designs. They are too restrictive for me. It stops me from doing the right thing. He replied, you're doing it wrong. This is not repeatable. You want the screens to be the same. </p> <p>That my friends, is an answer that makes me not just a little sad, it hurts me. He basically told me to stop my creative process and start following some engineering process and start producing straight lines in my mind. I simply cannot do that, so he effectively stopped a very important though process that will make us both succesful.</p> <p>He did however make me think about the process of designing and engineering software. His approach was that of pure engineering. My approach was that of pure design and creativity. Both are needed for creating a great piece of software, but none of them is perfect on its own.</p> <h2>Design and engineering</h2> <p>The short discussion with this software engineering guy made me see something important. Just engineering software isn't good enough these days. It will only give you windows 98 interfaces or worse. You need someone that can make your software look cool and do stuff that the user wants. And that goes beyond basic use cases and analysis models. It includes user interaction, giving the user the idea that you truly understand him and what he wants to achieve. In essence you need a designer guy to come up with something creative and cool looking.</p> <p>At the same time you need someone that can turn the ideas into working software. The designer guy isn't going to be able to do that, because of his curvy lined brain. You need someone that sees/feels/breathes straight lines and squares. He's able to follow a process and execute procedures to build a working piece of software based on the ideas and designs of the designer.</p> <h2>Making it perfect</h2> <p>The whole process of creating software becomes even better when you do the following. Stop throwing those designs over the wall and the software back over that same wall. Instead, walk around the virtual wall and start working together on the software. Designers and developers should have a desk in the same room and they should be talking. There's nothing wrong with a little bend in your straight lined brain and a little less curves in your mind if you're a designer. And since nothing is perfect the first time, it's important that you work together to tweak the software so that it is perfect at the end.</p>