The Secret Sauce

You've gotta tell them. Soylent Green is people. We've gotta stop them somehow.

By Julian Browne on May 29, 2011. Filed Under architecture, delivery, development, governance

Last time, I was talking about what I consider to be the general lack of a crisis in software development. And it got me thinking - if there is no crisis in software development, no inherent flaws in our tools or our methods, then there must somehow be a way to convey the appropriate use of these tools and methods in order that everybody could get it right every time.

If the Enterprise Architect criticised the
sauce this time, it was going over his head

Ah ha, I thought. A book. A book entitled "The Secret Sauce". A book that will make me one .. million .. dollars. I can buy an island, with my own mini-me, surrounded by frickin' lasers.

But of course there is no book. There's no book because the truth is if anybody wrote it, it would go something like this:

Hire a few smart people. Let them hire some other people they'd like to work with. You don't want a team full of rock stars, but you do want people with a mixed bag of ideas and experience. You want them to put the case for different ways of doing things and then go with the flow when one gets decided on. Most of all they need to be keen to learn something every day. You don't need to test for this - it's kind of obvious. In fact, if you start with the right people, the rest will take care of itself, because as the saying goes "A's hire A's and B's hire C's". So the main objective initially is simply to avoid the B's and the C's.

Tools and methods?

Oh shit. You want me to tell you about those too? Honestly, all I can say is that the right answer to pretty much every question you could ever ask about whether to use a tool or a method, or how to best use one you've chosen, is the same: "it depends".

That's the problem with a book: I can't ask you questions.

But here's the thing. That team you hired? They can. Talk to them and, trust me, everything else will be gravy.

Or the The Secret Sauce. Whatever.

You think Prentice Hall would publish that? Have you seen how big their books are? The O'Reilly In-A-Nutshell version would be a business card.

So there's no real secret sauce. Or rather there is a secret sauce, but it's pretty much just the people you hire. And you can't put that in a book because you'd have to first ask the reader whether they were an A or a B. And if they were a B you'd have to give them a refund or say "hire people way smarter that you, yah big galoot".

Unfortunately you can't deconstruct the secret sauce either because, as Po's Dad in Kung Fu Panda made clear "there is no secret ingredient". Each team will come up with its own recipe. Some of those ingredients will feel like they are special, and maybe a little secret, but that's a product of the people choosing it, not a property of the ingredient.

Is anyone else getting hungry?

I work in architecture. There are plenty of times I wish I didn't. But I go on doing it because I believe, despite the very many flaws in its real-world execution, it's still one of the best vehicles most companies have to do good long-term things with their software.

Enterprise software delivered well means building just enough to cover what you absolutely need, which keeps complexity down to a minimum. Good designs continue this theme. They provide flexibility, partly because there's less stuff to change, but mostly because the moving parts are isolated in ways that prevent change creating ripples through the system. Architecture folk (rather than say developers on a project) have the golden opportunity to conceive of ways to make this real because, like the business itself, they exist above and beyond any one technical initiative subject to the naturally limiting constraints of budget and time. To understand the business potential that good architecture can deliver one only needs to look at organisations that do it well - modern internet businesses. It is true that they had a big advantage in that they had no legacy to deal with, and generally they are small in comparison to corporate enterprises, but Amazon isn't small and appears to deal with more than ten years of legacy development without hindering business growth.

Reduced complexity plus flexibility is competitive advantage, i.e. if your competitors don't have an architecture with these features then you have something over them. Having a function whose role it is to get architecture right should be a no-brainer and sure enough most companies, above a few hundred employees, seem to have some sort of enterprise architecture practice.

What's kind of scary is that the majority of these companies also have a pretty crappy architecture.

So I suppose it's no surprise that Enterprise Architecture has seen more than average levels of criticism over the years. In 2009 even the British Computer Society asked "Whither Enterprise Architecture?" and a Linked In Discussion - "Is Enterprise Architecture Dying?" couldn't find an Enterprise Architect to disagree with the idea that EA is fundamentally shuffling off this mortal coil.

The criticism is unquestionably valid - if a corporation has both an architecture team and a crappy architecture it has an untenable situation. Something will change. Either the architecture will be made less crappy or the team will be displaced. If there's an area that needs a little secret sauce it's architecture. Architects often point to lack of budget and/or control for the crappiness that surrounds them: there's no funding to do it right and no power to fix projects that are doing the wrong thing.

I submit that both of these notions are false. Firstly, investment has nothing to do with quality. Another day I will expand on this but there's a good argument to say that the more you spend on software products the less (per monetary unit) you actually get in terms of delivered business value. Secondly, good architecture has nothing to do with control. It may come as a surprise to many but architecture practices, particularly governance, are directly responsible for a lot of the crappiness architects complain about. Yes. That's what I am saying - it's not that an architecture practice can be merely ineffective in some benign nice-but-useless fashion, architectural activities may actually be making a bad situation worse.

Let me explain how. You may notice that I mix up enterprise architecture, solution architecture and design here - it's deliberate. The job title is unimportant. What I want to do is make a distinction between technical people who should help developers deliver value and the development teams themselves who, ideally, would just happily hack away, making the value-delivering product.

An All Too Common Story

Typically, change starts with an idea. As that idea is discussed and elaborated it gathers detail. If architects are involved in the conversations this detail begins to include decisions on things like technology approaches, systems to be reused, information flows, patterns, products to be licensed, and so on. We call this detail 'design' (or, more ominously, 'the blueprint'). Early design work is there, to some extent, to give stakeholders confidence.

But this confidence is false. In the early stage of a project, many aspects of process, detail, and design are in fact constraints. Constraints that will hamper the development team when they come to build the solution - in the form of tools (or dependencies) that are not fit for purpose, patterns that do not allow for requirements to change, and so on. Essentially, the development team gets saddled with an architecture that is unable to emerge gracefully as more detail is known and piles of documentation describing this inflexible tower of dung that must be kept up to date. Add architecture governance to the mix and you have the perfect recipe for flapdoodle - enforcing the constraints that caused the problem, slowing everything down, pissing everyone off (regional variations of this dish include large meetings, emails with a lot of cc'ing, and extra helpings of that documentation mentioned earlier).

Eventually business stakeholders lose their misplaced confidence. This commonly occurs during the test phase when the end-date becomes more and more indeterminate. The build took longer than expected, which creates pressure to deliver more quickly, adding short-cuts, complexity and defects. Testing time is cut. Defects that are found are fixed too quickly so have a habit of introducing more defects. If the project does ever go live, it will do so with a great deal of design debt and overall the landscape and the relationship with the business is made worse, not better.

An All Too Common Response

Things are worse. The strategy says to make things better, simpler. Clearly nobody followed the strategy. Oh and did I mention the business think the IT department is retarded? The Enterprise Architects do some soul searching. How do we get confidence? How can we make sure we know what we're doing so that the business don't think we're just badly-dressed chimps? Need .. more .. confidence. Need. It. Earlier. Need ..... more ... process. More. Design. More control. More Guuuuvernance.

Is Anyone Seeing a Circle?

Yes. More design, governance, and general bureaucracy, ironically makes it less likely that subsequent projects will be fit for purpose. In CIO-speak this equates to more investment required for future change, higher TCO, more downtime, poorer reliability.

The Fifth Discipline

In 1990 Peter Senge published a book entitled "The Fifth Discipline: The Art and Practice of the Learning Organization". In it he adds to the four disciplines that healthy organisations need to adopt - team work, a shared organisational vision, a shared employee mental model and an environment that empowers personal mastery - a fifth discipline: Systems Thinking. You can find a good summary on the Edinburgh University MEAB web site.

The cornerstone of any learning organisation is the fifth discipline - systems thinking. This is the ability to see the bigger picture, to look at the interrelationships of a system as opposed to simple cause-effect chains; allowing continuous processes to be studied rather than single snapshots. The fifth discipline shows us that the essential properties of a system are not determined by the sum of its parts but by the process of interactions between those parts.

Sound a bit like what Enterprise Architecture is trying to achieve?

The interesting thing for me is that Senge goes on to define some laws that govern the fifth discipline. Laws that act as a useful warning to architects who find themselves cloistered in their ivory towers work-shopping ideas on how to gain more control over complexity. Here are two:

I mention Senge's Systems Thinking because, although it's difficult to accept that complexity is a by-product of flaws in the delivery process (too much arbitrary detail up-front and too much bureaucracy), it should be obvious that good enterprise architects can bring an enormous amount of value to projects, not via control but as a client representative for a vision of something. A vision that incorporates all the moving parts of the business problem and the "ability to see the bigger picture".

Control (and measuring and governance) is irrelevant. If I came up with my best shot at solving the business problem with Design A early on and the development team (with their unique insight into the most detailed level of the problem space) come up with Design B, that has twice the amount super-awesome, do I really want to control them towards Design A? Is anyone controlling anyone or is it just better to use the vision as a sounding board?

Now, it occurs to me that I have used vision a few times in the last couple of paragraphs. I get a bit twitchy whenever people use that word because it often indicates a lengthy speech is coming up derived mostly of bollocks. Let's talk specifics.

The Agile Webscale Architect (2.0)

One thing we must all surely have learned by now is that everything changes. Ten years of agile development experience has given us a way to deal with this - making decisions at the Last Responsible Moment. We are always better off delaying important decisions until the last responsible moment, that is to say late enough that we have the richest set of facts possible to help us make the best decision and yet early enough that's there's still an effective decision to be made.

Up-front architecture design (that is then governed) is making decisions at the Earliest Irresponsible Moment and that's not just wasteful it's arrogant - as Jeremy Miller points out in Leaky Abstractions and the Last Responsible Moment for Design:

"Architect Hubris" is the belief that the architect(s) can design ... an application framework upfront that will reduce the remaining development to a mere exercise in configuration

And another thing. We have a word for doing all the work for one aspect of delivery in sequential steps - waterfall. Too much work (on anything) too early leads to phasing - a requirements phase, a design phase, a build phase, a test phase. The major problem with phased software engineering is the 'more work now and more work later' overhead. When clarity emerges about something decided upon in an earlier phase, the more collateral there is to update and maintain, the more effort there is in communicating the changes, the more likely we are to deliver late, and the more likely we are to deliver unintended complexity.

Techniques such as those in the XP stable of thought have proven the value of gathering requirements (stories), building, integrating and testing continuously rather than in phases. Small units of work (sprints) comprise all these activities happening together (some in preparation for subsequent sprints) with a functionally-light, but technically sound, deliverable at the end of each sprint.

I'm not saying XP is perfect but it does represent a mature collection of practices that go a long way to making the unavoidable issues of software engineering (e.g. people always want more than can be delivered in the time available) transparent and obvious early, and the baggage that comes with waterfall reduced to within manageable tolerances - both of which leave time to focus on the value-adding stuff like agreeing what should be done and delivering working software.

Not a lot of room for a traditional EA to show up with his blueprint, governance clipboard and pen.

So the challenge is: get good architecture that does the kind of things we've been talking about to come out the other end, without control, without governance and with only a light touch idea of a blueprint (basically enough to get started).

Good Architecture without Governance

The Enterprise Architect and the Change of Mindset

Notes

  1. The Secret Sauce is a bit of an over used metaphor, but as I was talking Noodle Soup last time it seemed to fit. Incidentally, I found The Secret Sauce of Highly Productive Software Development on InfoQ quite interesting when I was researching just how widespread the phrase is.

  2. The idea for this piece was sown during a conversation with Thomas Moore (his tweet feed is locked but it's worth asking to join his retinue: he does a good line in dramatic weather reports) to generate some ideas to create a logical narrative to help Seb Chakraborty put together some slides for a Gartner talk.

  3. The saying "A's hire A's; B's hire C's" has been around for a while. I tried to track down where it originated, but it has so many variants I couldn't pin one source down. Donald Rumsfeld, apparently, said it but I think we can be fairly sure he never made it up (that feels to me like a known-known). My best guess is it originated in Apple. This is implied by Guy Kawasaki.

  4. If you want to read more about the fifth disciple and how it relates to software development "11 Laws of The System Thinking in Software Development" by Andriy Solovey covers it quite nicely.

  5. The painting is an excerpt from "The Marvelous Sauce" circa 1890, by Jehan Georges Vibert.