Something has been bugging me about Microsoft and other tech vendors for some time. As I was reading and responding to a comment over on Hacker News it finally jelled in my mind.
The commenter wanted to know if TDD/BDD was useful in startups. Of course, the answer, like all answers to these questions, is “it depends”. But feeling a bit punchy, I just said “no”, then outlined why the answer was no.
I got a bit of pushback, much of it along the lines of “but TDD/BDD is _good_ development. Surely you’re not telling us to be bad developers!”
Yes, I am.
It has nothing to do with code. It has to do with finding and meeting customer needs at scale. In fact, the odds are 20-1 that your entire effort is worthless no matter what or how much you code, so don’t write code to be maintained. Don’t write code to be pretty. Write code to get it done as quickly as possible so you can move on to the real game: customers.
This doesn’t go over well with most folks. I know it didn’t go over well with me.
The problem is that we developers have become a market, and like all markets, people are trying to sell us stuff. These people do not have our customers in mind — for them we are the customer. Instead they have us in mind.
People try to sell us stuff based on whether or not we want to consume it, not whether or not it’s useful to the people as programmers we are trying to help. This creates a bit of perverse incentives.
Don’t like talking to people? No problem. You can read a hundred programming books and none of them will tell you that you need to do that — even though “talking to people” has to be the most important thing a programmer does. Like cool little widgets instead of fuzzy problems? No problem. There are myriad vendors out there who will sell you all sorts of cool little widgets. You can spend the next ten years becoming a widget expert.
You see, what I found with Microsoft — and what’s true in the industry as a whole — is that they could care less about helping me help other folks. What they want to do is meet whatever pre-existing prejudices I might have as a programmer. Wonder what cool features C# 5.0 will have? Wonder who in the real world cares aside from us programmers?
This feeling was a long time coming, and like every person that has been conned, it took me a while to wake up. What? You mean all those things I spent money for were useless?
Last week I went through my office cleaning up. You know how many tools and languages and other pieces of crap I’ve bought over the years? A zillion. Just how many calendar controls does one person need, anyway? Will there be some calendar control Apocalypse, where everyone will suddenly have to write their own day-planner?
I have spent hundreds of thousands of dollars on software, tools, books, and equipment that tell me what I want to hear — that programming is a complicated yet noble profession which involves mastering lots of technical details and being plugged into the latest technology. But programming is helping people, not any of that stuff.
The same goes for TDD/BDD — and a lot of other things. We get sold this idea that programming is high craftsmanship. That there are “good” programmers and “bad” programmers. The “good” programmers all do things this certain way.
Yes, some things work better than others. No doubt about it. But people who sell us stuff don’t necessarily give us all the times when their stuff shouldn’t be used. For them, it’s good for almost everything. They have no incentive to provide context to us, because many times the context in which what they are selling is useful is very small, but the context in which we might imagine their stuff is useful can be very large indeed.
Do you know how many hundreds of millions of dollars — perhaps billions — I have seen spent on enterprise tools which all boil down to “your programmers need help to do things the right way. Our tools will change their behavior so you don’t have to”
Never works, but still folks spend. Marketers are selling folks on a vision of what they would like the world to be, instead of what the world really is.
Yes, I would to live in a world where having some cool new set of programming tools would mean that I have an awesome startup, or that I’m able to help people simply by clicking a button somewhere, but that world doesn’t exist anywhere outside a seminar, conference or sales pitch. In the real world, real people grapple with fuzzy difficult questions, they don’t always get along, and they implement suboptimal solutions that are better than nothing.
I have never been in a situation helping somebody where having some little cool piece of tech actually helped. Sure, I’ve thought that having the tech helped. You betcha. I’ve been programmed by vendors to think “Gee, good thing I have X! This will make the problem much easier to solve!” but it’s never actually been the case. (The only exceptions I would make to that statement would be relational databases and web applications, which standardized information storage and application distribution)
On the contrary, I have seen hundreds of programmers and dozens of teams get caught wasting huge chunks of time with stuff somebody bought that is getting in the way of their work. I have seen teams who are basically paralyzed because of all the “help” in the form of tools, languages, tech, and methodologies they have purchased. I had one client that had a hundred people working on a problem. It had reached the point where they were thinking their problem was insolvable. After prototyping for a week, I showed them how to solve their problem very simply.
Their reply? This won’t work because it doesn’t match up with our tools! Not that the customer would hate it, or that it failed to solve the problem. They couldn’t implement it because their existing tools selection prevented them from solving the very problem the tools were supposed to help them solve!
I have good friends who constantly tweet about getting hung up by tool X or technology Y — instead of solving somebody’s problem. They keep feeling like that by mastering this latest tech somehow their productivity will shoot ahead. But it never does. There’s just a new set of magical tools and tech that come out next year. This is a treadmill that will never stop. Vendors will keep making things and promising that problems will go away, increasing the overall complexity and depth — as long as programmers have money to spend.
A lot of tools are very useful, no doubt. But we need to be extremely careful that we are not being taken into some kind of imaginary marketing world that doesn’t exist for anybody else just for purposes of feeling like we’re cool. We do so at our own peril.If you've read this far and you're interested in Agile, you should take my No-frills Agile Tune-up Email Course, and follow me on Twitter.