Friday, April 20, 2007

It's Difficult to Grow a Test Developer

A lot of testers begin life as software test engineers.  That is, they execute tests but don't do any (or much) programming.  The dream of many testers is to become a test developer or a developer.  Reciprocally, the dream of many test managers is to grow their testers into test developers.  Is this a realistic dream?  It can be, but probably isn't in most cases.

It's very hard to become a self-taught developer.  When we look out at the computer landscape we see plenty of self-taught programmers so it looks easy.  However, for each one that succeeds, many more fail.  Why is that?  Two reasons I suspect.  First is that some people are just not cut out to be programmers.  Second, and perhaps more important, is that it is really hard.  Becoming a good programmer* requires a lot of knowledge.  That means a lot of reading (online or books) and a lot of practice.  It turns out that it is a lot easier to desire to be a programmer than to put in the work to become one.

I covered the first point in my post entitled You Can't Teach Height.  Studies show that a good number of people, even those interested in programming, cannot grok it.  My suspicion is that this has to do with the abstract nature of programming.  This isn't to say that they can't program at all but they can't program well and as the difficulty goes up, more and more drop off.

The second reason is the one that gets a lot of people.  I've seen many try to make the leap and only a few succeed.  Those that did had to put in a lot of work on their own time.  Those that didn't often weren't willing to put in time outside of work.  Anyone desiring to go from tester to test dev with just the time they spend on the job is probably going to be disappointed.  It takes a whole lot of effort to become a competent programmer.  I laid out my recommendations in one of my earliest posts.  I call for learning not just the syntax but also the essentials of computer science.  You can program without these but if you don't pick them up you'll never be great.  Learning them, however, takes a lot of time and effort. 

Most of the time employers won't give you that time.  They want you to be productive and anyone learning to program is not productive.  The simplest things take a long time.  There is almost always a more competent programmer on the team somewhere and if work needs to be done, it will be given to him.  It's not that most managers discourage learning to program.  They'd like it to happen.  They just won't often budget enough of your time to actually do it.

Now that I've said how hard it is, are there things that testers can do to increase their odds?  What about test managers?  I'll cover the issue from both perspectives in future posts.


* It is important to note what I'm talking about here.  It's not too hard for someone to teach themselves enough C# to write an ASP.Net page or enough perl to parse some log files.  That, however, is a far cry from being able to write a test harness, analyze performance, or automate the testing of a COM object.


  1. In reality, employers prefer to hire an ok developer rather than paying more for a great developer. Most employers just want to get the work done (and fast), they rarely care about performance, code cleaness, or methods used.

  2. "The dream of many testers is to become a test developer or a developer"
    Do you think so Steve or is this based on facts? I do experience other career dreams in the Netherlands. Many testers want to become a test professional, test manager or quality manager. In my opinion the career path from test engineer to developer isn't that likely. But perhaps this is different from other countries.

  3. @Marc, good point.  There are certainly career paths in testing that don't involve programming.  At least at Microsoft, there are a lot of testers who want to go on to some sort of development.  I can't say how broadly that feeling is held.  I think it is fairly widespread elsewhere, but I don't really know.

  4. "The dream of many testers is to become a test developer or a developer"
    I know you've answered this already... but...
    The demands of modern systems and the methodologies that emerge to help us build them effectively seems to be changing expectations. More and more teams seem to need good testers who are capable programmers... and good programmers who are capable testers. This is opening up new career opportunities and new mind-sets. Indeed it seems to be blurring the lines somewhat. Some lump Testers and Programmers into one category 'Developers'.
    For example, Cohn says in Agile Estimation and Planning: "Participants in planning poker include all of the developers on the team. Remember that developers refers to all programmers, testers, database engineers, analysts, user interaction designers, and so on."
    I've invested in my development skills because it adds value to my ability to be a tester (or now Tester-Developer as some people refer to me). This doesn't mean I want to be a developer. I like testing. I like solving testing problems. Increasingly, this involves writing code (as you say, not just scripts).
    In my experience, the really good testers are testers because they want to be, not because they have to be. Many good testers would be able to be developers if they felt as passionately about development as they do testing. It's not a question of aptitude, just a question of desire.
    Unfortunately, there are also a lot of testers, in my experience, who have become testers because the people that hire them have a naive view of software testing and hire others who have a naive view. They're usually cheaper than the good ones, making them even more attractive to many managers.
    These types of testers seem to be the ones who are closest to the tester stereotype, according to my conversations with many developers. Perceived to add little value and not really know much about testing.
    Why does this happen? In part because many managers I encounter don't understand why they should pay the same (or sometimes more) for good testers as they do for their good developers. This undervaluing of the skill can make testing a less attractive career choice for those who might have otherwise entered into it as a career. Ultimately, however, this is because they have a naive view of testing.
    As a result, it's easier to get into testing.
    This naivity, I think, is characterised superbly by David Christiansen's post "Playgrounds and a Thought on Testing"
    (thanks to Mike Kelly for the link to the 'Playgrounds' post)

  5. Steve's first reason, "Some people are just not cut out to be programmers."
    Let me make up a new word, "programmership". My definition of programmership is:
    Adeptness at concisely explaining the solution of an abstract problem to a computer in a language it understands.
    People have different degrees of programmership. What degree of programmership have I attained?
    These questions lead to self-doubt. Self-doubt is fear that either stops you in your tracks or motivates you to overcome it. I doubt that I am a good programmer. Therefore, I am motivated to get certified, study hard, and build projects outside of work to gain experience. After four years of ASP.NET C# I still feel like I have only scratched the surface. Will I ever feel that I am a good enough programmer to stop studying? I doubt it.
    If you want to, you can read the rest of my reply on my blog.

  6. The world of testing is becoming a lot more technical than it once was. While there is still a need for