Hanalei, Hawaii Thursday, March 11, 2010

Just Stop. Please.

I’ve tried to stay out of the whole “Spolsky Thing” of late as it seems like it’s spectacle for spectacle’s sake. That seems to be Spolsky’s thing and it’s one of those things you sort of ignore most of the time.

I’ve tried to stay out of the whole “Spolsky Thing” of late as it seems like it’s spectacle for spectacle’s sake. That seems to be Spolsky’s thing and it’s one of those things you sort of ignore most of the time.

But he just keeps going – sort of like your parents revving your kids before bed while you watch, knowing there’s nothing you can do – he’s just going to do it anyway. It’s weird how that works – my family and my wife’s – they love to rev the kids up at bedtime for some reason and then I spend the next 2 hours trying to get them to go to sleep. It’s not fun, but to my dad, who’s upstairs reading a book (complaining about all the noise coming from downstairs) I just “worry too much – let them be kids!”

Sure. I’ll do that. And I’ll pay the price when they wake up tired the next morning and cry through breakfast while you remind me how discipline was handled when you were a boy.

Anyway - as I read through Joel’s latest train wreck, this clip of Jon Stewart on Crossfire popped right in my head…

Joel – it’s not funny any more. You’re hurting the industry, not helping. You’re acting like my dad did – revving up the industry and spewing old-time wisdom that does not apply anymore.

Here’s some tea – time for bed. Please stop.


Gabriel Florit - October 7, 2009 - I agree. I just read his latest post, about duck tape programmers... I'm glad I don't work at FogCreek. I don't want to write code like that. Maybe he's never heard of maintanability.
pcomeau - October 7, 2009 - Thank you... I too agree. The final straw for me was a post of his ages ago that essentially dissed any coder doing internal development. Basically if you weren't making a product for sale then your efforts were worthless, or at best second to the real developers like the ones he hired.

At that point I decided Joel wasn't terribly relevent to me or my industry. Everything Joel says has to be viewed through a filter that a) only software that is for sale matters, b) only his view of how the development process works is correct.

The thing that saddened me in his latest post was once again he takes a swipe at unit testing, guess his code works the first time and he doesn't have to worry about changes mucking it up... sigh.
Nicholas Piasecki - October 7, 2009 - To be honest, I don't see what all the hubbub is about. People keep honing in on the bit about unit testing which was one small blip, and he qualified the quote in the next paragraph. I think it was a jab against the seemingly new fad of unit testing for unit testing's sake at the expensive of actually shipping software.

The gist of the post is to keep it simple and ship often. That's not new, and it's hard to disagree with that.
KevDog - October 7, 2009 - @Nicholas

It's not just the keep it simple stuff. Take a look at this post on IoC containers: http://tinyurl.com/lame-post-on-IoC and scroll down until you see Spolsky's answer. It really is the coding equivalent of "Hey, you kids stay off my lawn". It celebrates ignorance and assumes that the best way to write code was perfected about 10 years ago.

I used to think Joel on Software was required reading, now I just think of it as a voice from the past.
av - October 7, 2009 - thanks Rob! need more guys like yourself, Uncle Bob and etc to say it out loud that what he's feeding developers who might take him serious is a bunch of old old stuff that just should not be acceptable in this day and age.
Nick Berardi - October 7, 2009 - Nicely said... I could not find the words to explain how I felt about this, but you hit the nail right on the head.
Craig - October 7, 2009 - Joel has said some interesting things over the time, but recently his comments on software development are making him sound more like just an average Joe hack developer rather than the self proclaimed guru he was. I think by the lack of cold face code writing every day Joel has become the person he hates.
Thiru - October 7, 2009 - If you listen to what Joel has to say, and don't take opinions of his that are counter to yours personally, I think you'll find lots of interesting ideas. I like the fact that he's not afraid to voice his opinion and go against the grain of popular software development. He doesn't pick his points arbitrarily. He believes what he preaches and he has his points.

He's done a ton of good for software development and developers over the years and though he's slowed down and makes some quick judgements at time he does continue to contribute.

Rob, I think it's very unfair to compare Joel to those douche bags (not sure you spell that) on Crossfire or the Bush administration. I think your just frustrated with some of his opinions and that he speaks into a megaphone. This post is more than a bit of a stretch.
Avery - October 7, 2009 - @Nicholas

I agree. Seemed like Joel spent the whole Duct Tape Programmer article except for the one small paragraph arguing for one of the tenants of XP... "Do the simplest thing that could possibly work."
D. Lambert - October 7, 2009 - This strikes me a little like the parents that got bent out of shape when they heard that their kids were going to hear President Obama speak to them in school.

I'm not going to try to tell you that you should agree with Spolsky. Far be it, in fact, because I happen to agree that some of his stuff is a little over the top. But I am firmly of the opinion that if we can't read his stuff and make intelligent decisions about whether any of it applies in our lives, then the primary problem lies with us.

Additionally, if you browse his writing over time, a great deal of it works because it's always been just a little bit inflammatory. It rubs a nerve or pokes at a stereotype, and it gets us to think about the issue and start talking about it. If the end result of Joel rubbing some salt on the wounds of our industry is that we educate a few more people about IOC or software development best practices, then I'm not sure it's all that bad.

Of course, each of us is more than welcome to simply stop listening. No audience == no problem, right?
Rob Conery - October 7, 2009 - I do listen to what he says :) and most of the time I ignore it. I know what he means to say but he's a sound bite guy, he knows how to self-promote :).

Here's the issue - there are times when it's funny/interesting to go against the grain. There are times when you can say "hey - we're being crazy here!". To do so with rhetoric rather than a reasoned argument becomes flame-baiting, and that's what his posts are resolving to.

At this point Joel *isn't* helping - he's reprimanding. He's tilting at windmills and using COM in his examples. It's clear he doesn't write code anymore and that's cool - but stop telling people what they should pay attention to.

His *entire* duct-tape post was ridiculous. "Just Get'er Done" doesn't work - it might when you're doing things in your head, but when you need to actually do something - well you need to do better than duct tape.
Rob Conery - October 7, 2009 - Yes yes - of course everyone has a brain. But let's talk about the ones who cause the trouble (they're on every project are they not?). The last thing they need is more ammo - and believe me they're everywhere, and I get to pick up after them from time to time.

So yes - people can and will make up there minds. But a lot will have their lack of desire to learn re-affirmed by a Guy Named Spolsky and they can appeal to authority for the mess they create.

You have some valid points - but it's not you who I'm worried about.
fkcoder - October 7, 2009 - I one sense I agree what Joel has said of the past while my not be inline with what the current trends in coding, which I what to note is not necessarily the mainstream in coding. But he is pretty open to the fact these are just his opinions and he doesn't really code much anymore. Besides that I think Joel is much more of a business person these days and his comments on the business and how to run a software development company are pretty interesting and well thought out.


I hope the TTD advocates take their own advice as they get older and new methods and techniques displace TDD.
pcomeau - October 7, 2009 - Yes browse his writing and you will fined he has "jumped the shark" - http://www.codinghorror.com/blog/archives/000679.html

Seriously... His writing has required more and more filters to be relevant. At a certain point he becomes that friend you have who calls at odd hours to rant and you just nod your head cause, gosh he's your friend, but gosh is he out of touch.

That's where I agree with Rob that Joel is no longer doing us a service. Joel has more and more started sounding like the "get off my lawn" type and not offering decent critique.
Daniel Auger - October 7, 2009 - Rob, I came here for catharsis but didn't get it all out. You sent me down this path: http://mynerditorium.blogspot.com/2009/10/state-of-spolsky-or-how-i-learned-to.html
D. Lambert - October 7, 2009 - Ok, so I guess I'm sort of hinting that if there are people who are reading stuff and just swallowing it hook, line, and sinker because it comes from some guy named Spolsky, what's to stop them from swallowing some other junk from someone else?

You bet - crummy developers are everywhere, but I've got real doubts that they're going to turn into better developers just because one source of "ammo" dries up.

On top of that, I think the real problem isn't just those developers, it's our industry. It's a fact that we work in an industry where there's still a choice whether to use unit tests or not. The mere possibility that there can be a debate about this tells you a ton about the maturity of software development as a craft.

Go watch a home being built, and see if you find framers trying to argue that 18"-on-center studs are more than sufficient for this particular home, or electricians trying to decide whether or not to use conduit when they're running power out to the garage. These decisions are taken out of the hands of those people because building codes lay down the law on at least these aspects of how homes are built, leaving you to argue about really important stuff, like whether or not to run Ethernet to all the bathrooms.

We, as an industry, aren't to that point (and probably never will be, for reasons that follow). There exists no equivalent Software Building Code that says, "you will have unit tests" -- and here's the important part -- that has the support of all the businesses who are paying for the development, because without them on board, the cheap duct-tape guy starts to look pretty good with his no-way-that's-gonna-work quote.

But, we also don't have a "building code" because of the pace of innovation in software.

If we had a Software Building Code in place - say, five years ago, I bet it would have locked down how thou shalt build data access, and it sure wouldn't include something cutting-edge like Subsonic, and we'd be the worse for it. So, how do you get an entire industry of do-it-yourself developers to agree on how we're all going to develop when the landscape changes every two weeks? That's one of the key arguments that Software Development is never going to be standardized like Civil Engineering -- the domain just changes too quickly.

So just like that, you're back to needing smart guys to figure out which noise is real and which noise is just noise.
jdn - October 7, 2009 - Funny you should use Stewart's appearance on Crossfire, where he was pretty much an embarrassment. Carlson ate his lunch.

I think Joel should continue to post things like his 'duct-tape' post and all 'elite' programmers should have to read it. Seriously.

People who 'worry about the state of the industry' seem to me to be people who are hurting the state of the industry.
Matt Spradley - October 7, 2009 - This reminds me of a recurring theme on the Stack Overflow podcast. Jeff Atwood always disagrees with Joel on some topic only to acknowledge a few weeks later that he was right. Experience and results should count for something. I wonder how many of the people that disagree with Joel have produced successful companies.
Dan Elliott - October 7, 2009 - Aloha, Rob!

Agreed! Joel may well be successful but I want to feel pride in what I create.
If I was an accountant, that pride would stem from the bottom line; but I am a programmer and hence that pride is in the code I write.

Kindness,

Dan
Sheldon McGee - October 7, 2009 - I read "duct tape programmers" and came away thinking Joel was putting down programmers who used the duct tape method of getting things done even though that's exactly the opposite of what was there. Maybe that's because I've read all these articles from him about how important the craft is and how writing maintainable code is so important and blah blah blah. And now Zawinski is a hero for not caring about any of that?!?

I think the point of the article is that a) anyone who cares about what they do wants to do things the "right" way and b) doing it the right way gets in the way of shipping. Strive for the golden mean!

Oh yeah, lets not forget about the secret that the "right" way isn't defined and never will be because things change so much and once we figure out the right way someone is going to come along with something cooler, faster, easier. Damn you Ruby! Damn you Python! And of course, damn you C# . . . you are so much safer than C but C is the right way . . . it's the only way . . . and Joel said if I don't know C I am useless!
Rob Conery - October 7, 2009 - Oh JDN I love you :). Crossfire was cancelled just 4 months after this, and the senior VP who cancelled it said it was largely "because Stewart was right". Carlson is considered by most people to be a complete idiot - even those on the right side of the fence. He's not someone you want to support :).

I'm not really worried about "the state of the industry". I find it incredibly sad when people shit all over something they know nothing about, using the old, tired astronaut stuff.

Like it or not - the future is calling and we need to advance.
Rob Conery - October 7, 2009 - Yes, shipping. The gold standard of the PM - "hey we just shipped [a massive pile of shit]"! Let's party!

Two words sum this up:

1) Blizzard
2) Vista
Ryan Roberts - October 8, 2009 - That is happening with the adoption of lean and BDD/context/specification/whatever it ends up being called. TDD is not so much being replaced as evolving.

The soon to be available (assuming ms does the right thing and puts it in professional edition) design by contract features of .NET 4 are almost certainly going to have a significant impact.
Mike - October 8, 2009 - Not really true, not always. I tried to develop a replacement for an piece of software that was basically a ball of mud held together by duct tape. I did all the right things, unit tests, ORM, some dependency injection, separated some concerns. My code is rotting in SVN, and the old app is still being used.

Anecdotal evidence at best, I know. But it's just not black and white.
Kirschstein - October 8, 2009 - As soon as I saw the title of this post in my reader I knew what it was about the ducttape shitstorm in my rss teacup. But your 2c is spot on.

Much <3 for this post.
Patrick - October 8, 2009 - Microsoft sold anywhere between 60-100 million copies of Vista (even if you accept 60 million, that's a big number), and Blizzard makes WoW, practically the hottest game of all time and one that since its a subscription price model, keeps earning them cash every quarter just for keeping the lights on.

Shipping just isn't the gold standard of the PM Rob. It's the gold standard of the entire company, and as a developer it pays for my meals, house, and other things I'd like to have. It doesn't matter how well the code is crafted, if the project gets canned because it misses the scheduled release (and release dates are very important to software companies) or it doesn't sell because a competitor moved the product faster. Then all the unit tests and frameworks in the world aren't going to help.

Anyway why do you think Joel is hurting the industry? Because programmers will suddenly stop writing unit tests and frameworks like Subsonic? You're selling your customers and your fellow developers short if you think Joel has that much magical influence. All the hubbub strongly reminds me of the noise people make when you challenge something about their core belief system or threaten their bottom line.

Listen man, you're not John Stewart calling truth to power, and Joel and Zawinski aren't Tucker Carlson.

Well that's my two cents.
Patrick - October 8, 2009 - So Joel should write about things that you agree with Rob?

Listen, its his opinion that unit test don't give you much in return for the amount of time it takes to create and maintain them (and its a real cost...every hour you spend refactoring your unit tests is an hour your company / client is paying you).

My gripe with this post and I suspect with a lot of posts elsewhere crying foul over Joel's "trainwreck" is that its not like you or any other agile blogger can't respond back with a blog post of your own. Instead of breaking down Joel's arguments again using unit tests, or frameworks in specific scenarios where time is a factor and posting that in a reasonable blog post. Instead you take the lazy way out, find a three year old YouTube clip, and whine about how "mean old man Joel" is just being a bully that's hurting our "industry." (Which I still don't get, does that mean all of the software development shops have stopped writing unit tests...assuming they were in the first place...and are in danger of failing?)

I would have found a post like that to be far more interesting that the gratuitous back-patting "there there now agile boys and girls, things will be okay...look...John Stewart!" that this post turned out to be. Its a shame because I know you can do better.
paul - October 8, 2009 - @Mike,
That's the whole point. If that frankensteinian creation of duct tape and bailing wire had been put together with solid design principles in the first place, then it would've been more maintainable from the get go.

You can't always *fix* bad software with the 'right things', but you can almost always *prevent* it with them.
jdn - October 8, 2009 - Of course Carlson's an idiot. Beside the point.

"Like it or not – the future is calling and we need to advance."

Yeah, that's scary. It's new, therefore it's good. Continuous change isn't necessarily continuous improvement. We really need an entire industry full of brittle tests. That will make things SO much better than they are now.
Trevor de Koekkoek - October 8, 2009 - Spolsky lost me a long time ago when he said Exceptions were bad
and you should return result codes in your methods.
satch - October 8, 2009 - You are assuming too many facts ... even good code can be come crap via clay ball ... let me just slap on another piece of clay, and another, and another over the course of a few years and that's what you get. Sometimes (often even) requirements are not fully understood / defined until years after foundational work has been finished.
John - October 8, 2009 - Joel Spoelsky and Jeff Atwood are page view whores.

They write "smackdown" blogs. It's us versus them. The good guys versus the bad. Black and white. No gray. Gray is boring. Nobody reads nuanced gray articles. It's all about the page view.

Joel knows that the real world is a lot more nuanced (his blog is featured blog at ACM Queue, after all), but he apparently doesn't care about nuances, because nuances bore people. Joel and Jeff can't just say "a good solution solved now is better than a perfect solution that's never implemented". Instead, they have to turn it into "Shipping is the thing that matters".

Joel and Jeff are the Jerry Springer and Maury Povich of tech blogging. They get page views by generating a reaction. Nuances are ignored, because nuances put people to sleep.

So they write and say absolute nonsense. Quantity over quality, says Jeff (I'd hate to be on a life machine in the hospital whose software was written by Jeff). Solid principles = waste of time. Shipping date is more important than testing (I sure hope that Boeing does a couple of rounds of testing the software in the new planes before putting them into the skies).

And what world does Joel live in where the biggest problem is overengineering? I'm sure there are, perhaps at MIT, people who look so long for the perfect architecture that they never actually create a real product, other than for themselves.

But the real world is mostly the opposite. I have seen time and time again, so many accidental architectures. Bad method names, bad class names, long methods, and rigid structures that require gigantic hacks, because the architecture no longer reflects the real business domain. And those piles of dung were created by duck tape coders.

But Joel didn't mention that. That would make the blog nuanced and he can't have that.
Will Gant - October 8, 2009 - I dunno. Joel's writing does seem to be pretty effective for what he wants to do with it (draw attention to himself). He doesn't write software for internal use, and he doesn't write articles to educate - he writes software to sell and articles to attract attention.
You don't have to do things that way, because you actually have good material to share with the community.
Rob Conery - October 8, 2009 - Shipping doesn't pay for your house - the app does. What you ship will sell but the quality of it determines "for how long". A project won't get canned because it doesn't ship on time - it will get shipped anyway.

You're missing my point, entirely. Joel is making noise for noise sake - not help anyone. He wants eyes on blog, he's a sensationalist. A sideshow freak. I don't care normally, but it's getting to the point where the sideshow is causing distractions we just don't need.

He's a respected blogger who's imploding and loving it tossing out BS wisdom that will come back to bite me.
David Nelson - October 8, 2009 - You just made Rob's point for him. The reason why we are still having to debate "to unit test or not to unit test" is precisely because "respected" pundits like Spolsky who have big microphones are saying (snarkily) that its not worth the effort! That is (I think) precisely what Rob meant when he said that Joel is hurting the industry; he and people like him are holding us back from making real progress as a discipline.
Rob Conery - October 8, 2009 - I do a lot for the community and your assertion that I'm whining is completely dickish. I've spent a lot of time trying to educate and help with the goal of pushing people to learn and try new things. I do this because learning helps us progress - eventually hitting on things that work.

Joel is aggressively advocating ignorance and I'm not going to tolerate it. We need thoughtful discussion and discourse, not some guy giving license to duct-tape and laziness.
Patrick - October 8, 2009 - You are correct Rob, that was dickish to assert that you were whining. I sincerely apologize. Thanks for the correction.
Will Gant - October 8, 2009 - Awesome. People like that create opportunity for people like me, usually at a higher billing rate than I could have come in at in the initial phase of the project. Not that it's truly a good thing, mind you, but there is an upside for some.
jim d - October 8, 2009 - I think it's humorous that you think that Joel is advocating ignorance when in fact he's advocating keeping an open mind. He's stated in the past that he's a fan of .NET, and even ASP.NET MVC, but while he appreciates certain aspects of agile methodology he is not a fan of pervasive unit testing. And for that you're saying that he should "just stop"? Sorry, but I'll take Spolsky's moderate approach over your latch-on-to-the-next-shiny-new-object approach.

What I think is most telling about your post is the fact that you compare developers to your own rambunctious children. I suppose then it's not surprising that the tone of your post is essentially "Now do your unit tests boys and girls, and don't listen to anybody who tells you different because *I* know what's best for you!".
jim d - October 8, 2009 - Sorry, I don't buy the line that we should squelch contrary opinions. Having to defend an idea is vital to establishing the validity of that idea.
Sheldon McGee - October 8, 2009 - Rob,

I agree that Joel is more of a story teller and knows the art of making noise . . . but that's the kind of guy you want on your side . . . not someone you want to shut up!

Sure, Vista was a flop but is that because the code sucked? Is that because MS didn't write enough unit tests? If they would have waited a few more years to "do it right" would it have been better? NO! It sucked because the UI got in the way of people doing their work. And the only way to learn that lesson was to SHIP!

Sheldon
Mike - October 8, 2009 - Ok, maybe in this subject discussion we need to always specify context. To create a ball of mud when there is at least one programmer or manager that knows better is indeed foolish. Prevent whenever possible.

But when it has already happened, then you often have to live with it. And here the hero shines, even though his kingdom is made of mud.

Yay for metaphores ;)
Mike - October 8, 2009 - Check Stack Overflow. If I were to judge Jeff by that I'd say whatever he does works.
Scott Koon - October 8, 2009 - A whole lot of them. ObjectMentor for one. Kent Beck.

But Joel isn't talking about creating a successful company, he's talking about software development. You can have a successful company and have NO IDEA what the developers are doing, and not care as long as they are producing quality software.

He's talking from ignorance and outdated knowledge about how to produce quality software. My Biochem degree is over 14 years old now, should I tell researchers how they should be conducting research? Probably not because my knowledge is over 14 years old. I'm sure that the state of the art has moved on considerably.
Salman - October 8, 2009 - It's all about the delivery/drama, don't actually read into the technical aspect of the post.
Clinton Pierce - October 8, 2009 - Yesterday's elegant programming can easily become tomorrow's ball of mud. Times change, attitudes change. Some software from 20 and 30 years ago holds up very well. Others were pretty nifty at the time, but look horrible in retrospect. (Anything doing COM in C++ comes to mind.)
Andrew - October 8, 2009 - John,

Over Engineering is a massive problem in this industry, just massive. At least everywhere I've worked. People get way to smart for their own good, over promise and under deliver.
Andrew - October 8, 2009 - Rob,

I think if you ignore Joel's rhetoric and actually dig down deep into what he's saying, I believe he's arguing against Over Engineering. While I don't agree with the "A shipped incomplete product is better than a non-shipped product" philosphy, but I do agree with the fact that a simple solution will likely be better than the "right" (re: complicated) solution.

Sometimes you just need to throw a value in a config file, but give a developer some leeway, and before you know it you've got a complicated rules engine on your hand.

In that respect, he has value (as a contrary view point), because you have to remember, in this niche he's actually in the minority. "Bad" developers (or 5:01 developers or whatever we're calling them these days) don't read his work.

Let's put it this way, if it wasn't Joel who wrote the Duct Tape blog, and we replaced the words "Duct Tape" with practically any other set of words, would anyone really have cared?
John - October 8, 2009 - Hmm, perhaps a solution to overengineering problem would be not to collect a huge amount of specs up front, but rather to deliver small pieces at a time. Consistently communicating with the customer, not just writing specs. And only building on the architecture with a You Ain't Gonna Need It philosopy so that there's no unnecessary overengineered architecture. No wait, that sounds like Agile and Joel likes to rip on Agile folks like Bob Martin.
John - October 8, 2009 - Why should I have to "read into" a blog and ignore the inflammatory rhetoric? Why can't a post just contain the facts without the absurd garbage thrown in? Do I have to ignore lousy service at a restaurant again and again just because they serve the best pizza?

The problem is that Joel reinforces bad programming (note, I didn't say that Joel was actually a bad prgrammer himself. I suspect that he's not).

Case in point: I don't read Joel's blogs (don't want to contribute to his page view addiction), but it made its way to me, because a former employee sent it to some programmers where I work. I just happen to be the person who now maintains the spaghetti code that was written by said former employee who used quality method naming, such as GetArray() and GetFullArray on data that returned something specific. So said employee keeps on with life with the attitude that architecture is overrated and that gettin er done is what matters.
John - October 8, 2009 - Just because someone has a successful product doesn't mean that you have to drink the kool-aid. Mark Cuban is 100 times more successful than Joel + Jeff, but I don't believe everything that he says either.
Michael - October 8, 2009 - In fact, if we read this email at

http://thread.gmane.org/gmane.comp.version-control.git/57643/focus=57918

C was the only "sane choice for Git". With all due respect to his talant - Linus Torvalds doesn't want problems with abstractions and "idiotic 'object model' crap" :) Now we've got the situation : state of art LINQ/T4 Subsonic is kept in Git repository of duct tape programmers ( I doubt, unit tests do exist for Git ). Real life and the industry interconnections seem to be more complex than following the patterns and the best practices.

Also with Open Source widely spread now, how could you convince an individual or group of people to follow certain practice. They are not obliged to fix a problem in 24 hours and may not care about easy maintenance and unit testing. At the same time it might be quite useful application like Git. I remember one of the articles in this blog quite clearly states referencing Jeff Atwood - that if something doesn't work in Open Source, don't demand to fix it from the author, fix it yourself.
Dave - October 8, 2009 - Spolsky is just a smooth talking Salesman running a business that he knows nothing about (code). Read here.

http://codezest.com/archive/2009/10/07/worst-development-blog-post-ever-ndash-by-joel-spolsky.aspx
Rob Conery - October 8, 2009 - >>> Sorry, but I’ll take Spolsky’s moderate approach over your latch-on-to-the-next-shiny-new-object approach

In case anyone is wondering - this is the guy who's project you don't want to inherit. Read what you want to - you don't have a license to stop learning. My kids are awesome btw :).
Rob Conery - October 8, 2009 - True enough - there's a fine line between rolling up your sleeves and calling IoC a concept too tough for the average developer. The earth may not be flat, but this exact thing keeps people from opening books in favor of the "faith" that the earth is in the center of the universe - like it's always been.

I agree with the tone of most of Joel's stuff (question authority). But do it with intelligence, not a six pack and a shot gun.
Dave - October 8, 2009 - >>>>Oh yeah, lets not forget about the secret that the “right” way isn’t defined and never will be because things change so much and once we figure out the right way someone is going to come along with something cooler, faster, easier.

Give me a break, what a line of BS just like Joel's. And I wouldn't want to work with you.

It's about finding the balance between Code & Run and Over engineering. It's about clean rusable code. It's about when your boss goes and asks you to create a new feature but you spend 2-3 days just trying to figure out what a 300 line method is doing and then try to get that working with 2-3 other 200 line methods and then realizing you can't reuse the code because most of the logic is not in methods and your 300 line method is actually costing now the business money.

It's not about "the right way", it's about caring about wtf you're building so that the rest of your team and the business are not putting out fires, refactoring the entire damn UI, because of Code & Run tactics making the excuse that "business wants it so I don't have to care about quality". And again, quality doesn't mean over engineer. It means having some sort of reasonable time to code it, so you can at least think about how this can be extended later and how the next guy on your team might kill you for building that 300 line pile of shit method.

Stop making analogies with terms like "perfect", "pretty", etc. with clean code. Over engineering is one thing but trying to and having decent time and a balance to focus on at least producing clean code while you code that important business feature is only common sense. Managers who think Code & Run is the way are amatures. They are not leaders and they are very unprofessional.
Rob Conery - October 8, 2009 - Company success has nothing to do with quality. By that logic MS would ship perfection :)
Dave - October 8, 2009 - Wrong, he said ship it even if it's not really ready basically and even if it was a rush to code. Ship hack jobs. I'd like to ship him to Iran.
Dave - October 8, 2009 - Joel reminds me of this ignorant salesman that was running one of the IT shops I was at. I left after 3 months of hearing cheeseball phrases to these 3 managers who cost the company 3 million dollars in SharePoint and K2 Failures.
Dave - October 8, 2009 - This is not rocket science. Read his post, it's not tricky, there's no hidden or misunderstood message here. Sentences make sense and they are horrible suggestions and advice on how to run a business let along a development shop. He's saying to hack, code & run, and move on.

Is that the kind of profession we are in? If so, I feel very sorry for development and business overall. Shame.
Dave Schinkel - October 8, 2009 - >>>I think Joel should continue to post things like his ‘duct-tape’ post and all ‘elite’ programmers should have to read it

It's not a competition. It's not about being "elite".

It's about building applications that don't fall on their face, don't cause other developers and the business days of refactoring costs, or days of even figuring out how to deal with the pile you're trying to build on top of.

you talk about business value, making money, and then talk about Code & Run being a solution? Why do you think American cars were losing to Japan and other foreign makers? Because they fing cared about what they build. They didn't duck tape their cars together.

I cannot believe people actually debate that what he is posting is good advice. I guess maybe those "elite" developers you label us as are the only ones with "common sense" because I can tell you creating clean code (no I'm not talking over engineer, I know wtf that is) is the only way to go. And Agile...coding your features in iterations that CAN be hit without code & run will produce ROI now, tomorrow, and 10 years form now. It will also build a HAPPY team who can go home and enjoy their lives without trying to spend a day figuring how how the f you're going to refactor or even use a 300 line method in another class that needs some of that logic.

I like to go home to enjoy the time I have left after work instead of dealing with chaos, hack code, and unorganized piles of Shiza.
Dave - October 8, 2009 - JDN,

With that kind of typical comment, I guess you haven't done unit testing I take it.
Dave - October 8, 2009 - Andrew,

I'd like to know where this was. In my experience Code & Run costs you in the long run and dictates that you fix shit later. Is that how you view our profession? Run now, fix later?
Aaron - October 8, 2009 - >>>Let’s put it this way, if it wasn’t Joel who wrote the Duct Tape blog, and we replaced the words “Duct Tape” with practically any other set of words, would anyone really have cared?

Are you kidding? Of course they would care. The content tells use to Code & Run.

>>>Sometimes you just need to throw a value in a config file, but give a developer some leeway, and before you know it you’ve got a complicated rules engine on your hand.

What is complicated? That term is very relative. So do you feel making sure you're abstracting stuff out into a new class, interface, or method "complicated"? No, its not. It's clean code. And you should never view creating a class taking x amount of time as a way to determine if you're over engineering when it makes obvious sense not to take shortcuts all the time and do create that class for extensibility, readability, and maintainability now and later on so you don't have to come back and refactor some pile of shit.

Complicated would be forcing your team to use IoC container, code contracts, stuff like that. Stuff that's very hard to do for the avg developer. But clean code, and logical abstractions are not complication...their smart development and ensures that the product you build is not going to waste your developers time or the business's time. In fact if the code makes sense and is clean, your team can bang out code even faster!

That's a blanket statement. You're saying every developer who takes just a bit more time (I'm not saying spend too much time) but a bit more time instead of hurrying up to always be frantic to "get it out the door" is going to end up over engineering and creating a huge rules engine? So do you view abstractions as over engineering when you're just coding basic BL, DL, and stuff that is pretty much common in most good development shops? So if I think that an Interface would work really well, but the excuse is "we don't have time for this" because an Interface would be over engineering are you really sure about that? Maybe if you did move that to an interface or maybe if you did separate it out into another class, or whatever the case may be that you're actually not over engineering and saving your development team a lot of pain as well as yourself now and later on and maybe later you can spend your time actually hammering out code because your base is clean and you actually put some thought behind a feature rather than "banging it out" just to make yourself proud that you were able to push that feature out in 2 hours?

That's a totally ameture way of doing things...very careless, and just promotes chaos.
Anthony - October 8, 2009 - >>>Spolsky lost me a long time ago when he said Exceptions were bad
and you should return result codes in your methods.

Wow, Unreal. It just gets better and better. Lets listen to such sound advice as we hack together our applications. Everyone, Joel's driving the bus. Run for your lives.
Eric - October 8, 2009 - >>>But I am firmly of the opinion that if we can’t read his stuff and make intelligent decisions about whether any of it applies in our lives, then the primary problem lies with us.

The problem is that not everyone is smart enough to do that. Managers or even developers who don't have enough experience yet or just have never worked anywhere else don't know any better and read it as the bible or some kind of "Real World" type of advice or think it's good advice overall. I know of one manager that does and the entire shop is complete chaos and we have code that is just a huge nightmare/pile which is why everyone on the team just bitches day in and day out. It's hell and we work our asses off to fix the pile..same old story. Methods are way, way too long. Class names make no sense so reading code takes days to filter through.

So you can't just say ignore him and be smarter than his post. Sure good developers who have been in environments that are not Code & Run can do that. It's the people who don't really know what reality is or should be because that's all they've ever known are the ones we have to worry about because a lot of these leads or managers do read his blog and believe every word he says. Then we may have to work for these types of idiots some day. So no, I don't feel it's just something to ignore or "brush off".
Randy - October 8, 2009 - >>>But I am firmly of the opinion that if we can’t read his stuff and make intelligent decisions about whether any of it applies in our lives, then the primary problem lies with us.

Patrick, why do you like every other hacker out there blame things on Agile or unit testing? And have you actually written unit tests? Anyone who has pretty much 99% of the time agrees that it's essential and benefits the team and the business in so many ways you can't possibly argue it...again IF you've done it.

It's those people that don't know jack shit about unit testing that say the kind of remarks you are stating. Very generalized, very naive and I bet you know nothing about unit testing other than "I hear you have to write more code, and that means money". That's so close minded and so inexperienced that I can't even fathom why people like you state stuff that you have no idea or experience doing let along saying unit testing is BS.
Frank Rizzo - October 8, 2009 - FogBugz is in version 7.0, so clearly they know *something* about maintainability.
jdn - October 8, 2009 - I do unit testing all the time. I find it difficult to write code without tests these days.

Besides the point.
John - October 9, 2009 - I don't understand the comment or if it was even directed at my comment. Keeping iterations small and continually refactoring does not mean run now, fix later. In fact, its quite the opposite. I would suggest reading Martin Fowler's book Refactoring or one of Kent Beck's books for a better explanation than what I can give.
Lex - October 9, 2009 - You use an interesting analogy in Jon Stewart's attack on Crossfire, because at its heart it was an attack of partisanship and the real hurting takes both sides. Politicians and partisan pundits can share views, ideals and even strategies for reform but due to intrinsic beliefs look past commonalities and only see the differences (often to unrealistic extremes).

Lots of software projects fail and personal experiences, though valuable, fuel the vehemence with which points of contention are debated; this project failed because it turned into a tarball; this project failed because the designers were too inflexible and unrealistic in their demands. In this sort of forum people almost feel pressure to align to a side even when the divide is not so black or white nor so wide.

The pragmatist might argue that taking the middle ground is what they are doing, whereas the believer of a particular practice(s) might claim the middle ground or correct approach because the benefits are so vast and apparent.

My personal take would be for everyone to keep saying what you are saying but perhaps spend 5 minutes to work out where you do agree and then say where your views intersect and benefits could be arise. Once you start preaching to your own choir or deriding the other side (and hey you’ve done with proper discussion now because you’ve done that all before and they just won’t listen!) you’ll find that the real moderates (floating voters) give up reading (or voting) and just gets on with things their own way regardless of what you might hope for them.
jim d - October 9, 2009 - It seems like Joel is argues the the same thing that Microsoft Research claims: TDD can help, but it also increases development time.

Cheggit: " What the research team found was that the TDD teams produced code that was 60 to 90 percent better in terms of defect density than non-TDD teams. They also discovered that TDD teams took longer to complete their projects—15 to 35 percent longer."

You can read more at: http://research.microsoft.com/en-us/news/features/nagappan-100609.aspx
Nicholas Piasecki - October 9, 2009 - If we read closely, the point he was trying to make, I believe, is that if you have a choice between (1) shipping a "hack job that is not really ready" and having a hope of penetrating the market versus (2) shipping something that's fully ready and being too late to have any meaningful business impact, then you should *obviously* ship the not-fully-working hack job. If you ship the fully working software instead of the hack job, then *you* won't have a job.

I think, at the core, this comes down to a difference between an entrepreneurial programmer and a programmer. It's all right to improve your methodologies, to improve the world with better software, to change the way the community writes and learns about software for the better -- but you have to make money first.
Andrew - October 12, 2009 - Dave,

See, you are falling into the "You're either with us, or with the Terrorists" type mentality. I never said "Run now, Fix later", I just said that over-engineering is a problem in our profession.

This is also a huge problem with the ALT.NET-ish sub-section of our profession. The idea that if you don't 100% agree with what they consider "right", that you are somehow advocating hacking together untested crap.
Andrew - October 12, 2009 - John,

"Why should I have to “read into” a blog and ignore the inflammatory rhetoric?"

First of all, it wasn't all that infammatory, stop being so sensitive. Since it was an article by Joel, you probably went into it with a bias and you found exactly what you were looking for. For someone like me who doesn't give two sh!ts who Joel or Jeff Atwood is, the article wasn't that bad. I said I didn't agree with his main point, what else do you want? Do you want me to stamp my feet and scream that this guy Joel who I've never met is evil? Hardly, the guy writes a blog that I sometimes read.

Secondly, as a thinking human being, you have to "read into" everything you read, hear or see, otherwise how would you ever form your own opinions?

Even at the risk of over repeating myself, over-engineering is a real problem in this industry, to me that is what the article was about. Again, get it out of your head that by saying that I'm advocating writing untested crap, because the two are mutually exclusive.
Andrew - October 12, 2009 - Aaron,

I didn't say one thing that you apparently seem to think I said. How is it that you even remotely jumped to that conclusion is beyond me?

For example:

"That’s a blanket statement. You’re saying every developer who takes just a bit more time (I’m not saying spend too much time) but a bit more time instead of hurrying up to always be frantic to “get it out the door” is going to end up over engineering and creating a huge rules engine?"

I am not saying that, and I never did. I fully expect all my developers to adhere to the SOLID principles, DRY and YAGNI. I also require Unit Tests everything, although more in the TAD manner than TDD (for a variety of reasons not worth discussing here).

When I say "over engineering" I mean overly complicated solutions to a what is probably is a simple problem. For example, my config file v. Rules Engine problem is something that has come up in the past. We had a setting that need to be set in a windows service, and quite honestly it'll rarely (if ever) be changed. Adding a setting to the App.Config was a simple solution that would have worked just fine. Instead, a developer convinced his manager that we needed more and went off and built an entire rules/setting engine and an application to run it...he also decided that it needed custom encryption so nobody could ever know what the settings are...before you know it, six months went by and we had a new app and five new DLLs needed for every project, all for one freak'n setting that really wasn't all that important anyways. That is what I mean by over engineering and I see it all the time.
Josh - October 12, 2009 - I guess I am the only one on the intertubes that read Joel's post and didn't go crazy in either direction. He may have been sensationalizing things, he may have been going for sound bites (is that an applicable term for a blog?), etc. but I didn't read it that way. In fact I kinda saw it as a superfluous post, as in it seemed like he was just repeating what everyone knows already. I believe the issue is that everything you read you apply it to your own perspective possibly negating the perspective of others.

I saw much validity to his post, but then again I am just a lowly corporate development manager and not a figure head of the industry as some of you are. I knew exactly what he was talking about when he said that some times you just don't have time for unit tests. It is true, when the vp/pres of the company comes to you and says I need X yesterday well you hack something together for them to use and hope that you can come back to it later to refactor it. Some times the corporate world could care less that it is a little buggy as long as the primary functionality is served. Bugs can always be fixed later but that TPS report that they have lived perfectly happy without until today will absolutely make or break the company.

I may be out of place in saying this, but I believe there may be a disconnect between the developers who are writing commercial software products and the developers who are writing proprietary software custom to business practices. When you are writing a product that will be generic in terms that many varying businesses/consumers can use it you have the time, and if you don't you should make the time, to unit test everything, refactor where you can refactor, develop very clean and maintainable code, etc. When you are responding to immediate internal customer needs because some department just signed up with vendor xyz and they need some new functionality that will fulfill a requirement for said vendor, well you don't always have time for these niceties. It is all fine and dandy to say what you should do in theory, but practice is often quite different and sometimes adverse to theory.

Then again, as I said, we all read things and apply them relatively to our perspective. So in my perspective of being a SMB development manager I realize the time constraints that can be imposed by the executives of a company that don't understand the level of work that goes into development. It is my job to balance the amount of time and effort required to deliver and the determine the level of expectations of business unit. If they are rushing a project but they are acceptable to the idea that it could be buggy, then I work with my developers and I begin whipping out my duct tape. If they are rushing a project and it has to be bug free (or as bug free as possible) then I have to work with the business unit and explain to them their expectations are unrealistic and this is what I can deliver in x time and I can meet or exceed their expectations in y time, then give them the choice.
Andrew - October 12, 2009 - I don't know Dave, I'm sure a lot of people who "know" a lot about code who've tried and failed would love to have Joel's success.

It in no way means he's right about what he's saying, but dismissing him as someone who doesn't know anything about the business he's in is a bit on the ignorant side.
Matt Spradley - October 14, 2009 - Those are consulting companies. I am talking about companies that produce viable software products.

I think the reality is that we should be somewhere between the two extremes. Software is a young industry compared to the other engineering fields and it seems to me that the pendulum is still swinging.
Matt Spradley - October 14, 2009 - The opposite of that would be true as well. Quality does not dictate company success.

The company writes the paychecks so I hope we want the company to succeed.
Joseph Ferris - October 24, 2009 - That is seven *major* versions. How do you know that each one of the majors wasn't a complete rewrite? To butcher a classic Bill Gates quote, measuring maintainability by version numbers is like measuring code progress by lines of code.
Ryan - October 27, 2009 - In reference to Joel's 'pretty boy' analogy, disregarding well-known software practices to get product out the door is like not bothering to eat, sleep or shower because you are too busy. That will work for a day or so, but you are only adding to your burden of problems. Sooner than you expect, it will catch up with you and you'll be worse off than when you started.

I will agree with the sentiment that talented programmers can become distracted with fascinating side-problems, but the solution is not to dumb down your development staff. The smart ones can produce valuable software if you are able to engage them and focus them on the demands of the project. Don't expect developers to manage themselves - mastering one wickedly difficult profession is enough for one person.
jake - November 2, 2009 - The entire Japanese industry would disagree. Companies like Toyota and Honda disagree. Quality pays, quality saves money. The Japanese dominance after WWII was built on quality, look up W. Edwards Deming. The idea is so strong, the Japanese have a price called the Deming award which is thought to the most prestigious amongst Japanese companies.

Quality == Success.
Gecko