Flutterby™! : Software development methodologies

Next unread comment / Catchup all unread comments User Account Info | Logout | XML/Pilot/etc versions | Long version (with comments) | Weblog archives | Site Map | | Browse Topics

Software development methodologies

2012-05-22 15:08:38.650204+00 by Dan Lyke 6 comments

I've been a little frustrated with the progress of a project at work, and this morning I suddenly had an insight: Yes, all of those Agile/Pair/Waterfall/whatever "software engineering" methodologies are snake oil (IMHO), but they're also a chance to get a step towards any accountable process in place.

The real challenge is breaking the process down into discrete steps and saying "here's what needs to be done next", and if the participants in the process aren't used to that discipline, if they're just used to "yeah, I can have that done in 2 days" (where "that" is a functional item laid out in some document without clear inputs and outputs), everything is a matter of wallowing through a bog, and there's a lot of wasted down time because people are hanging out waiting for "that" to ship.

So, if one were tempted to try to bring some sort of process in to an existing team, what mechanisms would one use... hypothetically... What's the current in-vogue "methodology", especially among Perl geeks.

[ related topics: Interactive Drama Perl Open Source Software Engineering Work, productivity and environment Machinery hubris ]

comments in descending chronological order (reverse):

#Comment Re: made: 2012-05-25 21:14:13.788995+00 by: jeff

Hey--I'm a certified Scrum Master. Need help? :)

#Comment Re: made: 2012-05-24 11:59:32.236331+00 by: DaveP

Well, the PSP people who trained me a few years back could do that, but it would take two weeks of training, so you wouldn't really be ahead of the game. I always think of PSP as "Agile for the BDSM crowd."

And really, I think that's going to be the problem with any outside organization. Yeah, they can probably help, but on this particular job, it'll be either a wash or a net loss because of the time to train everyone (which really is the time it takes for the team to accept stuff they can probably be taught in a day).

Good luck. I think any kind of accountability you get in place will be a help.

#Comment Re: made: 2012-05-23 14:23:21.008524+00 by: Dan Lyke

Yeah, this question is really about the possibility of finding a consulting organization that can come in and teach a group of programmers about breaking things down into steps and building social structures for accountability for those steps. And they're Perl geeks, which is why the Perl-ish-ness is important.

The long-term estimation isn't nearly as important in this case as figuring out a way to get people making and communicating concrete steps towards their goal, so that we can take a project that's going to take a month and a half and ship it in the 2-3 weeks it should have taken.

#Comment Re: made: 2012-05-23 12:12:54.547678+00 by: DaveP

I'm not sure about the perl geeks, but one of the things I keep trying to do is related to your comment about breaking things down into discrete steps.

Agile methodologies are an attempt to, as far as I can tell, avoid estimating. That's fine if you can support it and just zero in on an answer for when you'll be done along the way, but there are still some tasks where knowing that it'll take N months to do feature X is needed before you start working.

For projects where knowing when you'll be done is important, I'm very firmly of the belief that if you can't estimate it accurately, you've failed to do one of two things. The first is decompose the problem into bite-size chunks; I need to break any task down into sub-tasks smaller than a week before I can estimate, but I can estimate sub-week tasks accurately, and if I spend the time to decompose the problem ahead of time, I can estimate very accurately. That's your second paragraph, and even agile folks need to be able to do that, though the backlog can add things as you go - it'll just drive your product management nuts.

The second requirement is to accurately account for non-task time. Agile methodologies figure out non-task time empirically. However you do it, if your estimates are continually coming in too low, there's probably something you have to do every day or every week that you're not accounting for.

I find that even experienced people who can decompose tasks accurately run into trouble with the second when they move to a new kind of task. They forget about the time needed to debug a UI because users click in crazy places. They don't think about the time lost trying to get the teleconference set up with the team in India. They brush off the time to adapt to new tools or language features. Or in the stuff I work on, they live in denial of the "Apple Tax" in which code you just spent the past year writing might become obsolete because it uses technology that Apple has been saying is deprecated for years, and now they're finally taking it away for realsies.

#Comment Re: made: 2012-05-22 21:06:34.102905+00 by: John Anderson

Oh, and (obviously) this is something I've dealt with a fair amount in the past, am dealing with right now, and will probably be dealing with in the future, so if there are any more specifics, please ask, here or ... other places. It's something I should probably try to get a bit more systematic about thinking about...

#Comment Re: made: 2012-05-22 21:05:16.610844+00 by: John Anderson

AFAIK, there isn't any one "process" that's any hipper than any other with the Perl set -- at least not the subset of it that I hang out with.

The key word there is "accountability". One thing I've found useful in the past is the notion of the short daily morning scrum -- a standing meeting, both as in "every day, no excuses" and "no chairs, you're standing up". Everybody stands in a circle, you go around and say, "Yesterday I did X, today I'm doing Y, and problem Z is slowing me down or screwing me up". That plus having a PM or a team lead who is willing to go up to somebody afterwards and have the "you haven't done shit for 3 days, what gives?" conversation will take you a long way. (That PM or tech lead better also be following up on any problem Z-type issues that come up, too.)

Once you get that in place and get it working, you can introduce the idea of an iteration or a sprint or whatever -- have a slightly longer meeting on Monday morning where you figure what is going to be accomplished that week, and then have a meeting later in the day on Friday where people demo or walk through what they've done *specifically with reference to what they planned back on Monday*.

That helps you introduce the second most important thing after accountability, and that's feedback. Everybody hates making estimates because everybody sort of sucks at it. The way to deal with that is not to try to avoid making estimates, and it's not to "Engineer Scott" the estimates. It's to make an estimate, fuck it up, learn from it, and repeat that cycle a whole bunch -- just like anything else you're not good at.

Of course, the rub with all of this is sticking with it, because it tends to upset apple carts. Lots of people *like* wallowing in the bog and not making much progress. It's comfortable, and they get to check Facebook a lot, and they have a sense of job security. Tred carefully. 8^)