Showing posts with label Duct tape. Show all posts
Showing posts with label Duct tape. Show all posts

Tuesday, November 10, 2009

Revenge of the Duct Tape Programmer - skipping unit tests to ship faster

Waterfall ModelImage via Wikipedia

Hey, something like proof that going without unit-tests will let you ship faster, but at the penalty of technical debt in the code base. (I realize that isn't _exactly_ what was demonstrated ;)
Exploding Software-Engineering Myths - Microsoft Research: "

“The nice thing about working at Microsoft,” Nagappan says, “is that the development organization is large enough that we could select teams that allowed for an apples-to-apples comparison. We picked three development projects under the same senior manager and looked at teams that used TDD and those that didn’t. We collected data from teams working on Visual Studio, Windows, and MSN and also got data from a team at IBM, since the project was a joint study.”

The study and its results were published in a paper entitled Realizing quality improvement through test driven development: results and experiences of four industrial teams, by Nagappan and research colleagues E. Michael Maximilien of the IBM Almaden Research Center; Thirumalesh Bhat, principal software-development lead at Microsoft; and Laurie Williams of North Carolina State University. 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.

PALO ALTO, CA - FEBRUARY 19:  In this handout ...Image by Getty Images via Daylife

“Over a development cycle of 12 months, 35 percent is another four months, which is huge,” Nagappan says. “However, the tradeoff is that you reduce post-release maintenance costs significantly, since code quality is so much better. Again, these are decisions that managers have to make—where should they take the hit? But now, they actually have quantified data for making those decisions.”"
Reblog this post [with Zemanta]

Thursday, September 24, 2009

The Duct Tape Programmer vs. The Test Infected Programmer

Installation disk of Netscape 2.Image via Wikipedia

Joel likes JWZ. They both don't care for unit tests. Joel points to JWZ as a guy who ships. You could argue that JWZ was a guy who shipped, and became a burn-out poster child. The Netscape stuff just wasn't good enough to withstand the Microsoft onslaught. If you take JWZ + (Some) Unit Test + (Some) Test Infected Attitude, you really got something. I am happy to compete against coders who religiously avoid writing unit tests, so I am glad there is considerable variation in opinion. So, keep it up, Joel! The Duct Tape Programmer:
"Zawinski didn’t do many unit tests. They “sound great in principle. Given a leisurely development pace, that’s certainly the way to go. But when you’re looking at, ‘We’ve got to go from zero to done in six weeks,’ well, I can’t do that unless I cut something out. And what I’m going to cut out is the stuff that’s not absolutely critical. And unit tests are not critical. If there’s no unit test the customer isn’t going to complain about that.”

Netscape NavigatorImage via Wikipedia

Remember, before you freak out, that Zawinski was at Netscape when they were changing the world. They thought that they only had a few months before someone else came along and ate their lunch. A lot of important code is like that.

...

Duct tape programmers have to have a lot of talent to pull off this shtick. They have to be good enough programmers to ship code, and we’ll forgive them if they never write a unit test, or if they xor the “next” and “prev” pointers of their linked list into a single DWORD to save 32 bits, because they’re pretty enough, and smart enough, to pull it off."
32 bits saved on a linked list? I'm convinced! Duct tape ahoy! OK, what is the alternative? [Edited 10/23/09] Found a very cute comment thread on jwz's own website:
It seems to me more like you use foresight and pessimism to avoid getting into situations where you need to demonstrate exceptional programming ability. Absolutely no offense, even by faint praise, intended. ... "Use foresight and pessimism" This needs to become some sort of meme metric. ... The formulation owes something to a pilot's maxim: "a superior pilot uses his superior judgment to avoid having to exercise his superior skill."
This sums up Spolsky's mistake - confounding hard-won pessimism about fruity techniques with making a conscious decision to accrue short term technical debt. [exhaustive definition of technical debt here by Brad Appleton http://bradapp.blogspot.com/2009/06/technical-debt-definition-and-resources.html ] If practically 100% of the value of a piece of code comes from the speed of publishing, and you are skilled enough to take on some technical debt, confident you can pay it back later, by all means, go ahead. Publish the code, and forget the unit-tests and forget test-driven-development. But only if you earned that confidence. Here is an excellent diagram about who can and who cannot make this judgement, by Martin Fowler: http://martinfowler.com/bliki/TechnicalDebtQuadrant.html [Edited 10/26/09 ] I found this comment from Reddit by terror406: http://www.reddit.com/r/programming/comments/9nipa/joel_on_software_the_duct_tape_programmer/c0dj2dt
Architecture Astronauts and Duct Tape programmers are fictional characters. There are only competent and incompetent programmers. And competent programmers love and understand elegant architecture, but also know when to go into 'duct tape mode' on order to get the job done and ship the damn product. Edit: There is an easy way to tell the two apart. Ask them about their Technical Debt. A competent programmer will start talking about all the stuff that could have been done better, the incompetent programmer will just give you a blank stare.
Again, the issue is having the skill and judgment to take on short-term technical debt.
Reblog this post [with Zemanta]

Tuesday, August 4, 2009

These are my actual daily-life inventions. Enjoy. Patent pending.

20090328 – we're all a bunch of NerdsImage by Debby A via Flickr

The Color-Inator: This invention is having a grown man carry around a Hello Kitty 5 color pen + mechanical pencil, so he can sign red-lines at work, and mark up notes in all his books, by some multi-color scheme of stars and brackets and arrows. Duct tape holding the pen together is a prominent feature. A critical part of the invention is being large enough so people are uneasy to make a comment. The Bowl-Inator: This invention consists of at least three water bowls in the backyard, so the dog always has at least one water bowl in the shade, and has extra bowls so when she dips her paws in her water bowl to cool them down, she still has others with clean water.

ComplicatedImage by m4r00n3d via Flickr

The Complicate-Inator: This invention has a large, twitchy, anxious man complicate everything he does, and makes every task take 300% more time, to the exasperation of his wife. After he exhausts himself from futile effort, he collapses in bed, to the exasperation of his wife. This invention is a cure for un-exasperated wives. The Chew-Inator: This invention is a way to continuously move food from the front teeth to the back teeth to the back of the throat, via gravity and skilled movement of the tongue and jaws. You can eat with continuous large bites, without pause. The semi-chewed food is continuously swallowed in massive gulps, and the plate is cleared at a shocking rate. This invention is a way to fascinate and horrify dining partners. The Pause-Inator: My invention solves the problem of people trying to communicate with you. Whenever somebody says "What?" or "Excuse me?", you wait three seconds before repeating. Then, if you are interrupted again, you pause again, adding three seconds more to the length of the pause. You fastidiously pause at even the slightest interruption, always adding three more seconds to the pause. A completely blank expression tops off the technique. People complain about

Getting Passive Aggressive @ WorkImage by heather via Flickr

passive-aggressive behavior, but isn't it better than aggressive-aggressive behavior? It is preferable to pushing people down stairs or over balconies. Not pushing people is also my invention. I call it the Non-Push-Inator.

Reblog this post [with Zemanta]