Software Methodology: Why One Size Fits No One
github.com
github.com
Definition: A team member is "garage competent" if, when locked in a garage with a computer and an internet connection (but without help or advice from other team members,) he or she could deliver some working version of the product single handed, given sufficient time. The model's prediction is just this: if the number of garage competent team members is greater than the number of other team members, then the project will be delivered. Otherwise, the project will fail.
(In this simple version of the model described above, simple majority serves as a proxy for control of the project. A more nuanced but harder to define model would define "control of a project" as a weighted sum over team members taking into account the leverage of different assigned role such as PM or architect.)
I posit this is not just a highly predictive model, but in fact the causal mechanism project failure: Once people who are not "garage competent" are in control, they make reliably make decisions that will ultimately doom the project. Try it out yourself: think of a historical project where you know the outcomes and can estimate garage competence for each team member and see if it makes the correct prediction.
Problem is, the context of the project will often involve people of questionable competence...
So if we need to "build a web app", the ideal setup is to find someone who's an ok designer, ok coder, ok devops, and ok at asking customers what the hell they need the thing to do (PM?). If that fails, the next-ideal setup is 2 people working independently on aspects as far as possible from each other.
- https://github.com/risk-first/website/wiki/Communication-Ris... - https://github.com/risk-first/website/wiki/Complexity-Risk#c... - https://github.com/risk-first/website/wiki/Coordination-Risk
If you provided each garage programmer with a full waterfall aerospace grade up front specification, you'd have a lot more success than if you just gave them some vague post it notes. It would also ensure they produced almost identical results.
But the upfront spec is expensive, and in itself hard to produce - the premise of most methodologies is that iteration with real software and real customers is actually the most effective way of producing a viable spec.
I don't think I've worked with more than one or two people who would fail to deliver with a clear spec.
I can certainly believe a good number of programmers couldn't, for example, figure out how to build a database on their own, or a 3D game, work with cryptocurrencies, or reverse-engineer an API. There's a reason FizzBuzz is still a valuable gating test.
In an environment where getting proper spec is a challenge the competent developer needs advanced business knowledge too. Similarly, a very technically competent team would still doom the project by making the wrong business assumption in their decisions. I worked in several project where having built a 1:1 relationship with key people at the client location was essential to get anything done. i.e. Being known by the guys in the room was the difference between a release met with hostility (negative expectations) and one met with excitement (positive expectations). Garage Competence would have required those connections.
I have seen successful teams when only one person was very good at X and other learned it. And he was NOT in control and people in control weren't technical. If you have at least one component person on the project, time becomes the most important variable.
> think of a historical project where you know the outcomes and can estimate garage competence for each team member and see if it makes the correct prediction.
Sure. Bunch of competent people, but demotivated. Another case: Competent people, but not enough time.
I would say that in this case the following condition for failure from the parent is true:
> people who are not "garage competent" are in control
One of the patterns I saw regularly when I was contracting is a team of ten developers would have one or two people doing almost all the work.
Your thesis is backed by some data from the COCOMO model of software estimation [1]
The 'quality of the team' is generally the #1 cost driver of a project, according to some hard data.
Nope, it , IME, significantly underpredicts delivery.
If you change your success metrics to something that takes into account the completeness, correctness, and/or operational success of what is delivered, I think the problem reverses to overpredicting success, and I think the source of that is that focussing on garage competence of team members ignores that coordinating work of a team effectively is its own critical skill, critical defects in which will cause otherwise competent teams to deliver garbage.
But in a real fight, you hit with whatever you can grab onto :)
"Everyone has a plan 'till they get punched in the mouth."
https://bootcampmilitaryfitnessinstitute.com/military-and-ou...
The key it seems, is the team agreeing there's going to be a punch in the mouth, accept that, stick together (i.e., don't panic), find a solution and continue (til the next painful punch). The plan can change, the process for considering change should not.
The arc of my point is that the methodology matters (kinda), but more importantly it's that everyone agrees to what the process is and sticks to it. Without such dedication and consistency the methodology doesn't matter, you're gonna come up short.
Is agile the Brazilian jiu-jitsu of software development?
Agile is the franchise karate chain from the 80s: https://m.youtube.com/watch?v=Hzh9koy7b1E
Maybe the metaphor still works.
It was the same as Ronda Rousey dominating women's matches when that section of the UFC started up. It doesn't mean that Judo is "better" than the other styles, the other competitors simply didn't know what to do with it, and now they do.
It certainly has parallels to trendy new software engineering styles "dominating" the field, though I'm not sure they lead to any more real "victories" compared to actual combat. Just because the time runs out on a software project doesn't mean that anybody actually won.
Wrapping your legs around your opponent's waist and rolling around on the ground for minutes ceases to be a good idea the second you leave the ring. While breaking fingers, ribs, poking eyes, punching throats and kicking knees and groins suddenly become viable options. In most cases; the sooner you can get the hell out of there the better, because the risk of getting into trouble increases fast in a street fight.
There's plenty of Bullshit Do out there, no doubt. But there is also plenty of useful knowledge and experienced teachers that you miss if you assume that everyone who came before you was a complete idiot.
Many martial arts were honed into more or less perfection over hundreds of years by people just as intelligent as you and me, but with generations of experience from actual mortal combat. Living another day is a pretty good motivation for training and evolving.
Much of that is still around, but it's not being marketed. Because it's not what most people are looking for, it's too real and ego-killing. Because it's barely allowed; you can't spar out in the open with real knives or swords for example, you'll end up in a cell before you know what happened. And because it's been Disneyfied, by people like Jack Mace and Master Wong.
Once you've spent tens of years really training martial arts, as opposed to sports or pretending in silly uniforms; there's not going to be much to prove any more. If there is, you're doing it wrong. I prefer not fighting, people get hurt best case. So I can't really show you anything that looks like MMA, because that's just not how we train. And we don't do competitions; because there are no winners; just two banged up idiots, one happy and one sad. But for whatever it's worth this is me with a private student 3 years ago:
If you want to learn anything, you definitely need to spar; but sparring is not a competition, no one is actually trying to hurt anyone. The more experienced your partner is, the harder you can go without risking injury.
TKD suffers from the same sports virus as MMA if you ask me; just a different, less violent and more exotic flavor.
There are different techniques for different situations. Throat punch, eye gouging are last resort techniques.
I don’t know anyone that would sign up to “debunk” these, while there are plenty that’ll happily do some MMA sparring.
https://www.mmamania.com/2018/12/29/18160674/ufc-232-full-fi...
Works in the ring. Works outside of the ring.
BJJ isn't defined by rolling around on the ground for minutes, it's defined by the importance of training against resisting opponents safely, which most traditional martial arts cannot or are not willing to do.
Not really. BJJ was very successful in the early days of what we now call MMA because everyone was playing a new sport with new rules and those rules allowed new tactics that were unfamiliar. BJJ's style of ground fighting was alien to practitioners of many other styles and they hadn't trained to defend against it, but also crucially, within the rules of MMA taking your opponent to the ground is something you can often achieve and with relative safety, so BJJers initially enjoyed a big natural advantage by being able to move the fight to their territory. Fighters from other styles quickly learned to sprawl, posture up on the ground, and so on, after which BJJ still offered effective techniques but wasn't nearly as dominant as it had been in the early days.
The analogy is quite flawed anyway, though. MMA is a great sport for those who enjoy it, but it's still a sport and still has its own rules. What works in the octagon, with a fence around the outside and a clean, flat floor, between exactly two fighters wearing fight-friendly clothing, when both are unarmed and neither is allowed to employ "dirty fighting" techniques is... well, not necessarily what would work without those rules, whether in a different sport or in any sort of real life altercation.
No, it doesn't.
Virtually all historical martial arts styles not compromising effectiveness to adapt to some social constraint focus heavily on weapons. (Heck, even most of those compromising effectiveness to adapt to a social constraint do, unless the specific social constraint is the needs of a group completely barred by law or convention from arms.)
The “martial” in “martial arts” means “pertaining to war”—when was the last war you’ve heard about fought in exclusively one-on-one hand-to-hand combat without weapons?
> Is agile the Brazilian jiu-jitsu of software development?
I would say the various concrete methodologies marketed as “Agile” have approximately the same relationship to software development as BJJ has to warfare, sure.
That's Krav Maga, no?
One size doesn't fit all so we should make the development process more fluid.
Hey what a great idea! Here are some fluid methodologies I just came up with.
Woah this methodology is awesome; everybody should use it!
One size doesn't fit all so...
Well, that took long enough.
Any non-trivial project with external dependencies is going to have to be able to adjust when things don't go as planned.
Software development might be worse and it's worth trying to improve, but it's far from unique.
1 A geotechnical exclusion zone at the front of the house whose exact location was unknown. 2 Three strange angles (one for solar access, two marking out the block size) making measurement tricky thus tricky locating the exclusion zone. 3 A brick house base and a steel frame to go on top. There was 5 centimetre tolerance for the location of the steel beams.
Get #1 wrong, and start building all over again. Get #3 wrong, and it's time to re-fabricate the frame.
Could have been costly. Went well but took a lot of care, attention and coordinating across 5 groups of contractors.
As a side note, one of my occasional hobbies is performing super-sketchy surveying methodology. It turned out that my extermely non professional, totally un-certifiable methodology was within 10cm of the actual exclusion zone (whose length is around 10 metres from the front of the block of land).
Development is never really like that, why would you write another JSON parser if you already did it yesterday.
Author here. This is a single page from the larger "Risk-First" project, about risk in software projects.
I put the front page up a week or so ago and it was fairly well-received. Hopefully people will enjoy a festive second-helping.
Feel free to ask anything.
On the one hand, I would like to grow Risk-First as a community, and get other people authoring articles. With this in mind, I am trying to automate the process by which collaborators are added to the github organisation... it's manual at the moment which is already painful.
On the other hand, I wanted to publish this work in order that it could be read off-line (in print form, should be ready end of Feb) or on a kindle (which is currently pre-order). This _probably_ won't generate much income as it essentially is content that is already for free on the website.
Probably, the license is sufficiently permissive that other people could also publish the work as a book for their own means, so long as they retained attribution or copyright notices. I guess this is the usual quandary on making anything open-source.
I expect you're right that the license _should be_ CC-BY. I need to investigate further on this. Do you have any further thoughts on this?
The Apache license was designed to manage software specific risks.
For the book, you can have a few chapters which are proprietary, clearly marked as such in the book, with the CC chapters explicitly identified. That allows anyone to republish/derive the CC chapters, but not the proprietary chapters. There might be a natural separation between community-authored content and your analysis/perspective chapters.
CC-BY 4.0 also allows derivatives of the community content to be proprietary, so the entire book can remain commercial. There are other CC licenses (share-alike) which have GPL-like qualities. It depends on which outcomes you want to incentivize, and how much effort you want to put into management of content origin, derivatives and/or issuing DMCA takedown notices to Amazon.
For revenue models, look at softcover.io, which provides free-to-read content with upsells to paid ebook and video. It has generated several hundred $K for the Ruby on Rails tutorial. The author has previously posted about this on HN.
This reads largely like a recapitulation of Boehm's 2003 book "Balance Agility and Discipline" [1]. Have you read this and did this provide any inspiration for the article?
[1]: https://www.amazon.com/Balancing-Agility-Discipline-Guide-Pe...
There just isn't a general framework that tells you how to categorize and deal with every issue that you come up with.
The main thing I get from the various methodologies is general philosophies. Things like "try to get feedback incorporated quickly". Or "Identify in advance the things that are expensive to change".
We're essentially treating "methodologies" as software that runs teams. Furthermore, if we are doing software we should follow the UNIX philosophy and the bazaar rather than the cathedral.
Edit : I kind of want to make this a reality now. I've registered http://micromethodology.com and will make it so micromethodology.com/standup can be a place to share "how we do [x variant] standups" via pull requests on https://github.com/hitchdev/micromethodology.com
Really, all of this is bullshit, because the reason we sometimes fail to deliver software projects is humans really suck ass at dealing with complexity. We can deal with one complex thing at a time, but once multiples of them are all being considered at once, we just screw up constantly.
I think the way to pick any methodology is really deceptively simple: 1) look around and see if most of you are experienced at a given methodology, and then 2) use it.
I think it's that second part that people screw up on.
I agree with you that it's nice that our bodies make things _nice_ to eat as well as recognising nasty stuff. I wonder if there is an evolutionary reason for that too...
Sadly, there are still some things that _don't_ taste bad but will kill you... hidden risks of eating I guess.
I talk about Complexity Risk here: https://github.com/risk-first/website/wiki/Complexity-Risk
Often, Complexity is fine, but then something bites you in the ass unexpectedly. Sounds like risk to me.
That's the key point from my reading. After working with the same people on multiple products at a startup, I came to trust the product research and design steps preceding development and the marketing and customer success. Even if not wholly believing, I at least came to the conclusion that it was closer to an efficient process than I could come up with.
(Panic Driven Development/Design)
At least that’s my experience
It can take the form of useless meetings. ex: Oh, stand up meetings sound good, but what are we going to talk about?
Only keeping the cheap aspects. Ex: not doing formal test campaigns based on previously defined requirements but forgetting about things like pair programming in XP, up to date automated unit tests, etc...
Granted it is a matter of where it is expected to be applied and by who. Expecting an artillery gunner to do advanced math calculations from the back lines is fine if not ideal compared to computerization. Expecting a grunt under fire to do so to use his rifle is not no mattet how accurate it would wind up.
It is a principle of art as well at very least of when to break the rules - it should be done for a reason and awareness of how it may backfire instead of "just because".
Well, that's not true.
A software development methodology doesn't replace judgement. If you try to make one do so, you're probably going to end up with a mess regardless.