Craft conference was all about microservices this year. Yet, it was about so much more at the same time -- even when it was talking about microservices.
|lobby of the venue. Very cool, and always packed|
But it was Mary Poppendieck, in her Friday morning keynote, who showed us why microservices aren't going away, not any more than the internet is going away. This is how systems grow: through federation and wide participation. (I wish "federated system" wasn't taken by some 1990s architecture; I like it better than "microservices.") Our job is no longer to control everything all the computers do, to make it perfectly predictable.[a]
Instead, we need to adapt to the sociotechnical system around us and our code. No one person in can understand all the consequences of their decision, according to Michael Nygard. We can't SMASH our will upon a complex system, Mary says, but we can poke-poke-poke it; see how it responds; and adjust it to our purposes.
What fun is this?? I went into programming because physics became unsatisfying once I hit quantum mechanics, and I couldn't know everything all at once anymore. Now I'm fascinated by systems; to work with a system is to be part of something bigger than me, bigger than my own mental model. This is going to be a tough transition for many programmers, though. We spent our training time learning to control computers, and now we are exhorted to give up control, to experiment instead.
And worse: as developers must adapt, so must our businesses. In the closing keynote, Marty Cagan made it very clear that our current model is broken. When most ideas come from executives, implemented according to the roadmap, it doesn't matter how efficient our agile teams are: we're wasting our time. Most ideas fail to make money. And the ones that do make money usually take far longer than expected. He ridicules the business case: "How much revenue will it generate? How much will it cost?" We don't know, and we don't know! Instead of measuring the impact of an idea after months of development, product teams need to measure in hours or days. And instead of a few ideas from upper management, we need to try out many ideas from the most fruitful source: developers. Because we're most in the position to see what has just become possible.
|Exterior of the venue! (after the tent is down.)|
Ideas come from having our heads up, not buried only in the code. They come from the first objective of software architecture: understanding the business problem. They come from handing teams an objective, NOT a roadmap. Marty Cagan made that point very clear. Adrian Trenaman concurred, describing how Gilt teams went from a single IT to a team per line of business to a team per initiative. It is about results, measured outcomes.
All these measurements, of results, of expectations, of production service activity, come down to my favorite question - "How do we know what we know?"[b] Property-based (aka generative) testing is experiencing a resurgence (maybe its first major surgence) lately, as black-box testing around service-level components. In my solo talk, I proposed a possible design for lowering the risk around interacting components. Mary had some other ideas in her talk too, which I will check out. Considering properties of a service can help us find the seams that align simplicity with options.
Mike Nygard remarked that the most successful microservices implementations he's seen started as a monolith, where refactoring identified those seams. There's nothing wrong with a monolith when that supports the business objectives; Randy Shoup said that microservices solve scaling problems, not business problems. Mike and Adrian both pointed out that a target architecture is not a revolution, but an evolving direction. Architecture is like a city: as we build microservices in the new, hip part of town, those legacy tenements are still useful. The architecture is done only when the company goes out of business. Instead of working to a central plan, we want to develop situational awareness ("knowing what's happening in time to do something about it"), and choose to work on what's most important right now.
It isn't enough to be good at coding anymore. The new "full-stack" is from network to customer. Marty: if your developers are only coding, you're not getting half their value. I want to do heads-up development. "Software Craftsmanship is less about internal efficiency, and more about engaging with the world around us," says Alf Rehn. "Creators need an immediate connection to what they are creating," quotes Mary Poppendieck.
As fun as it is to pop the next story off the roadmap and sit down and code it, we can have more impact. We can look up, as developers, as organizations. We can look at results, not requirements. We can learn from consequences, as well as conferences.
This transition won't be easy. It's the next step after agile. Microservices are a symptom of this kind of focus, the way good retrospectives are associated with constant improvement. Sure, it's all about microservices - in that microservices are about reducing friction and lowering risk. The faster we can learn, the farther we can get.
I'll add the links as Gergely posts the videos.
 Maciej was starting to get bored
 my keynote with Dan, "Complexity is Outside the Code"
 Mary Poppendieck's keynote, "The New New Software Development Game"
[a] Viktor Klang: "Writing software that is completely deterministic is nonsense because no machine is completely deterministic," much less the network.
 Mike Nygard's talk, "Architecture Without an End State"
 Marty's keynote
 Alf Rehn (ah! what a beautiful speaker! such rhythm!) keynote. Maybe he didn't allow recording?
 Pieter's talk
 Adrian's talk, "Scaling Micro-services at Gilt"
[b] OK my real favorite question is "What is your favorite color?" but this is a deep second.
 Randy's talk, "From the Monolith to Microservices"
 my talk, "Contracts in Clojure: a compromise between types and tests"