One of the blogs that I enjoy reading the most is HitCoffee, partly because it is very well written by a fellow geek, but mostly because I can get several topics sparked by just one of the posts there. A recent post about the tango that developers, QA and project managers dance, made me think about what I have learned about software development during my career and I commented…
Every programmer that I have met thinks that they are awesome software designers, however I would venture to say that only about 10% are truly good at it.
Will replied…
Software developers have an amazing capacity for arrogance in general. They really seem to believe that everything would be better if they were running the company. I’ve met MBAs with more humility than a lot of programmers… and I’m thinking of some programmers around here that I really like!
I wrote my first line of code when I was about nine years old. Now it is probably pretty common that a kid that young will customize their myspace or even write a full html page, but back then it was not that common. I was lucky that I went to a school that had IBM clones that we were taught how to use. One of the surprising things about the U.S. education system to me was that even though they had the resources, the computer classes I took here were actually way behind from what I learned in Colombia at a high school level. I will some day write more about that disparity, but I just wanted to give myself some credibility here, when it comes to computers and writing code, I have been around it for quite some time.
We all think of doctors and lawyers as the ultimate arrogant professions, and while some of them probably are, a lot of people in the IT field have a god complex. I have met several programmers that like to use the term programming god. Some of them truly think of themselves as better than others simply because they can read computer code, or have memorized every single intricacy and function of a programming language.
I have no idea why I was spared that faith of becoming arrogant about programming. I do think I am above average when it comes to programming and I am also excellent at bug tracking and solving. That does not make me a better person, just someone that has patience and good logic. I however respect people in other professions inside and outside of my field.
The challenge that companies face is that communication breaks down as soon as their departments stop talking to one another. I was hired at one company because I could potentially bridge a broken relationship between marketing and development, and while I was able to facilitate the running of the projects I was involved in the relationship never seemed to get better. You had web developers trying to be designers and vice versa.
The good software architects that I have met were actually poor programmers. Big picture people tend to either forget about the details or the users. Teams of people seem to make this issue less painful, but all parties need to be truly involved and willing to comprimise.
I learned early in my career that the more I simplified the software I wrote, the more people like the features I implemented. Color coding things has always been something people respond to because it gives them another way to memorize things. I also try to apply a the little principle that computers are better at remembering things, but humans are still superior at make decisions. When I have to leave something up to the user I balance it on that scale.
Almost every programmer that has been in a company for a while thinks they understand the business side of things. However, the business side of any company is a living entity that constantly changes, the bigger the company the bigger the changes. Users are very clever and will use features in ways that they were not intended… do developers then adapt them to do the right thing or remove them?
That is when I think some of the disconnect happens. In situations like this it should be a consensus between the development team and the business that ultimately dictates the direction. Most of the times it is only one of the sides that dictates the direction and that leads in the best scenario to friction and in the worst it least to lost company productivity.
Software development is a lot of times like single life, you date different companies and try to do your best for a while but eventually you want to move on. You feel like you have so much to offer, but you are not appreciated, listened to and could do so much better. The good relations come when you have commitment and truly want to marry a company, truly start to think about what would be best for the company and not what is going to make you seem smart and clever. A programmer can be revered as a genius, but if the software they write is not usable or does not solve the problem it the end its a failure.