GOTO Amsterdam started with a retrospective on Java, and ended with the admonition that even Waterfall was an advancement in its time. The conference encouraged building on the past, renewing and adding for growth.
As our bodies renew themselves, replacing cells so we're never quite the same organism; so our software wants renewal and gradual improvement, small frequent changes, all the way out to deployment. Chad Fowler reports that the average uptime of a node at Wunderkind is in hours, and he'd like to make it shorter. Code modules are small, data is small, and servers are small. Components fail and the whole continues. Don't optimize the time between failures: optimize the time to recovery. And monitor! Testing helps us develop with confidence, but monitoring lets us deploy with confidence.
At Etsy as well, changes are small and deployments frequent. Bits of features are deployed to production before they're ever activated. Then they're activated gradually, a separate process from deployment, and carefully monitored. Etsy has one giant monolithic PHP app, and yet they've achieved 50/day deployments with great uptime. Monitoring removes fear: "It's not about how often you deploy your app. It's do you feel comfortable deploying from trunk, right now?"
That doesn't happen all at once. It builds up through careful tooling and through careful consideration of each production outage, in post-mortems where everyone listens and root causes are investigated to levels impossible in a blame-assigning culture. Linda Rising said, "The real problem in our organizations is nobody wants to talk about how we might be doing things wrong." At Etsy, they talk about failure.
Even as we're deploying small changes and gradually improving our code, there's another way our code can renew and grow: the platform underneath. Georges Saab told us part of the magic of Java, the way the JIT compiler team works with the people creating the latest hardware. By the time that hardware is released, the JVM is optimized for the latest improvements. Even beyond the platform, Java developers moved the industry away from build-it-yourself toward finding an open-source solution, building on the coding and testing and design efforts of others. And if we update those libraries, they're renewing as well. We are not doing this alone.
And now in Java 8, there are even more opportunities for library-level optimization, as Stream processing raises the level of abstraction, letting us declare our intentions with a lambda expression instead of specifying the steps. Tell the language what you want it to do, not how, and it can optimize. Dan North used this technique back when he invented DevOps (I'm mostly kidding): look at the outcome you want, and ask how to get there. The steps you've used before are clues, not the plan.
Yet be careful with higher levels of abstraction: Horia Dragomir reminded us this can also hurt performance. This happens when the same code
compiles for Android and iPhone. There's a Japanese concept called bokeh (pronounced like bouquet) of blurring parts of an image to bring others into focus. Abstraction can do that for us, if we're careful as the photographer.
In the closing keynote, Linda Rising reminded us, to our chagrin: people don't make decisions based on data. We make decisions based on stories. What stories are we telling ourselves and each other? Do our processes really work? There aren't empirical studies about our precise situation. The best we can do is to keep trying new tweaks and different methods, and find out what works for us. Like a baby putting everything in their mouth.
We can acquire more data, and choose to use this for better decisions. At Etsy every feature implementation comes with monitoring: How will you know it's working? How will you know if it breaks? Each feature has a dashboard. And then in the post-mortems, a person can learn "how immensely hard it is to fight biases." If we discard blame, we can reveal our mistakes, and build on each others' experiences.
Overcome fear: experience the worst-case scenario. Keep changing our code, and ourselves: "As a person, if you can't change, you might as well be dead." It's OK to be wrong, when you don't keep being wrong.
As Horia said, "You're there, you're on the shoulders of giants. You need to do your own thing now. Add your own twist."
This post based on talks by Linda Rising, Chad Fowler, Georges Saab and Paul Sandos, Horia Dragomir, Daniel Schauenberg; conversations with Silvana Wasitova and Kevlin Henney, all at GOTO Amsterdam 2014. Some of these may be online eventually