If you're writing code and you're not testing it, the code is wrong. I don't
care if it does the right thing, and people need to understand this. If it
works by accident, you're still wrong.
Bryan Liles - Ruby Hoedown 2008
Back in December Chad Fowler posted on dead end jobs and the Stockholm Syndrome. The Stockholm Syndrome is "a name given to the condition wherein hostages develop positive feelings toward their captors despite being held in negative, unfavorable and even life-threatening conditions. Victims of Stockholm Syndrome will even inexplicably stay with their captors even when given the chance at freedom." Chad goes on to examine how this can happen in the workplace. You can read the entire article here.
Recently a colleague shared a Dilbert comic that drove home something that I had been saying for a while.
Though the Dilbert comic is funny the sad thing is that the threat of "not being a top 20% performer" or "do this or we will fire you" is something that affects way too many sotfware engineers in various organizations. Far too many of these engineers are the lower 80% of pool*. The top 20%-50% know what they are worth, get frustrated and leave. While Agile is supposed to provide a safe environment where empowered engineers can say "no", this is not really the case in these shops that are attempting to be Agile.
Right now the engineers who are empowered are the ones who know what they are worth in the open market and are not afraid to say "no". They are not afraid to say "no" to long hours on a project that was severely understaffed and given an unrealistic timeline. They say "no" to missing a scheduled vacation, professional conference, being asked to take time away form activities that keep them current/focused/productive to participate in the latest project fire drill. They say "no" to hacking together code because they take pride in their work and feel that professionalism means that you hold yourself to a certain standard of software quality**. They reject arguments that you must idiot proof designs for engineers with a low skill level (net negative producing programmers). These threats are meaningless to them because they know what is happening in the industry, and know that these threats, and the harsh words that they receive from management for doing the right thing have as much credibility as a drug addict lashing out at their counselor. For these individuals, if management follows through with the threat of firing them they will have another job, probably with a pay raise within two weeks.
Agile is all about people over process. CMM, due to it's inefficient nature has a larger tolerance for the lower performers. Agile on the other hand doesn't function unless you have 60%-70% top performers. When you put together a team of these top performers, get out of their way and let them loose it is amazing to see the innovation and velocity that comes from these teams. I have seen it first hand.
But many of the failings of Agile efforts go beyond engineers and are often are rooted in having non technical people running a technical projects. It is a recipe for failure. If you are running a software project, selling it or whatever and you do not understand the process of developing software and do not have a deep understanding of what works, what doesn't work and the current industry best practices then there is a high likelihood that your effort will either fail or produce sub-standard results ***.
One of the best frames of reference I have for this is the start up community. There are lots of business-type people who have ideas for companies that are strict technical plays. There is just one problem, they have no idea about tech. Every time I see that, I can predict the outcome of that startup. The other anti-pattern is when you have a technical team but take Angel money from someone who has no idea about tech start ups. These companies have a much higher failure rate because grossly under-qualified individuals are empowered to drive insane decisions that, in many ways are not unlike the requests/demands we get for fixed scope/fixed budget projects using antiquated/inappropriate technologies that generate lots of content for sites such as the daily WTF. The sad thing is that they create a lose-lose situation for both parties.
As we move into the next decade and beyond society has a large number of problems ranging from demographics to addressing our future energy needs. Many of these problems are going to require automation and software to solve. This is why every industry expert is pridicting that demand is going to continue to be higher than the supply for the next 20 years. The winners are going to be the ones who are able to effectively attract and use this scarce and valuable resource to solve these problems. When workers end up developing The Stockholm Syndrome it hurts the employees and the company. But more importantly it hurts society and man kind because that is one less engineer that is working on solving real problems that to improve the life of everyone.
* Look for a posting in the near future on Net Negative Producing Programmers and how they kill Agile projects.
** Bob Martin (uncle Bob) has some great articles on software craftsmanship here http://www.artima.com/weblogs/index.jsp?blogger=unclebob
*** The most dangerous are those who think they understand it but don't.[...]
If you are in the tech industry today it is pretty easy to see who the up and coming companies are and who is in decline. All that you have to do is look at the work environment for their IT professionals. Are they attracting top technical talent? Do they foster that talent and do they do what it takes to keep them, or do MBA's that lack a deep understanding of tech run the show? Do they allow their technical people the latitude to do the right thing or do they constrain them with outdated processes and endless rules down to a two+ page dress code? Yes, this sounds like a lot of corporate environments, but I have also seen my share of startups that have done the same thing......most of which have not had any real success. My favorite examples of this were the tech start up that had a dress code and the one that recently was looking for a senior Ruby On Rails developer with a max salary of 50K with no equity.
Tech is on fire right now. Google and Facebook are fighting for the best talent, and everyone else is trying to keep up. With the announcement of Google giving across the board raises and bonus's so people will not leave, combined with the money that is currently going to startups many are speculating that we are in a bubble situation. Anecdotally, I get unsolicited calls on a daily basis from recruiters for Java and Ruby positions.
Are those who are claiming that there is a bubble right? Partially.
To understand this you need to understand the nature of programming and programmer productivity. Unlike factory work, different programmers have vastly different levels of productivity. The general consensus is that a rock star programmer is about 10 times more productive than a bad (net negative producing) programmer and an average one is about five times as productive. Yet if you look at the salary differentials they do not come close to reflecting the productivity of the engineer.
If we were to use developer productivity as a gauge for IT salaries then our lowest producing programmers would be making 30K, mid range ones would be making 150K and the best ones would be making 300K. Minus the guys who have been involved in successful startups that cashed out on stock options this hasn't happened. If you compare the net revenue gain for a company that is effectively utilizing the skills of a top software engineer as compared to that from a cosmetic surgeon, music star, professional athlete, or hedge fund manager IT labor today is a bargain!
But developer productivity is missing the point without demand for the systems they create. IT both saves companies money by automating tasks and creates new business opportunities. Look at the amount of time that has been saved via services such as Google Search and Wikipedia or the increased efficiency that the inventory management systems at Walmart has that is able to accurately predict when products will be needed at stores. Given the current unemployment rate many may think that it is displacing those workers. In the short term that may be true, but for the next twenty years demographics are going to be taking workers out of the economy at a pace that we have never seen in the US. Without the aid of this technology we will not be able to provide the same level of services we enjoy today. IT amongst other tech intensive disciplines will be critical in filling that gap.
Companies like Google have figured this out. Their number one asset are the people they hire. Sure they have a lot of IP, but at the end of the day that IP is worthless without talented engineers who can continue to improve and creatively destroy it to drive innovation. That is the nature of tech, and the nature of many of the main line businesses today.
So what does this mean.
If you are an IT professional, you stay current and you are really good, you have a VERY bright future. If you are a average one you will do ok and if you are a net negative producing programmer you will probably be able to eek by in the third tier IT shops.
One of the dumbest moves you can ever make as an IT professional is to sign a non compete if it is in a state like Georgia or Massachusetts. By signing that one document you could be losing hundreds of thousands of dollars.
If you are running a company you are gong to need to ask yourself where you want to be. If you think you are a tech company and are not paying top salaries (either via equity or straight money etc.) all that I can say is, good luck. Personally I think you deserve to and will fail. If your main business is not tech then you are going to need to ask yourself if that really is the case. Walmart is not a tech company, yet they have some of the most sophisticated computer systems in the world. The advanced tech that powers their supply chain is a critical piece of their competitive advantage.
The president elect of the GA bar is against amendment one. Looks like things could get interesting when the first test cases roll around.[...]
About a month ago I had a chance to see a presentation on Flex. I have to say that before this, I was dubious about the technology being that it was Flash based. Now don\'t get me wrong, Flash is a great technology for creating interactive web pages. The problem has been that most flash developers have had a very visual bias to their software designs which meant that the performance of their complex applications was usually poor and that they favored slick designs over usable interfaces.
That is where flex comes in. I am by no means an expert in it, and would need to investigate the technology further before using it on my own projects. With that being said it seems to have picked up from where Lazlo had left off. It takes advantage of web services, is performant if your client has the latest version of flash and is much more of a write once, run anywhere type of environment. When you couple that with being able to take advantage of Flash\'s \"goodness\" it looks like it provides a really nice way to gain a very rich user experience.
With that being said there are some unknowns, at least to me. These include, how good are the automated testing harnesses for it, what happens if Adobe decides to change the licensing terms of it, and what about Silverlight? Silverlight is definitely a competitor for this product, but right now it has some limitations that are preventing it from being a serious contender. These include, that lack of saturation in the market, what appears to be not as broad of support on all platforms (such as linux) and what appears to be a limited set of differentiators between this product and Flash. The only big one that I can see off the bat has to do with it\'s support of Windows media versus Flash that requires you to use Flash for video support. From a cost perspective, Windows Media is cheaper. It also allows you to stream video, versus Flash which only allows you to do progressive downloads. But with that being said they also took some things out that you got in the player that would be nice to see. The biggest thing is the controls for the video. With the Windows Media Player plugin you get really good, fine grained controls with streaming video that allow you to do things such as mark video which was very handy. Silverlight doesn\'t support that.
With all of this being said, I recently saw a Mac/Flash fan-boy relabel himself as a Silverlight expert, something I never thought I would see. So if that can happen then Silverlight may have a chance to really go somewhere. Either way it will be interesting to see where the technologies go.
So I went to this month\'s AJUG meeting which was on Flex. Being that there is a lot of buzz about Flex I wanted to see what it was about. Giving full disclosure I have to say that for a long time I have been biased against flash interfaces due to the talent that surrounded it. For a long time this community seemed to be centered around graphic designers that don\'t know how to code and who favor sexy interfaces over usable interfaces. On top of that I had played with Lazlo and had seen how slow a substantial flash application could be.