The problem with “Customers”

Sev­eral foun­da­tional aspects of agile project man­age­ment focus on the role of the Cus­tomer. The role is of course best-​​defined in the con­text of work-​​for-​​hire, or con­sult­ing, or even in places where the team is doing vol­un­teer work in an Open Source set­ting for a spec­i­fied Main­tainer. And his­tor­i­cally this makes sense.

In the early days, I remem­ber a lot of peo­ple in soft­ware projects would con­flate the Cus­tomer with the User, even when they weren’t the same per­son. And then of course there’s the (risky?) con­fla­tion of Cus­tomer with Bill-​​payer, or (maybe more dan­ger­ous?) Cus­tomer with Project Owner (in a Scrum sense). But those are known prob­lems, and the agile coach­ing com­mu­nity seems to have han­dled them rea­son­ably well—in the con­text of tra­di­tional pro­fes­sional settings—if noth­ing else by repet­i­tive correction.

The trou­ble I’ve found recently is how often the term puts off explor­ers, those who are tempted or solicited to try an “agile for one” (or “agile for us”) approach to their inves­ti­ga­tory work—the just-​​try-​​it-​​and-​​see-​​what-​​happens projects that fill our days as engi­neers, sci­en­tists, artists and Mak­ers more gen­er­ally. To some extent the prob­lem is the word and the freight it car­ries, and the diverse lan­guages and cul­tures of from which those folks come, and the cul­tural antipa­thy preva­lent between com­mu­ni­tar­ian life-​​of-​​the-​​mind folks and doing-​​it-​​for-​​the-​​money folks.

I know, hav­ing spent so much time among the uppity agile rebels, that this “Cus­tomer” can be you, or all of you together (as long as you can arrange to Speak with One Voice), or nobody in par­tic­u­lar. I under­stand that the point of the role is some com­bi­na­tion of (1) iden­ti­fy­ing the most valu­able thing to deliver next so you can focus on that and deliver it next, and (2) avoid­ing the Mis­sion Creep and Babbage’s Dis­ease that keeps projects from ever deliv­er­ing any­thing of use at all, and (3) learn­ing the (sur­pris­ingly rare) skill of Not Pro­duc­ing Unin­tel­li­gi­ble Crap.

But the word itself, and the freight it car­ries, seems to put off people—not least stu­dents and other academics—who I have to say are among the most “at risk” for fail­ing to ship any use­ful work at all, ever. The deep use­ful­ness of the Cus­tomer con­cept, as far as I’m con­cerned, is that some­body ought to be able to dynam­i­cally and adap­tively sort the many things you might do next into an ordered list that reflects cur­rent per­cep­tion of value.

To me, “being Cus­tomer” in my projects—whether I’m doing open-​​ended research or tar­geted soft­ware development—is a vis­ceral change I make in my beliefs, desires and inten­tions. If I’m sort­ing sto­ries or plan­ning the next day or week, I try to look not at the sub­jec­tive expe­ri­ences I’ll have when mak­ing progress and doing work, but instead at the value I expect (right then) to obtain from the state­ment of pur­pose each story rep­re­sents. It doesn’t mat­ter than I’m the Cus­tomer and the “Devel­op­ment Team” on cer­tain projects, as long as I can dif­fer­en­ti­ate the stance I take when mak­ing deci­sions in those two roles. It doesn’t mat­ter that the “story” is “make one and see what hap­pens”; as a Cus­tomer I see that as a time-​​boxed deliv­er­able, and demand it change to “spend one day mak­ing one, and pub­lish a result at the end of that day”.

(What I try never to do as “Cus­tomer” is assign expec­ta­tions of how long some­thing will take. I am there, at that moment, only to see the value in var­i­ous sto­ries as they’re pre­sented, and add new ones, and rearrange their order. If I need to decide how much might be done before the end of the iter­a­tion, or even whether one sin­gle “story” won’t or can’t fit in the allot­ted time, I’ve got to con­sciously switch over to “Maker” role. Oh, and also I try to avoid ever say­ing, “Go away, and never come back!” to myself….)

That’s how I try to run my research, and what I want to see in oth­ers. It’s safer explo­ration. It’s the oppo­site (as far as I can tell) of how aca­d­e­mics and STEM folks think most often, and absolutely the oppo­site of how school­work and most tech­ni­cal pro­fes­sional work is planned, because those are sim­ply given lists of com­pre­hen­sive require­ments. Bit three-​​ring binders full of “it must do all these things”.

Maybe the prob­lem is that these folks, start­ing off as they do with such deep antipa­thy to the cul­ture that led to the term, think the “Cus­tomer” role is some sort of per­mit for pre­ma­ture assess­ment, some kind of master:slave rela­tion­ship, a debt and an oner­ous promise to ful­fill that debt. But in prac­tice, sort­ing tasks by value does not entail pun­ish­ing fail­ures to deliver on those tasks (and this is the deep­est rea­son why mea­sur­ing “veloc­ity” is so fraught). “Let’s spend a day get­ting this bet­ter!” is not the same as “Get this done by Fri­day!” The for­mer implies that no mat­ter what happens—we get dis­tracted, we had an emer­gency, we couldn’t think of a way to make it bet­ter, we make it bet­ter enough that it goes away entirely—there’s always another round of plan­ning in which we can do the same thing again, another day some­where down the line where there is per­cep­ti­ble value in work­ing on that thing a bit more. And by the same argu­ment, it means that progress on other fronts is (for the moment) more valu­able than work­ing on that thing until it’s “done”!

It saves huge amounts of time to use the Cus­tomer role explic­itly. That saves my life, some days. It lets me have some­thing to show for my work every day. Me, the “Cus­tomer”. Oth­er­wise me, the “Devel­oper” would wan­der off some­where doing what­ever ran­dom crap caught his atten­tion, and end up rush­ing the use­ful work at the end.

I don’t know a bet­ter word than “Cus­tomer”. But I don’t know a bet­ter word than “agile” yet, and it’s get­ting close to the day when that also will need to change. I don’t think I can use the word in print any more, so I’m look­ing for a replace­ment soon. Spend a day think­ing about it and send me what­ever you find by the end of that day, OK?

Requirements, Design, Implementation, Verification, Maintenance

Spent a few cycles yes­ter­day think­ing about Lau­rent Bossavit’s provo­ca­tion, and while I’m hav­ing fun get­tin’ all com­plex­o­log­i­cal after so many years away from the Santa Fe Style, I’m increas­ingly con­fi­dent it’s not quite what he was ask­ing for.

After all, com­plex sys­tems mod­els offer no pre­dic­tive value, except in the sense that they pro­vide insights into mod­els’ intrin­sic con­se­quences. As with Genetic Pro­gram­ming vs Sta­tis­tics, agent-​​based com­plex sys­tems mod­els are use­ful only inso­far as they sur­prise and inspire fur­ther mod­els, not as tools inter­act­ing with the “real world”.

At any rate, I’m find­ing it a use­ful exercise.

Here’s where I am now, as of this writ­ing (link to old commit).

Per­son­ally I’m con­fi­dent that the toolkit of com­plex­o­log­i­cal mod­el­ing is emi­nently prac­ti­cal; Nk mod­els, Boolean net­works, agent-​​based sim­u­la­tion, all the rest is in my blood, so the design pat­terns are so obvi­ous to me that I can slap some­thing together in a few min­utes. But it’s inter­est­ing as I talk with folks (Lau­rent and Ron Jef­fries, among oth­ers) about this lit­tle sketch, how often my cor­re­spon­dent wants to drop my mod­el­ing toolkit back down to the famil­iar level of aggrega­tive sta­tis­tics, or stock-​​and-​​flow continuous-​​valued sys­tems models.

Sub­jec­tively, when folks ask for some­thing so intrin­si­cally focused on story-​​telling to be “sim­pli­fied down to cleaner math”, it fees a lot like when old-​​school pro­gram­mers ask to use Inte­ger val­ues for Boolean val­ues (“-1 is false!”), or when I see sim­ple structs of prim­i­tives used instead of full-​​fledged objects in an object-​​oriented lan­guage. Some­thing about habits and famil­iar­ity, surely, but also an utterly dif­fer­ent sense of ele­gance and pur­pose, of craft, creep­ing in.

(Which is inter­est­ing, and worth watch­ing over time. Some­thing very sim­i­lar comes up when I read this.)

At any rate, a Boolean Net­work feels like a nice, tun­able model of a com­plex world with hid­den inter­nal struc­ture. In addi­tion to tun­able inter­nal com­plex­ity, one can always add exter­nal­i­ties, noise, struc­tural dynam­ics, all sorts of things that model the way we treat error and uncer­tainty in the real world much more authen­ti­cally than merely adding some normally-​​distributed epsilon to a number.

But there’s an inter­est­ing mod­el­ing choice before me, now, and I’m think­ing aloud about it. As you’ve read, I’ve sketched a world with use­ful tun­able para­me­ters; I’ve sketched a com­par­i­son (“water­fall” vs “agile” as vari­a­tions in tim­ing and order of staged work). But one does want one’s sim­u­lated “Team” to be able to do that work in a rea­son­able way.

So what is “require­ments gath­er­ing”? Or design, or cod­ing, or test­ing? As hap­pens now and then when build­ing com­plex sys­tems mod­els, the ques­tion is not “What do peo­ple really do?”, but rather, What is the sim­plest con­vinc­ing mimic of what is implied by a story in which we say, ‘Five require­ments have been gath­ered’? Or, Six­teen designs have been con­sid­ered, or Eleven tests have been cre­ated and run?

I have some notions, as you can see in my notes at GitHub. But there’s also this feel­ing that peo­ple brought up in the clas­si­cal math­e­mat­i­cal mod­el­ing world (the one that per­fuses com­puter sci­ence as well) will prob­a­bly raise their eye­brows. One is brought up to think of vari­ables as prim­i­tives, and of inter­ac­tions not as algo­rithms but as equa­tions. One is trained by decades of expen­sive com­put­ing and resource lim­i­ta­tion to assume that aggre­ga­tion takes place prop­erly within a model, using stocks and flows and aggrega­tive mea­sures and sta­tis­tics, deriv­a­tives and aver­ages all over—and not to see each instance or run of a model as being contingent.

This is a kind of pre­ma­ture opti­miza­tion that I haven’t heard remarked before. But I think it’s close to the core of what makes “com­plex­ol­ogy” abhor­rent unto the jour­nal­ist. And what’s inter­est­ing is that it’s com­ing from nerds who have almost cer­tainly dab­bled a bit with these alien, thrilling, com­plex­o­log­i­cal mod­els: imple­mented a Game of Life, for example.

And yet I think most haven’t real­ized that con­tin­gency and sub­jec­tiv­ity are baked right in. Pro­tip: On aver­age, over long time scales, all Game of Life runs are empty.

Maybe nobody’s pointed that out before. I think they prob­a­bly ought to have done so. :)

How would one compare “agile” to “other” software development usefully?

Lau­rent Bossavit says in passing

This is an inter­est­ing propo­si­tion, but hav­ing looked over the work of Abdel-​​Hamid a bit, I’m won­der­ing if we might con­sider a more agent-​​based approach.

The orga­ni­za­tional behav­ior and systems-​​dynamics frame­work we see in that cor­pus is admirable and inter­est­ing, but one has to admit it’s focused on aggre­gate behav­iors of “devel­op­ers” and “man­age­ment” observed from the stand­point of a cor­po­rate plan­ner stake­holder. I don’t feel obliged to have that con­ver­sa­tion any more.

What does one want to explore? The things that set apart agile projects from inag­ile ones, I sup­pose: Risks of the many modes of fail­ure; adapt­abil­ity; scal­ing; work load; busi­ness value deliv­ery rates and prob­a­bil­i­ties; sub­jec­tive expe­ri­ence; knowl­edge shar­ing; some­thing about the many stake­hold­ers (“man­age­ment”, “team”, “cus­tomer”, “users”)?

All pos­si­ble. I’ve had some inci­den­tal con­ver­sa­tions with Ron and Chet about this, too, over the years. Maybe it’s time to pur­sue it a lit­tle ways….

But what does one want to compare?

Who are you, and what do you want?