Sunday, June 26, 2005

Mind Your Contractors

I don't like the way many corporations use contract labor, especially in the IT market. I worked as a contractor and as a full-time employee, and my experience found that most contract programmers are mediocre. There are of course some good ones. The outstanding ones have a thorough understanding of the chosen tools and best practices, sport a respectable work ethic, deliver quality results (including documentation, for all of you guys out there that were about to say, "Oh, I'm one of the good ones!"), and are truly professionals. But most don't deliver on all those categories, and they have no impetus to change because companies aren't rating their work properly. Instead, some mediocre contractors are getting by because they have a good network or have been friendly with some managers. They are not necessarily good programmers, but they're good networkers.

Where to use Contractors

I'm not sure if I just bashed or praised the mediocre contractors, but in a perfect world, here's how I see it being done. Corporations should use contractors for certain specific needs:

  • To shore up temporary staffing needs on a given project
  • To temporarily apply a specific set of rare skills to a given project
  • To use an expert for either of the above reasons, but also as a mentor to the staff for learning new techniques/technologies

The problem I saw in the 90's was that contractors were being hired at times almost like full-time employees. They were given project management responsibilities and often a fair amount of power. That's not necessarily wrong, if the contractor is good and is the type of person willing to contibute energy to a turnover phase (teaching about and documenting their work for the full-time staffer that takes over). But many times I saw mediocre or bad contractors tasked with important tasks like system design and development. Giving bad contractors important work sets up the hiring company for lots of downstream pain.

A developer may be superficially proficient in a given tool, but still not be what you'd call an advanced developer. Some could even be certified in the tool, but not have an understanding of related necessary knowledge, have a terrible work ethic, or be a poor communicator. In an earlier post, I lamented that many developers simply haven't mastered advanced concepts and techniques like object orientation, database modeling, agile development, and relational theory. I'm not a PhD in those topics either, but I'm always pushing to learn more and I know enough to know the difference between good and bad code when I see it. Contractors in the 90's made, and some lucky ones today still make, rates in excess of $70/hr, and for the ones that don't bring to the table the advanced skills I'm talking about, that's about $40/hr too much. Many contractors fall into this category of guys that can put together a basic GUI but not really think long term about the user and how they're going to operate this screen and what they could do to make the user's life easier. And it gets worse if you look below the surface. The mediocre developer designs poor table structures and once you've got a bad database foundation, you've set yourself up for endless hassles making the GUI and business logic have to dance around that. The point here is that most developers fall into this category, and therefore by the law of averages, so do most contractors. It's not an intentional malicious thing; the market paid well and needed guys, and companies were hiring, so it happened.

The Metric System

Part of the problem is a lack of metrics in our industry. It's hard to rate the quality of someone's code unless you have the technical ability to read and understand it, and the advanced skill in that tool set to contrast the best practice solution with what the contractor devises. There's no way to rate a developer's past work without access to their code. So most of the time, the interview is based on personality match and a basic resume bullet match. Some interviews may include a technical interview too, but these are also flawed, often testing the interviewee's ability to simply memorize a tool's help file, rather than asking about how they would apply techniques to a solution; such interviews can identify blatant resume liars, but are often as much to boost to the interviewer's ego than to really test the prospective hire's aptitude for quality IT work.

Ironically, a contractor possessing a good work ethic and communication skills but flawed or dated programming practices is just as dangerous or maybe more dangerous than the stronger developer that might not be as comfortable chatting with the CIO. Guess which one is more capable of grabbing management's ear? Of getting the new project work? Of then creating more excrement in the company's systems?

Just Rewards (for the foolish)

Here are the risks you face when hiring a sub-par contractor and giving that person important development work:

  • Most developers, contractors or not, have an aversion to documenting their work. When the contractor leaves, you'd better have resources skilled enough to pick up the pieces they've left behind.
  • If the contractor was brought in to build a new system, they've gained valuable business knowledge (or should have) as part of the analysis process. When they walk, so does that knowledge...often to a competitor who's hiring contractors to build a system and wants someone to have business knowledge on the resume. Also, the full-timer tasked with picking up the pieces has to go through the learning again because of the contractor's likely reluctance to document.
  • If the contractor didn't employ good OO design, then the code will likely be full of hardcoding and old-fashioned procedural-style logic. That might have been ok in 1990, but by 2005, these guys should know better. Polymorphism is a very powerful tool in the hands of the right developer, and it is a good solution for addressing the many custom conditions modern systems need to handle, and the business rule changes certain to follow. Systems written by guys uninterested in educating themselves on newer techniques (techniques, not necessarily languages) will be hard to maintain and prone to heavy production support, which is a poor time sink for your full-timers left holding the bag.

"Let's build a crappy system!"

There are good contractors out there. As a former contractor myself, I strived to not produce the deficiencies I mention above. I always documented my work, often with formal manuals that could be passed on to those continuing my work. And I worked to apply best practices and think of the user when designing things. I made my share of mistakes, but by and large my clients were pleased. I enjoyed working as a contractor and getting to see a variety of projects and work with different people, and I might still be doing it if the market hadn't crashed. But as a full-timer now, I'm dealing with the things I mention above. The companies that hired the contractors weren't purposefully saying, "Let's build a crappy system!" but they had no way of knowing what was going on because they didn't have the ability to evaluate the true quality of the work.

Saturday, June 04, 2005

Corporate America vs. The American Dream

It's sad to think about how the relationship between corporation and employee has changed in America. At one time, you rarely saw people switch jobs; they took care of their employer and the employer took care of them. There was a sense of duty and honor on both sides. Things are different in the present. It's common to see people switch jobs with great regularity.

What changed, and what caused such change? That's a question with perhaps many different answers. Corporate America will say employees are selfish and greedy and job hop to secure a better financial position. Workers will say that corporate America started it first, by laying off droves of employees while corporate heads got rich. Like him or not, if you've been in corporate America for any length of time since the 80's, you've got to have some appreciation for Michael Moore's sentiments when he refers to Roger Smith's move to offshoring in Roger and Me, sarcastically saying, "Roger Smith was a genius." I say to the pointy haired ones, "Yes, employees job hop to secure a better position, but that's better than doing it by selling your soul."

I'm not sure what side of the chicken and egg question comes out ahead in that argument. But I do know that the rich have been getting richer and the poor getting poorer for a long time. And it's a trend that needs to change before there is no middle class. I'm not an economics expert but it seems to me the middle class is the foundation for nearly every society we've seen. George Carlin joked that there are three classes: The rich make all the money, the middle class does all the work, and the poor scare the middle class into keeping its jobs. Carlin can be goofy at times, but in this case, he's right.

Do all the work! Is that all the middle class does? I said in an earlier post that you can't really be a good leader without some decent followers. Ever worked on a team where there were lots of people who thought they were king? I've seen it and it's not pretty. Too many chiefs and not enough indians, goes the saying, although perhaps the more politically correct version of that should say, "Too many Ghandis and not enough Patels." Damn it, someone has to do the work! We're a long way from the day when we have to worry about robots being able to make the human race obsolete, so that means there better be a middle class around to get things done. And when you think of America, after all, isn't the "work ethic" one of things that always comes to mind?

What would a world without a middle class look like? It depends on where you are. If you're one of the rich, it looks pretty damn good. You don't have to work and the masses will do anything for an opportunity to eat the crumbs off your seat cushion. But if the distribution stays the same, then it will mean that the rich will be outnumbered 9 to 1. Of course, the politicians will be on the side of the rich, so the poor won't be able to count on tanks and soldiers to support their thoughts of revolution.

What's the point? Just that perhaps for America to protect itself, it may have to alter the concept of the American Dream. That's an arrogant term anyway, since to improve and advance one's self isn't a goal indigenous to American soil. It should be termed the Human Dream, or perhaps the Human Aspiration. America was just fortunate it was in the right place at the right time, with the right people, and um, a powerful military, to make things happen. It became the geographical embodiment of this Human Aspiration. The land of opportunity.

But the world is changing. As more of the countries in what Dr. Thomas Barnett calls "the non-integrating gap" begin to come to grips with their disorder and civil wars, as more countries like India produce educated lower-cost alternatives to American labor, soon the "American Dream" will begin migrating to other parts of the world. Where before wars and political instability made countries infertile ground for the Dream, now there are more places where it can happen. The laws of supply and demand dictate that naturally the world's best and brightest won't need to make the pilgrimage to North America to make their lives better.

To combat this, perhaps America must make the transition from a country of great expectations to a country of great managed expectations. And this brings me back to corporate America, but also to the population as a whole. Our future leaders are going to have to convince people that exponential company growth and profits in an age of subdued American supremacy aren't realistic. They'll have to show that the Japanese have it right when the difference between the lowest worker's salary and higest executive's salary is a factor of 7, not 70 (and that number is even higher now in America - I'm quoting numbers from the 1980's). No human being is worth that much money. And not all the rich end up being philanthropists like Paul Allen, funding advances in aviation and spaceflight technology, or Bill Gates, funding biomedical research. Excessive money can sometimes be like excessive time; it finds not-so-nice places to trickle into, like politician wallets.

We need to learn that perhaps it's unrealistic to expect such gross gains from our stocks and even in our personal lifestyles. I know it sounds horribly un-American here, but how expensive would medical care costs be if doctors decided a Toyota Camry was good enough for them instead of a Mercedes? Maybe that's a bad example. But if everyone had more modest expectations (not that they gave up on improvement, but learned to not sacrifice all for strictly monetary gain) then perhaps you wouldn't see such greedy moves on the part of corporation heads. And perhaps their usual excuse, that they're doing it for stockholders, would stop holding water.