GrDD Refactored...

You probably think that GrDD AKA "Git 'R Done" development is a joke. And in some respects it is, but the concepts behind it are not. I have been talking to some friends and I think I have a pretty good idea of what we are talking about. Now mind you I’m not a methodology guy. I want to stress that. I’m just trying to get this out of my system.

Before I proceed, I know there are some "agilists" out there who are subscribed because they can’t wait to pounce on an idea that is counter to their ideas (and since TheRuntime.com seems to be the center for "Alt ALT.NET". Please resist the urge. I know it’s hard to believe that there are a not a few of us who are skeptics, but there are (and some way smarter than me). If anything I’m trying to present an alternative idea that might lead people towards your thinking and maybe make some of it more palatable for other skeptics.

Just to make myself clear to y’all, I typically tolerate all kinds of dialog and even invite it... but if you are planning on flaming all I can say is do it elsewhere... if you have something you think adds to my dialog then please feel free... If you aren’t "agile" then you are really invited to take part... I’ve had some ideas since my CodeBetter days that got shouted down back there, and I think it has merit for those practicing more of a GrDD <smile /> practice.

GrDD refactored = ClDD

ClDD is really a better acronym for what I have been touting. Client Driven Development or simple ClDD (could be pronounced "Cloudy" which is how it often starts). The idea here is focusing in on the client’s needs and working hard toward achieving that goal with minimal additional distractions. That may mean developing a web site with MS Access at the core of the site (I’ve done it/am doing it again)... It doesn’t mean that you don’t try to talk the client out of it... just that you are doing what the client ultimately wants done (and you aren’t building extra stuff beyond what is needed). I know that ruffles the feathers of some agilists, but the idea is simply put that you have to understand what the client needs and you make tradeoffs to meet the deadline. (BTW, this is what makes Billy Hollis an honorary GrDD prophet... see Jacob’s post back here... he gets it IMNHO). FWIW, This is really a re-hash of the RAD methodology from the turn of the millenium (or thereabout).

What about Quality?

[This is one I’m poking around with right now... it’s the idea from way back in the CodeBetter days. I’ll forego using the agile name, but it will be apparent what I’m re-purposing.]  One of the things I really want to do more of is POUT (Plain Old Unit Testing). My problem could be resolved by answering the question "What should I test?" Some would say "Everything!" But I think there is a diminishing set of returns. Testing an empty constructor or testing a simple property seems like waste of time to me.

Enter SpDD

The idea that I have come up with involves recording the specs or rules of a system... call them
"stories" or use cases or simply business rules and build tests around as many of these as is possible (as long as you have the time to do so). Now this doesn’t produce 100% code coverage nor does it always produce 100% testable code (which to some is important)... it might represent Test First written code or it might represent Test Last written code... what I want to be able to do is determine that my code is living up to the spec, and have a set of regression tests to prove this to myself (I’m not sure what I think of the testing tools in this arena at this point... verdict is still out for me).

BTW, SpDD is pronounced "Spee-Dee."

[Alright Rob, Jacob... what do you think? Poke holes in it as it’s just an idea at this point... not something I’m doing, yet]

Print | posted on Wednesday, September 10, 2008 2:12 PM

Feedback

# re: GrDD Refactored...

left by devfish.net at 9/10/2008 4:49 PM Gravatar
so are you really a norm.net? http://keithelder.net/blog/archive/2008/08/29/Dear-Joe-Irsquom-NORM.Net.aspx

# re: GrDD Refactored...

left by Scott C Reynolds at 9/12/2008 2:08 PM Gravatar
It's irresponsible to imply that being an "agilist" precludes one from being practical with respect to serving the client, and perpetuating that myth in order to serve some us-vs-them self indulgence is counter-productive.

# re: GrDD Refactored...

left by Jay Kimble at 9/12/2008 2:13 PM Gravatar
Excuse me?

I am not the one serving the us-vs-them mentality... I have been punked out by more agilists than I would care to begin to discuss.

My point there was I wanted a discussion here... not a "you're not agile so shut up you %&&*$#@"

If you have something add feel free. I just don't want to hear that "you're not practicing TDD so therefore your architecture sucks!"

# re: GrDD Refactored...

left by Scott C Reynolds at 9/12/2008 2:18 PM Gravatar
I didn't say anything of the sort. I said that positioning some acronym clearly designed to stir the pot and claim some sort of pragmatism higher ground is irresponsible, and if you can't take that sort of criticism, then I might suggest not posting on the interwebs.

"I know that ruffles the feathers of some agilists, but the idea is simply put that you have to understand what the client needs and you make tradeoffs to meet the deadline."

I'm sorry, but that shows your hand right there.

# re: GrDD Refactored...

left by Joshua Flanagan at 9/12/2008 2:32 PM Gravatar
I don't think you've provided enough information to distinguish your ideas. What methodology or movement suggests that you should not build "what the client ultimately wants done?" If thats your whole message, I don't believe you have differentiated yourself from any responsible, ethical developer.
Are you suggesting that developers should simply take dictation and programming is merely typing up what the client (presumably, an untrained software developer) asks for? What do you see as the service you provide, as a professional software developer?
I'm not trying to put words in your mouth, just fishing for clarification.

# re: GrDD Refactored...

left by Justin Etheredge at 9/12/2008 2:38 PM Gravatar
The "alternative" idea that you seem to be promoting is just blindly do whatever the client wants. I'm not sure that this is going to win you any praise when your client that wants Access as the backend to their site needs more scalability.

And with respect to SpDD, generate user stories and then test around them? Some "agilists" are already doing that, they are called acceptance tests. The problem is that they are no longer unit tests, because they are testing your system as a whole. It is really important to test different parts of your system in isolation as well as integrated.

# re: GrDD Refactored...

left by Jay Kimble at 9/12/2008 3:21 PM Gravatar
There is a whole series of articles on GrDD that I have been writing about for a bit (I suggest you look back at my CodeBetter posts as a good starting point).

Ultimately, it's about listening to the client/customer, evaluating their needs (this means they don't tell you how to code, but you definitely involve them in your process enough that you can figure out what it is that they need exactly), and developing the best that you can within the time frame ("best that you can" may mean that you don't know everything and are using what is available... IE, Mort).

It means that sometimes you sacrifice quality for performance (and, yes, sometimes sacrificing quality for speed of development). It is very much about getting projects done. It is not about lengthy debates about the perfect architecture for little 6 page web store sites, and really the only architecture discussions have to do with the "big/important" features.
-----
Guys, go back and read the beginning this was not being thrown down as a complete idea. (and I am being too nice because I swore I was going to respond to any agile guy the way ScottB did to me back at CodeBetter (when this idea first came to me)... which was "shut up, you don't know what you are talking about if you are not practicing/evangelizing MY methodology.")
-----
Sorry, guys I don't mean to be harsh, but you could all use someone to help you with how you deal with outsiders. It's often smug (and belittling... a mentality of we are way smarter than the rest of you)... Ultimately your initiative will succeed or fail as a result of that one point.

# re: GrDD Refactored...

left by Joshua Flanagan at 9/12/2008 4:06 PM Gravatar
Jay, I haven't seen anyone be disrespectful or extreme in these comments - it feels like you are fighting some other battle. And I'm just trying to figure out who you are trying to do battle with. I'm pretty firmly in the agile/alt.net camp, but I don't feel like you are arguing with those ideals. I feel like you may be arguing with some flawed perception you have of those ideals. I just don't see where comments about perfect (?) architecture for 6 page websites are aimed.

# re: GrDD Refactored...

left by Jay Kimble at 9/12/2008 4:20 PM Gravatar
Sorry Josh, it wasn't really thrown at you...

Scott put me on edge... assuming I was drawing battle lines. The truth is that I come at this with some appreciation for certain agile techniques, but I don't buy the whole package.

Here they are:
1) Use of Automated test packages can greatly help weeding out bugs early on (regardless if it's TDD or TJAD -- which today is what I'm doing)
2) 100% Testable code != perfect architecture (or at least that it's not necessarily a perfect architecture).
3) 100% code coverage is not necessarily worth the effort.
4) The basic concepts of BDD are totally palatable to me, but I have been told that I can't be BDD and not be TDD (ScottB)... to even imply that is heresy (again you know who)

I recognize that all the "client/customer" stuff is very compatible with Agile. I'd love to call myself that, but I am very much a skeptic of the whole testable code thing and don't necessarily see the value in TDD... Jacob and I are fully in agreement. To me it hasn't proven itself out yet. (If you can handle a skeptic than we can talk and I'll "quit throwing down.")

We can take some of this discussion out of band here.. as it's moving away from my original point...

The original point is that there are some things of merit here (BDD in particular)... I just don't accept the whole package (nor will I... I have done enough of my own research on this stuff and for me there is a law of "diminishing returns" on the whole testability thing).

Oh yeah one more thing... I'm not Mort... but I'm also not Einstein either, so what I often see is what appears to be the quest for the perfect architecture which is something testable and was built using TDD...

# re: GrDD Refactored...

left by Joshua Flanagan at 9/12/2008 4:38 PM Gravatar
Ok, I've got a better idea of the issue now.
I can safely say that all of the agile/alt.net people I know (including Scott) can definitely handle, and encourage, a skeptic.
I don't think it is your skepticism that is ruffling feathers, but possibly your dilution or misrepresentations of ideas being promoted by this community.
For example, it doesn't sound like any of the testing or specification writing you are doing is driving any of your development. It is just something you are doing after the fact to fulfill some goal you have, other than how to build your software. If that is the case, why do you want to co-opt an xDD term when it is clear these practices are not a "driver" for you?

# re: GrDD Refactored...

left by Jay Kimble at 9/12/2008 5:02 PM Gravatar
Actually no the specs are driving the dev and not tests. The problem with specs is that often one must understand them and communication with the client/customer is absolutely essential to interpreting the specs.

Agile itself has borrowed from numerous practices/methodologies from the past (if you are willing to admit it). All I'm trying to do is avoid representing myself as a BDD guy (which until you guys jumped into the discussion I had purposefully avoided using the term) because I know that BDD is understood within a context.

For someone trying to use unit testing frameworks, it's a great concept for identifying essential unit tests. I'm borrowing from you guys, but I'm trying to NOT steal your discussion nor am I trying to even comment on your ideas as much as I am trying to say "here's an idea you can use if you aren't a TDD guy."

In other words I'm not really interested in being a part of the Agile community, but anytime I try to have a methodology discussion I get a barrage of agilists who arrive to tell me that I should just adopt TDD and get it over with as it is the only way (there I go getting on the offensive... I don't mean to... it's just frustrating that I get told to "shut up" by agilists everytime I start this discussion and I think for non-agilists it's a really cool idea... one that deserves to have a different name so that it is not confused with your notions of BDD... it's actually the most compelling idea you guys have that translates into the non-agile/non-ALT.NET world).

# re: GrDD Refactored...

left by Chad Myers at 9/12/2008 5:49 PM Gravatar
@Jay: I haven't read the comments yet, I'm just commenting on the post:

There's some good stuff here with some good advice (i.e. don't try to test every nook and cranny of your code like empty c'tors). It's unfortunate you had to mix in some of the slightly inflammatory stuff about other methodologies and such because this would've otherwise been a very good post.

Can I make a request? Post some more on your efforts to unit test in your environment/methodology and the lessons you've learned and some of the clever ways you've come up with managing and running the tests.

Between you and me, since I'd say the vast majority of .NET developers have NO automated tests of ANY kind, if we could get them up on ANYTHING (PoUT, TFD, TDD, etc) it'd be a huge victory for us all.

So please continue posting about testing (even if it's not TDD ;) ) because it's good stuff and will help people.

# re: GrDD Refactored...

left by Scott Bellware at 9/12/2008 5:54 PM Gravatar
Client-Driven Development has long already a pseudonym for Test-Driven Development.

To the unit testing issue: it is important to make smart decisions about what to test, how much, etc. It takes a good chunk of time to get really good at knowing how to tune testing so that it's neither insufficient or over-done.

One thing to be conscious of when short cutting testing to get to the customer demo: it's much more expensive to reverse-engineer tests from existing code and functionality than to write tests as specifications up front and fill in the blanks from there.

I haven't ready the comment stream here. It looks pretty heated already. I'm not going to go after you here to take advantage of the wolfpack thing, but I will say that everything you're proposing here has already been accounted for in existing software engineering works and practices, and merely trying to reinvent all this inevitably means that you're going to miss out on years and decades of experience and heuristics that would make adoption go much faster.

# re: GrDD Refactored...

left by Rob Conery at 9/12/2008 6:34 PM Gravatar
>>>"What should I test?" Some would say "Everything!" But I think there is a diminishing set of returns. Testing an empty constructor or testing a simple property seems like waste of time to me."<<<

I've found that that's precisely where I make all my mistakes - the little things I think will just work. I tend to pay attention to the bigger elements, but those are usually part of littler elements and those can explode easily. Things like null List<>s for example, tend to creep in.

The problem, as Bellware would say, is your ego :) when you code like this. If you can take yourself seriously enough to know that you're prone to silly mistakes - then take a minute and write a test to prove what you're thinking. It's saved my butt countless times.

Also - throwing rocks at a beehive will always draw the bees. You may want to do yourself a favor and let your post stand on it's own merits. Worrying about the Cool Kids will always make them, not your idea, the subject of the post.

# re: GrDD Refactored...

left by Scott C Reynolds at 9/12/2008 8:14 PM Gravatar
Jay,

I'm not attaacking (nor was I ever), so don't jump to defense right away. You have stated, in this blog post, that you are proposing something that is somehow, at least partially, in opposition with what agile/alt.net (not the same thing by the way) believes.

On the client-driven-development end, that is completely incorrect. If anything, agile is the very definition of client-driven-development. But you set up the antagonism in the post, and if you can't recognize that, then I can't help you find a better level of discourse.

On Testing, it's clear you don't see the value in TDD approach, or at least don't understand it. TDD is not about test coverage, though that is a metric we can look at, and nobody says that TDD = perfect architecture, and that !TDD = horrible architecture. Anyone who is saying that is clearly mistaken. Nor do I think any practitioner of TDD has ALWAYS practiced TDD (I've never met one) so it's a natural conversation to have.

I would be glad to have a conversation with a skeptic because I was once a skeptic. However, if you really wish to have the conversation and make it be about the value of testing, then peppering your blog posts with shots at "agilists" and "alt.net" and your "codebetter days" is a bad idea and tells me you're more interested in an antagonistic approach than an actual conversation, and that's what I picked up and called you on. Leave that stuff out if you want to propose an idea and discuss it on the merits.

# re: GrDD Refactored...

left by Jay Kimble at 9/12/2008 8:48 PM Gravatar
Scott,

Really the reality is that I have had shots taken at me... I was preparing to defend.

ScottB's "Decades of existing engineering practice" is a perfect example of the arrogance that I'm used being hit with. My point being that I don't want to jump on the bandwagon with something that has been pretty much a waste of time for me (TDD), and by no means would I portray myself as one of you guys (because honestly I was just a tinkerer... I tried it... I didn't get far with it. I had some success, but felt like I got slower end results. As I fed back to the agile community (albeit very fledgeling at the time), the prevailing wisdom was that TDD didn't make one "faster" but made it's bread and butter on the back side of the dev process during the numerous bug fixes that come after the project was done.
----
Chad,
Will do buddy. If more of us non-agile guys wrote unit tests the world would be a better place for all of us... you guys could come in and there would at least be something to start from (you might not have all the tests you need.want, but at least you'd have something)

# re: GrDD Refactored...

left by Scott Bellware at 9/14/2008 6:42 PM Gravatar
There's no arrogance in mentioning the "years and decades of experience" that have already gone into making software development practices viable, and to differentiate which ones work and in what kinds of efforts, and what work is needed to get them to work. It's not arrogant to recognize that many people, many of whom are much smarter than you and I, have already figured much of this stuff out, and that there's value in returning our perspectives of ourselves from popular bloggers to fulltime students as well as workers.

I think you got push back and often dismissal from the community because in the past, you showed no real inclination to do the work that leads to the understanding of things like TDD to get to a point of knowing when to use it and what it feels like to use it.

I think you underestimate the ability of a practitioner and teach with ten years of experience to know when an initiate is speaking from experience versus speaking from postulations fed buy cursory attempts.

My personal complaints about your writings about experiences with TDD in the past are driven by frustration with you not having put in the time to overcome the learning curve, and yet still speaking about TDD and its effectiveness with authority.

TDD makes its bread and butter in my experience by shaping a concrete learning experience that leads to understanding software design to the extent that it can be leveraged to make many aspects of building, shipping, and maintaining software, including the bug fix phases, which is ultimately a symptom of rougher designs and insufficient testing (either by weight or by quality).

Your core objectives with git `er done development are loosely the same as agile development's objectives, but agile has much more hard science and engineering in play, and a system for rapid improvement once the learning curve has been overcome.

TDD isn't about bug fixing, just as testing isn't about finding bugs. Within the field of testing, testing is known to be something used to prevent bugs rather than find them.

TDD is something used to prevent design flaws rather than find them. And as we learn more and more about what kinds of designs have inherent flaws (usually stemming from local optima), the better we get at sensing them and avoiding them.

If it's arrogant of me to be knowledgeable, and to not be ashamed of it, then so be it. I honestly think that there's greater arrogance in believing that we have nothing to learn from the masters, and I think it's especially arrogant to portray our own lack of understanding as inherent flaws in the practices themselves as opposed to the teaching of the practices.

I personally deride a lot of the ways and means that harder-to-reach development practices are taught, mostly because of many teachers' inabilities to sense that they aren't getting the message across through all the self-stimulating jargon.

I've also experienced my own justification to that arrogance in responding to the abject unwillingness of students to buckle down and get the catch-up studying done, not to mention many students' predispositions to look to those with vested interests in the maligning of advanced practices for guidance.

# re: GrDD Refactored...

left by Jay Kimble at 9/14/2008 7:54 PM Gravatar
You know Scott we definitely disagree. Your answer now (and in almost all cases) is that I need to suck it up and do TDD because somehow it pans out (no one ever shows when it pans out... they just say that it does). It amazes me that you say "decades" of development and yet TDD/Agile is very young. In many cases you are reaching back to things that were used in the days of SmallTalk which from what I understand lacks/lacked some features of modern day languages.

I would expend the effort to respond further, but I'm too busy doing working... that's the heart of Git 'R Done...
Comments have been closed on this topic.