22

Test Driven Development (TDD) and its benefits are well defined. The same can be said for practices like Behavior Driven Development (BDD). Each represents a software development technique that advocates greater discipline before you start coding.

What, then, is the convenient acronym for the "unstructured" approach to development?

I've seen "TAD" (Test After Development) used on occasion, but that still implies testing is being done. Has anyone seen (or does anyone want to invent) an acronym for the "code it as you go" approach to development? I'm looking for the TDD/BDD/xDD equivalent for the type of development we've all done where we simply write code and release.

(Clearly, there is plenty of room for "comedy" here, so let's refrain from "n00b Driven Development" and the ilk.)

[UPDATE]

Lots of very good responses. Ultimately, I think the ideas of "Development Driven Development" or "Idea Driven Development" best answer the question. Where in TDD you're trying to pass tests and in BDD you're trying to satisfy behavior, in "unstructured" development, you're really only driven by trying convert an idea in to code.

Clearly, no right or wrong answer, but a good collection of opinions here. Hopefully this resource will be useful for others trying to clearly capture the "definition" of development in absence of process.

Todd
  • 5,538
  • 1
  • 31
  • 34
  • 21
    I think the opposite is "D". – Pavel Radzivilovsky Jun 29 '10 at 19:54
  • Outstanding point! I guess if a developer is being "driven by nothing" all that's really left is D. So simple, but so correct. – Todd Jun 29 '10 at 20:00
  • dichlorodiphenyltrichloroethane? – Escualo Jun 29 '10 at 20:45
  • There's two questions here: 1) what's the opposite of TDD? and 2) what's an acronym for unstructured development...? – JBRWilkinson Jun 29 '10 at 20:55
  • It's unfortunately StackOverflow doesn't "tollerate" legitimate questions like this. While perhaps subjective, it's a useful discussion, especially when trying to help people understand what "came before" TDD. – Todd Jul 01 '10 at 16:53
  • A serious answer might be prototyping/wireframing where you don't know exactly what to test yet, but you have some idea of the user requirements. – Matthew Turner Jul 12 '16 at 01:00

5 Answers5

27

I don't know about an acronym, but what you're referring to is typically called Cowboy Coding.

Cowboy Coders are programmers who write code according to their own rules.

The Cowboy Way:

  • The speed with which I can hack something together determines my worth
  • People who need comments in order to understand my code are too dumb to be working with me
  • People who ask me questions about my code are too dumb to understand it, and (therefore) are too dumb to be working with me
  • Other people's code is just crappy, but mine is self-descriptive and beautiful
  • Exploiting a compiler-dependent language feature to save a line of code is "elegant"
  • Other people on my team cause all of the bugs; I'm the one that fixes them
  • My code is never at fault, always perfect, and I don't make mistakes
  • Since my code is never at fault, I don't need to test it thoroughly, if at all
  • Since my code is always perfect, it never needs to be refactored no matter how long it's been in the codebase or how much has changed around it
  • Since I never make mistakes, I can yell at anyone else who does
  • Since my code is perfect, if the program crashes due to unexpected data, it's the user's fault for entering bad data.
  • Since my code is perfect, if the program fails after a minor machine configuration change, it's the sysadmins fault for changing it.
  • Since my code is perfect, if the program runs too slowly, it's the managements fault for not providing a faster machine.
Ben S
  • 68,394
  • 30
  • 171
  • 212
  • 2
    Cowboy Coding is definitely a great description for this type of development. It would be nice if an "xDD" acronym could be used for it, though. I'd also add that Cowboy Coder goes a bit extreme. I think there are many developers who still code before testing (if they ever get to testing), but are much less cavalier. Looking for a term that encapsulates that approach (since it is still so common) without pulling-out something as extreme as "the Cowboy." – Todd Jun 29 '10 at 19:55
  • 1
    There's many levels of cowboy coding. I supposed you could call it CDD (Cowboy-Driven Development) or NDD (Non-Driven development). Although if you tell a fellow developer that someone is a cowboy coder, they'll understand you much better than any xDD you can come up with. – Ben S Jun 29 '10 at 20:17
  • 3
    CDD: Cattle-Driving Development :-P – Phil Miller Jun 29 '10 at 20:40
  • ...if you did know about an acronym you'd have to comment on your own post to say it's already used by something else. "CC = Carbon Copy". :S – STW Jun 29 '10 at 22:04
  • The speed which with you develop is actually closely correlated with quality – Andomar Jul 01 '10 at 18:06
13

I'd tend to agree with Pavel but would go further and call it:

Development Driven Development

Development driven without any clear motivation is development for the sake of development. In TDD, you develop to satisfy tests. In BDD, you develop to establish some behaviour. In Development-driven development, you develop because you're a developer and that's what you're paid to do.

Mark Peters
  • 80,126
  • 17
  • 159
  • 190
  • 2
    DDD = Domain Driven Development (http://en.wikipedia.org/wiki/Domain-driven_design) – Ben S Jun 29 '10 at 20:45
  • 1
    @Ben S: I don't create terminology for a living and clearly wasn't trying to make the claim it was a term that was or should be in use. I was just interpreting my experience with this sort of development motivation. That DDD is already taken means nothing to me, but I've removed it from the post anyhow. – Mark Peters Jun 29 '10 at 20:51
9

FDD

Faith Driven Development.

Because you need to pray your project works on every release.

Chris Marisic
  • 32,487
  • 24
  • 164
  • 258
  • 1
    FDD = Feature Driven Development (http://en.wikipedia.org/wiki/Feature_Driven_Development), Also, Floppy Disk Drive :| – Ben S Jun 29 '10 at 20:44
8

AD(D)D - Attention Deficit (Driven) Development

In which you:

  • randomly work on whichever portion of the application attracts your attention at the time
  • work on features for whichever user squawks the loudest (until someone else squawks louder)
  • run down rabbit trails in the code, forget the path you took to get there, and come out at some completely different place and solving some completely different problem
  • "refactor" code by changing its behavior without a solid grasp of what it is actually supposed to do or whether it still works when you are finished - but if it doesn't, you might get around to fixing it if somebody squawks loud enough
GalacticCowboy
  • 11,663
  • 2
  • 41
  • 66
  • ADD = Architecture Driven Development (http://gersis-software.com/en/technologies/architecture-driven-development/) – Ben S Jun 29 '10 at 20:47
  • 2
    @Ben S - Guess that's why the extra D is important... :) – GalacticCowboy Jun 29 '10 at 20:52
  • seems to be the story of every little stranded hobbyproject I ever worked on, until it manifested into a new project... ;P – hkon Jun 29 '10 at 20:58
4

MaDD -- Manager Driven Development.

It already takes you longer than you estimated just to code the real product--now you want to spend more time writing tests which never get released?!?!

STW
  • 44,917
  • 17
  • 105
  • 161
  • Contrary to many of the answers here, it is often mgmt that pushes horribly broken methodologies on developers and not the other way around. – Nick Van Brunt Jun 29 '10 at 20:44
  • MDD = Model Driven Development (http://en.wikipedia.org/wiki/Model-driven_development) – Ben S Jun 29 '10 at 20:46
  • 3
    so sorry to overload your TLA, sir! I've adjusted accordingly, but now I might have to content with angry mothers wanting *their* acronym back – STW Jun 29 '10 at 20:47