There is No Right Way to Develop Software

TDD is the only way to write bug-free code. Pair programming is the only way to work. We’re successful because we only hire remote workers. Blah blah blah blah blah.

I see shit like this every single day.

Little tidbits like this are so mesmerizing because they fool us into thinking that they’re the only thing separating us from that giant pot of gold at the end of a ridiculous awesome double rainbow. And, ultimately, that’s what the people writing this sort of thing would like you to think.

If you were to take a random sampling of 100 software engineers and asked them “what is the first thing you do before starting a new software project”, I bet you’d get 100 different answers.

So then why do so many people seem to think that their way is the only way?

The answer I think is both really simple and really complicated. Simple, because some people just like to talk. Complicated, because the software engineering industry is actually a collection of subcultures that face-off constantly against each other to defend their job security.

This all started yesterday after I read an article by Chris Sturgill about tests and how they’re overhyped. Everything written in the article was totally reasonable.

But the comments on the article painted a totally different story. If you were only to have read through the comments, you’d think the Chris was on crack or something. How dare he question TDD? How dare he even think to question the validity of our test-driven culture?

So after seeing some of these comments I felt compelled to write what I’m writing right now. I really don’t want this article to have to do with testing at all. This is just about being a good software developer.

Let’s cut to the chase.

There is no “right” way to develop software. I repeat: there is no right way to develop software. Some people in our industry like to cargo cult and don’t want to believe this. They believe that the sweet new hotness they learned a couple of hours ago is the only way to make things work and build reliable pieces of engineering.

I’m sorry to break it to you. The new hotness is probably not new. It’s probably just new marketing on old hotness. At some point you’ve gotta learn to stop dropping everything you’re doing and changing everything and then bragging to the world about how your new way is the “only” way. It’s not. Stop.

Being a good developer means compromise. It means sometimes doing things one way for one project, and another way for another. It means balancing the needs of your stakeholders with your ideals. Sometimes they’re not always going to match up, but that doesn’t mean you should stomp the ground with your feet and have a tantrum when things don’t go your way.

HN discussion