I suspect I could have written a very similar argument on the subject of Complexological projects, or agent-based modeling, or machine learning or statistics. But for different reasons.
Category Archives: Project
A quick little coding kata
What is genetic programming?
Transverse section shows multiscale detail
So with the new Work Season starting on April 1, I’ve spent some time revising my active project portfolio. A few shifts, a few start-of-the-month and tax-time digressions, but on track again.
One delayed item came to fruition this week, as I spent a lovely two-day trip in Cleveland visiting Leandog, an agile software studio I’ve heard a lot about. They have a nice open door policy, and welcomed my prying “let me watch you do it” visits both mornings with grace. Had a nice (but brief) chat and lunch with Zee Spencer, Angela Harms, and Jason Felice, gave a “lightning talk” (I think I yammered on for an hour) at CleRB about genetic programming, and spent Friday morning chatting with Leandog founder Jeff Morgan, from whom I will eventually learn where to buy a pizza with egg on it in Cleveland. And quick meetings with a number of other folks, notably Matt Barcomb and Michael Norton, to be continued next time.
There were three main reasons to go to Leandog.
First, because I know at least four interesting people who have gone to work with Leandog—sought them out, I think—and that’s interesting. Since I want to make places people seek out, it’s worthwhile merely growing that social network one more step out, adding more people who can have such allure. Rule one: Always add interesting people to your network.
Second, because after eight years I still consider myself as working on a long-term project that’s equal parts complex systems stuff, community design, and agile project management. I love opportunities to see healthy, productive, community-driven worklives like the Leandog folks seem to have. Workantile is a step towards what I have in mind, but it’s not the thing. Mixing in some Leandog-style structure will be helpful.
And third: because people complain.
I hear a chorus of dismay and disappointment coming from the founders and early adopters of Agile (from way back before it was called “Agile”). They’re dismayed or disappointed in the way the movement seems to be going, the way things shift as more people start “doing” it in a corporate cultural setting. Or saying they’re doing it…. And in turn there are people touting “post-agile” and “anti-fundamentalist” approaches to the same stuff.
It’s like a cartoon example from Andrew Abbott’s The System of Professions, frankly.
Crossing the Chasm was always, in my dotcom days, considered something to be sought, and you’d think anybody who founded or promoted a worldview-changing approach would be pleased when all of a sudden a bunch of hitherto deaf and blind mainstream adopters showed up asking earnest questions.
But that’s not always the way it feels. I suffer from this myself sometimes, when running into somebody from a totally different background, who appears as though he’s just using our words to describe his old boring bad harmful worldview.
And that’s interesting. A trend in my life.
As I’ve said before, I remember when Chaos Theory started to be invoked to math up all kinds of marketing bullshit, and how the actual mathematicians and physicists said their work was being subverted. About how the complex systems research community still has this bad taste in its mouth from new uses and abuses of “emergence” and “edge of chaos” in mundane workaday settings like consulting and politics. About how those of us in the early 90s who wanted to do computational biology got all pissy when the bioinformatics people took the mindshare away and made it mean “databases and string handling algorithms”, not actually making digital organisms like we had planned. And the noises old colleagues are making right now to what they perceive as “commoditization” of genetic programming (as if that were a thing). And lately the tension coworking people have voiced over the “corporatization” of coworking, and threats they perceive about it being transformed into a tool for companies to make quirky “innovation factories” (as if that were a thing).
A trend, as I said. Enough data just from my personal experience to call that social dynamic interesting. It feels like some kind of counterpoint to the innovator’s dilemma: a sense that when an innovation starts to take off, it’s out of control of even the founders and core philosophers, those with a deep personal interest in seeing it succeed on their terms. “No, trust me, I invented it: you’re doing it wrong.”
So I went to Cleveland to think a bit, and see one of these chasm-crossing transitions—the agile one—as it’s happening.
From what I saw, Leandog attracts people who have strong technical skills, but who also work well with people. They believe that some companies—the ones falling on the scale somewhere between floundering and trying to improve—can actually learn and adapt and become more agile. And that “becoming more agile” means something real and useful, about changing culture, not adopting diluted ritual.
All my evidence argues that Leandog is good people, and they have good customers that are being helped and changed. Not because (as a commenter said recently) Cleveland is some kind of backwater where they’re just now catching up, but because things are different everywhere.
That’s my point.
I’m not concerned with evangelizing agile business practices. That will sort itself out. I’m much more concerned about some macro-scale cultural problems coming down the road.
There’s an ominous sense in the air that many folks express—the one that Umair Haque in particular seems to riff and run with so much. The sense that things have all gone to hell and people aren’t paying attention to the big picture and the new ideas.
I think that portentous sense has perfused American culture before: at the end of the Gilded Age, and maybe also before the Civil War. And it drove us dangerously close to a kind of populist fascism.
The Cassandra schtick about how Nobody is Doing it Right, and we need a Revolution, and Change Agents Need to Change Stuff, it sounds to me an awful lot like the people talking that talk have never really been anywhere, or traveled much. “What these people need,” and “They ought to do something,” are often followed by, “…if they don’t we will.”
There is no single “they”. There is no single “we”. People who tell you there are—you watch out for them.
So I drove across Ohio last Friday. And that’s the third reason.
Cleveland is an interesting town, not least because I grew up in the suburbs. Reduced in a sense to an intermediate place, it was once a core industrial powerhouse, and one that didn’t fall as far as Detroit; it was the first and best of the Midwest Maker Towns; it seems relatively untouched by sprawl, and was already pre-stressed economically before the Great Recession started.
I drove across northwest Ohio, the slow road: Route 6, all the way from Public Square in Cleveland to Bowling Green, with a side-trip or two to Sandusky and Fremont and Grand Rapids.
And it reminded me that the future is never evenly distributed. To consider a single centralized solution to the problems I saw across that cross-section, to imagine that the strengths and skills and beliefs and desires and intentions of all the people along that route as if they were identical or typical or average—or even commensurate—is foolhardy.
I drove past farm workers’ hovels outside Fremont, and sprawling mid-century colonial “cottages” along Lake Erie with lovely gardens tended by the owners, and empty shopping centers and lively downtowns. Antiquing towns (Grand Rapids, OH), recovering mill towns (Huron and Lorain), unchanging but subtle suburbs like Avon Lake, ramshackle lost towns like Sandusky.
Through the years I’ve ridden the roller coaster of early-adopter-enthusiasm five or six times, and every time that enthusiasm is supplanted by hip-rats-leaving-the-sinking-ship you don’t understand what we were trying to do griping. I do it. People around me do it. And it’s finally starting to sink in that there’s nothing quite so dangerous as the glib mapping of one’s personal worldview onto the actual world.
Not news, sure. But I think it’s worth an effort to be reminded.
I ended my meandering musing drive at Seed Coworking in Toledo, who had an open house to show off their location and thank/solicit Kickstarter supporters (which I am one of).
I stood around yammering like an idiot with some Toledo folks I overheard talking about “getting an agile group together”, including a nice man with a startup, and some Seed folks, and a fellow from BGSU.
And the Toledo folks made Ann Arbor sound so cool. I wish I could visit that Ann Arbor some day.
It’s funny how folks think of our provincial little mill town of Ann Arbor as if we were an edgy revolutionary thought leader, and not a city wannabe that’s never felt any real economic pain. Instead of a town run on the principle that Townies are early adopters and founders of New Polite Liberalism, and that these new people and kids who come in here trying to build buildings and rent apartments are just ignorant newcomers diluting the pure vision of our little Town of the Mind.
It’d be funny if it weren’t sad. It’s what drives people away, that sentiment.
In a word: “conservatism”. Not the ridiculous pastiche floating around in political circles these days, but the Burkean kind that’s well-meaning and frugal at its best, that honors diversity and letting people have their own reins. But it’s run through with the anger and melancholy you feel when you realize your kid isn’t just acting out, she’s making bad decisions, and also a dose of the eye-rolling you do when an earnest touchy-feely person says they want to start a company that’s the next Google, as soon as they find a technical cofounder to work with.
It’s the same sentiment that makes you dismiss the small successes of people around you, as you are busy striving to preserve or revive Fundamental Truths.
Because you really did have a good idea, once. You had the best intentions in the world, but after a few years you got tired of being the lone voice in the wilderness. And now these newcomers, these mundane folk who say they’ve heard something that sounds an awful lot like what you were trying to say back when you still cared?
Well, they’re too late, as far as you’re concerned. It’s not the same, they’re missing the point, they’re diluting your crystalline ideas.
But I am reminded: It’s never the same.
Go visit somebody new. Things are different somewhere else. And when you get back home, maybe things will be different there, too. Especially if you feel strongly that a revolution is called for: perhaps there is one going on there, or will be here when you get back.
Or maybe it already came and went, and you just missed its threads out there on the face of the world. Maybe it’s been happening, here and there, all along.
More on modeling Requirements/Product Design
Had a very nice and rambling conversation with Ron Jeffries at the Brighton Agile Round Table yesterday, where we talked all around the two straw men models of “Strict Waterfall Project Management” and “Absolute Agile Project Management”, in light of the complexological model I’ve been sketching.
Mostly there were interesting reactions and clarifications to be made on the “analysis” end of the model, so I’m going to focus there for the moment. Recall that the point of this exercise is to craft a complex systems-y model of “project management” that’s flexible enough to include the “Waterfall” storyline and the “Agile” storyline, keeping track of costs, time and features and… what’s the other one? Oh yeah, quality. [joke!]
So as you’ll recall, I started (as any heir to Stu Kauffman would) with a Random Boolean Network to represent the “ground truth” of what people want. Originally, I’d sketched this as the dynamics of an RBN, with the “product” being built trying to predict and match the dynamics of the market’s whims. Seems that’s not a very comfortable analogy to draw: where I was seeing the time-series of interconnected dynamics of many features “as” a correlated feature, the language we use to talk about software projects very strongly emphasizes features as fixed structure, and user experience as the dynamic thing. So the sense of Product trying to match the twinkling lights of Market is tricky.
On the other hand, I have to set my heels at the idea of features-as-atomic-traits, since after all I’m ultimately aiming to model development and team learning as features are built and revised, and patterns are learned and re-used. So I’m not willing to drop the RBN’s complexity all the way back to a more “traditional” Kauffmanian static Nk model of a fitness landscape. Not that there isn’t a lot of nice tunable ground to be covered in fitness landscapes and stuff, but because software is used, it doesn’t just have attributes.
So here’s what we’ll try next:
Suppose that the ground truth of what the Market wants is determined by a Random Boolean Network. But not in the sense I described before, where the desired features are only evident via dynamics, and the goal is to build a product that mimics those dynamics. So no more “twinkling lights”.
Instead, consider the RBN to be the (secret) map of Market expectations. The Market will pay (or cost, in some cases) a certain amount for every Product feature which works in the same way as the ground truth expectation. But in this new version, the Market is not actively generating some kind of light-twinkling trace of data for the Team now, it’s just willing (for a price) to answer questions about its preferred outcomes.
Think of every possible transition of N input bits to N output bits as a use case over the N input features. “When the browser is open to the home page, AND the user field is empty, AND I click ‘log in’, AND I do not have a cookie set, THEN this other stuff should happen….”
A perfect Product will produce all the same output strings as the explicit Market function does, for all inputs. Any given Product earns money in proportion to how well the released features match the Market’s target desires.
But the Team only has access to aggregate income information, unless they pay for marketing.
There’s a lot of leeway here. Suppose a Team playing the low-hanging-fruit game comes along, and they release a Product that is just a constant output, say 1111100000, the ultimate in “you can have any color car, as long as it’s black.” They might just make some money, since there’s a chance the underlying Market desire is biased that way.
Although I don’t have any interest to do it in this model, I have to note there’s an opening here for exploring “market dynamics” in such a world. A slightly smarter Team (in the same Market setting) might come along and release something that is just as dynamically dumb as the 1111100000 folks, but better matches the average desired output for each feature. They’ll make more. Some innovator may well come along and release a product that pays attention to some inputs, maybe first-order interactions. They’ll make a killing.
But today I want to focus on the process within a Team, not the dynamics of a full market populated by Teams with different strategies and capacities.
Now I’m reminded that the models of project management (at least the ones we’re used to) will include some big block process labeled “analysis” or “marketing” or “project management”, and since Agile project management implies holistic adaptation that should include market research on the Team whenever market research generates business value, we’d better include that block in our model.
Call it Requirements Gathering (or maybe Refinement, if you want to imply the inclusion of the traditional “Maintenance” functionality, as we should in an Agile Team). Let’s give them some tools.
How about interviews? Say each interview costs a certain amount of money and time, and the Team’s analysts can (with 100% confidence) elicit one input-output combination from the Market. “If you’re 1011100011, what will you do next?” To me, this has the metaphoric capacity to handle people not knowing until they’re asked, and also revelation of only indirect information.
An interview like that should be expensive, I think. How about A/B testing, or more generally polling? “If you’re 1001101111, which of the following do you prefer as the outcome, 1011100011 or 1100000011?
Then of course there’s sales data, for situations in which there is in fact a Product already released: As I mentioned, even a very dumb product that fills some roles slightly better than the ones it messes up has the capacity to provide historical information (and revenue to pay for improvements!).
Now this brings up one more change from the previous iteration of this model: Revenue.
In the first version, I proposed a model in which each feature had an intrinsic positive value, and a released Product collected that value during every time period where it matched the intrinsic Market dynamics. We don’t have Market dynamics now, we have a Market that’s a black box.
The baseline in this old one was “you make nothing”. I’ve rethought that, too; let’s throw a monkey wrench into our Team’s world, and allow features to be negatives as well as positive desires. In other words, whenever a feature with a negative value is matched, the Team loses money.
So where are we now?
Let’s say the Product is some kind of function that takes generalized Boolean inputs and produces (coincidentally)
generalized Boolean outputs. The space of inputs is all
–bit binary strings, generalized to include # or “don’t care” inputs where an input is ignored, and the output space is all
–bit binary strings generalized to include ? or “unset” outputs, when an output bit is not explicitly set to either 0 or 1.
Take a second here. We can therefore say a Team “starts” (having done no work thinking about or developing any Product at all) with a “default” Product that ignores all inputs and produces no outputs: ###…### -> ???…???. They aren’t earning or losing any money because their Product has no visible features to capture (positive or negative) Market share.
Suppose after some development time a Team releases a (rather stupid) Product that implements ###…### -> 111…111; in other words, it always returns 1 for every feature. How much money do they earn?
We determine this either by doing the math or by sampling. We know the ground truth Market function, a large and rather complicated truth table. If we want to do the math, we can convert it into a cumbersome probability function, and just assume that the diversity of people in the market is absolutely uniform: that is, that people will “use it” by applying every possible input. Alternately, we can sample this space (using the same assumption of uniformity) by taking 1000 or so random bit-strings as inputs, and counting up how much revenue the Product generates (or loses) by matching those features.
Suppose in our example there are 21 features, and that the value of the first is , the second
, and so on, with the 21st providing value of
. The Product that returns 1 for every input will lose $10 for every 1 in the first feature’s output table, and earn $10 for every 1 in the 21st feature’s output table. So it’s just a matter of counting to determine how profitable it turns out to be.
Just to make it clear, suppose some other specialized Team releases a Product that does a perfect job at only one feature whose intrinsic value is $4. It will earn the Team $4 for every possible input combination, regardless of the other features; no money is lost or gained for features that are not present, or do not match desired outputs.
More later; time for lunch!