I have been developing software over the last 20 years. In this time I faced several things that de-motivated me from my work. In addition, I passed on that same non motivation to fellow software developers. In my experience, a properly motivated developer can be exponentially more productive than one who has lost their motivation. I have made a point to keep a list of the things that leads to such a state in an effort to combat it. Today I am writing about the worst of worst.
Matt Wullenweg, the founder of Wordpress , summed up the aesthetic of coding when he wrote: “Code is poetry.” There is something so simplistic in this line. It has the eerie, erotic fist-punch of a haiku poem satori Certainly there is a rhyme and meter to what we do. Certainly code doesn't read like a novel. Topographically, a page of code has the look of a poem. For the unitiated a page of code looks like carefully constructed chaos, while for the initiated, a page of good code could read like verse from Wordsworth.
There is a beauty and subtlety which forms images and converts ideas from these multiple lines onto the pixelated screen for users across the world. In fact, never has there been a poetry so widely read across an audience with no regard for race, creed, color education, social class or religion. A good coder is truly a universal artist. So why then is there so little value in what we do? Why is there so little value in code itself?
When we write code for a client they only see the tip of that iceberg, the ten percent that sits above the water. These are those little pixels that flash bright and click open windows and drop down menus. What they don't see is the 90% below the surface, the code that we as architects call our labor. In reality a client only sees two things: A. that the code base is operational and B. That it is cost effective.
Now I have been working as a lead architect & developer on a product for a client for over a year. Never was I given any concrete requirements. I was only given a general idea from the client who spoke something like: “we want an e-commerce site.” (It's not an e-commenrce site, but to protect the innocent let's call it that) With such general guidelines I have been developing a version of what I envisioned the client asking for. Hey, at the end of the day I'm getting paid for what I love and I love working with new tech and ideas and most importantly I wanted to deliver something cutting edge.
And as it's now years end and I'm cleaning house a bit, I decided to clean up the code base by removing code we're not using any more. To my surprise I erased almost 90% of the code related to the business logic of the application. I'm the first to agree that a business in constant state of flux has changing business needs. The software must be kept fluid so the client can stay competitive. But in this case the software never had been live. Never was there user testing, just a guess by product designers on what the market may need or what would make the site look cool.
And of course as the client could say, based upon the amount of code in the finished product: “Wow, I essentially paid you nine times more than this site is worth. Never could the client have known of all the work that led up to what is there now. They only see the finished product and the bottom line: A. that it's cost effective and B. that it works.
But as I sat in my client’s office last Friday night, I kept thinking about this code that had been erased. I, for one take great pride in my work. I'm not just a hack getting paid for a job. I love what I do. Personally, I akin writing code to painting. Each line of code, even every little keystroke that becomes a character is something that I have created. I still get teased by other developer friends when I am trying to get all the curly brackets to match their indentions or try to name variables in a meaningful way. Maybe it's my OCD, but when you spend hours writing the code, it becomes this piece of art. That may be the reason I am reluctant to erase the code when new requirements make old code obsolete.
So I kept asking myself that if this were a house being built by Frank Lloyd Wright do you think that the client would ever expect such an architect to tear down what he has built because their living needs have changed. Of course not! You would have too much respect for the artist and his art to tear down any precious wall. Now imagine commissioning a painting from Van Gogh. You tell him you want painted a night scene over a little town with stars in the sky. And then when he hands you a masterpiece like “Starry Night” you say something like: “I don't know Vinny, these stars are just too BIG. Could you tone it down a bit” No, you wouldn't, because you have too much respect for the artist and his creation.
The problem with our medium is just how quickly and easy it is to erase. Click, highlight, delete. That's it, and in a puff it could all be gone. A years’ worth of work in one second. Unlike a painting or a house, code is too transmutable. For this reason, clients and consumers have yet to elevate code and see that really: “Code is Poetry.” And as such, software developers have yet to be elevated to the estimation of poets in the public's eyes. There is an art involved in creating really good software and we should start classifying our developers as artists in their own right.
Now don’t go on assuming every coder is good, Just like an artist, every one can draw but only few can create masterpieces. For the record I will not hire 90% of the coders I have worked with in my 20 year carrier.
Thus, the very nature of coding, our products erasabilty that is my demotivator. I almost feel that the next client who would expect me to erase what I have done is not even worth working for. We developers, as artist, must start taking our work seriouslyso that our clients will as well. For my New Year's goal, I have decided that any potential client will have to read The Lean Startup by Eric Ries or let me explain it to them. If I need to throw my code away, there must be good a very good reason. And of course, I would rather get the hell out of there rather than stay working on a project for clients. If at once they are not going to change, they will never change.
And that, folks, is what really demotivates me.
I'd like to hear back from you on this. Tell me what demotivates you most as a developer and for the managers who manage developers how do you manage a developer’s work when business requirements change, do you explain the reasons for the change or just ask the developer to make the change because the big guy in the top who is paying for every one asked to make the change.