This topic (and the replies) are getting boring and boils my blood sometime. I'm going to rant like I've never ranted before. I'm just pissed.
Yeah, I hear those common "excuses" for not doing TDD/BDD. I also heard why we need to use BDD, then followed by ATDD, instead of just TDD. I also know the stories of Facebook, MySpace, Twitter, and other startups that hire super-hot-shot developers, feed them with pizzas and coke so they can stay up all night writing code (cough, I mean, fixing bugs from the code they wrote this afternoon without unit-tests...cough).
I mean, here's the thing, if you're in this for the money and fame, then perhaps you should be honest and say it what it is: "I don't give a F* about the technology and methodology, I just want to make something people want and get rich. I wanna hire the best developers out there to deliver me a working code while I make decision about the product development and business decisions".
Don't give me the crap about "Changing the world!". You don't plan to change the world, it's accidental. Nobody knows how to change the world. If you know how to change the world then you're probably some sort of god or something.
Here's another thing: I don't care whether you use TDD, BDD, ATDD, DDD, XXDD. I don't. What I'd like to know is that can you write a unit-test to prevent that stupid bug you caused so that we can detect it faster during build-time when someone had to modify something that may or may not affect your code? Don't give me excuses like:
"Oh we can't write unit-test around there because it has hard-dependencies with a WebService/DB",
"Oh we need to bring up the Web Server because we can't run the tests without it"
"it takes a lot of time, like 2-3 days to get to the point where we can write the unit-tests, and we might break some stuffs along the way".
If I keep hearing these kind of excuses, I'll grab an unused keyboard and drag such developer to the server room. We're going to have a grown-up chat. Nobody will come out from the room unless my point sticks in the devs's ass. Either that or until there's no more keys in the keyboard. I'll bury that developers with books about testing.
How many times we heard the stories that a hot technology companies growth were uncontrollable and at some point, everything just fall down. Fixing bugs becoming a drag. The earlier supposedly "hot/superb" developers have left because things were not going well... and eventually the company dies. Then HN crowds starting to have a long discussions of the blame game: is it the tech? is it the leadership? is it the business models? is it the culture? is it the building? the aeon chair?
I find it funny that the hot-shot developers always left after the initial rush is gone. You know, when they have to deal with the shitty code they wrote? remember that time? Nah, they just left for another startups and we (or at least I) thought they were the cool developers: the "it" team", the "dream" team, the "3 small productive team by the corner that left because they were no longer respected". All we heard is that they left because the "culture was no longer acceptable" or because "management made mistakes". I mean... c'mon... we're grown ups. These hotshots developers were part of the problem too.
I just want developers to act like a grown-up. Man-up, fix that code. Make sure the bug won't show up again in production, if it does, I'll fire your ass. Don't give me BS. Clean up your own mess. Don't run away. Don't blame management. Educate the management.
Often people point out that "don't worry, we'll get the market first then we'll clean up". How often that'll happen? The chances that will happen is probably 1:20 or 1:50. Most often, the developers have to live with the stuff for the rest of their careers in that company.
I also find it ironic that many people would give their 2cents (no, more like their 99cents) especially when they're NOT involved in the situations. When they are actually involved in such situation, I bet my career that they're actually screaming, kicking, punching, and yelling for changes, or for better methodologies/processes, or gulp writing unit-tests. Or they simply quit their job.
Don't pain a picture that points out how long it takes to write unit-tests. If it takes too long, you're doing it wrong!. Cut your HN addiction and start writing those unit-tests. If you need to throw away the code, throw away the unit-tests as well. It took me less than 5 minutes to write a single unit-test. It took me less than 5 minutes to delete unused code (both production and unit-tests).
Yes, I am painting a generalization with a gold brush. This is what happening in our industry. Don't act like it's a minor problem.
I'm really passionate about this field. But sometime I am considering to join the hotest startup as tech-lead or management (doesn't matter, as long as I don't have to deal with craps at 3 AM in the morning), get rich and call it a day, be an angel, sit down on conferences, just talk, talk, and talk, following the superstars that HN-ers always praised (the likes of jwz, pg). One successful exit and people will pray like you're some sort of god or something. They'll quote you forever.
Feels good to rant. It's been a while.
PS: No, I'm not ranting because I hate my job. In fact, I'm in a good position right now where people write unit-tests without even being told to.