<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Feed]]></title><description><![CDATA[IBMer, Java Champion, occasional maker and regular speaker.]]></description><link>http://hollycummins.com</link><generator>GatsbyJS</generator><lastBuildDate>Fri, 08 May 2026 15:25:46 GMT</lastBuildDate><item><title><![CDATA[Six and a half ridiculous things to do with Quarkus]]></title><description><![CDATA[Let’s abuse the tools! Everyone knows Quarkus is computationally efficient, expressive, and rock-solid for production.
But did you know that…]]></description><link>http://hollycummins.com/quarkus-ridiculous-things-devoxx-poland/</link><guid isPermaLink="false">http://hollycummins.com/quarkus-ridiculous-things-devoxx-poland/</guid><pubDate>Wed, 17 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Let’s abuse the tools! Everyone knows Quarkus is computationally efficient, expressive, and rock-solid for production.
But did you know that we can use Quarkus efficiency to build applications that shouldn’t go anywhere &lt;em&gt;near&lt;/em&gt; production?
In this demo-driven session, Holly will put the joy into “developer joy”. She’ll show you all sorts of things you can do
with Quarkus that you probably shouldn’t:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Build an LLM-powered app that’s &lt;em&gt;guaranteed&lt;/em&gt; to hallucinate, because you can do more than you think with guardrails,
and truth is so boring&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Write your business code in rockstarlang, because everything should be a hair metal ballad&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use Minecraft as your observability client, because the LGTM stack doesn’t have enough explosions&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Write a CLI for generating memes faster, because everything is better on the command-line&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Benchmark an application against a grapefruit, because metric units aren’t tasty&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Business value? Learning? If you insist. As well as absurd demos, you’ll leave this session with a deeper understanding
of how to get the most out of Quarkus and Java. There will be new Java 25 language features, Quarkus best practices,
powerful integrations, and nifty use cases alongside the silly explosions and grapefruit.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[When benchmarks go bad - what I learned from measuring performance wrong]]></title><description><![CDATA[The world of performance analysis is littered with flawed claims, cognitive biases, dangerous intuitions, and beguiling
fallacies. Sadly…]]></description><link>http://hollycummins.com/when-benchmarks-go-bad/</link><guid isPermaLink="false">http://hollycummins.com/when-benchmarks-go-bad/</guid><pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The world of performance analysis is littered with flawed claims, cognitive biases, dangerous intuitions, and beguiling
fallacies. Sadly, Holly has been guilty of all of the above! Repeatedly. But this is a no-judgement zone. Some
measurement anti-patterns are subtle, and some are downright counter-intuitive. In this talk, Holly will explain why
measuring performance is important, and talk through some of the ways it can go wrong. That would be depressing if that
was all there was, so she’ll also introduce a toolbox of questions and principles that you can use to improve the
performance of your own applications.&lt;/p&gt;
&lt;p&gt;These include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;How to set up a test system&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Recommended load generators&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The USE method&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title><![CDATA[Things You Thought You Didn’t Need To Care About That Have a Big Impact On Your Job]]></title><description><![CDATA[Development is about working with computers, right? Well, not quite. Development is all about working with computers (
easy), and working…]]></description><link>http://hollycummins.com/things-to-care-about-agile-manchester/</link><guid isPermaLink="false">http://hollycummins.com/things-to-care-about-agile-manchester/</guid><pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Development is about working with computers, right? Well, not quite. Development is all about working with computers (
easy), and working with people (hard). Oh, and it’s about physics. Things like the speed of light and thermodynamics
influence APIs, because they influence hardware and networking. If, like Holly, you slept through statistics modules in
university, it will be a surprise to discover how statistics has changed our development workflows. Finally, we mustn’t
forget economics. The end of zero-interest-rates has changed the employment landscape for many of us. In this
wide-ranging talk, Holly will cover why the end of Moore’s law means we might finally need to get to grips with
concurrent programming, why is Loom a good idea now when green threads were a bad idea, why is AOT a good idea now when
it used to be a bad idea, and how much you should care about business studies, finance, and statistics.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Five (and a half) Cool Things You Can Do With Quarkus]]></title><description><![CDATA[Save the world. Lightning-quick CLIs. Embed WASM. Run Spring code. AI, for real. 5½. Use Minecraft as an observability client. Ok, this one…]]></description><link>http://hollycummins.com/quarkus-cool-things-devoxxuk/</link><guid isPermaLink="false">http://hollycummins.com/quarkus-cool-things-devoxxuk/</guid><pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;ol&gt;
&lt;li&gt;Save the world.&lt;/li&gt;
&lt;li&gt;Lightning-quick CLIs.&lt;/li&gt;
&lt;li&gt;Embed WASM.&lt;/li&gt;
&lt;li&gt;Run Spring code.&lt;/li&gt;
&lt;li&gt;AI, for real.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;5½. Use Minecraft as an observability client. Ok, this one isn’t cool, it’s stupid, but Holly’s
done it anyway.&lt;/p&gt;
&lt;p&gt;In this demo-driven session, Holly will show some of her favorite Quarkus capabilities. Some are established and
important, some are less well-known, and some are plain silly. But they’re all cool. Whether you’re new to Quarkus or an
experienced user, you’ll discover something you didn’t know.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[When benchmarks go bad - what I learned from measuring performance wrong]]></title><description><![CDATA[The world of performance analysis is littered with flawed claims, cognitive biases, dangerous intuitions, and beguiling
fallacies. Sadly…]]></description><link>http://hollycummins.com/when-benchmarks-go-bad/</link><guid isPermaLink="false">http://hollycummins.com/when-benchmarks-go-bad/</guid><pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The world of performance analysis is littered with flawed claims, cognitive biases, dangerous intuitions, and beguiling
fallacies. Sadly, Holly has been guilty of all of the above! Repeatedly. But this is a no-judgement zone. Some
measurement anti-patterns are subtle, and some are downright counter-intuitive. In this talk, Holly will explain why
measuring performance is important, and talk through some of the ways it can go wrong. That would be depressing if that
was all there was, so she’ll also introduce a toolbox of questions and principles that you can use to improve the
performance of your own applications.&lt;/p&gt;
&lt;p&gt;These include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;How to set up a test system&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Recommended load generators&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The USE method&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title><![CDATA[Kodsnack 701 - The chicken would explode]]></title><description><![CDATA[Fredrik chats to Holly Cummins about using Minecraft for observability, other amazing Quarkus tricks, and the value of
joy at work. Recorded…]]></description><link>http://hollycummins.com/kodsnack-701/</link><guid isPermaLink="false">http://hollycummins.com/kodsnack-701/</guid><pubDate>Tue, 05 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Fredrik chats to Holly Cummins about using Minecraft for observability, other amazing Quarkus tricks, and the value of
joy at work.&lt;/p&gt;
&lt;p&gt;Recorded during Øredev 2025.&lt;/p&gt;
&lt;p&gt;Thank you Cloudnet for sponsoring our VPS!&lt;/p&gt;
&lt;p&gt;Comments, questions or tips? We a re @kodsnack, @tobiashieta, @oferlund and @bjoreman on Twitter, have a page on
Facebook and can be emailed at &lt;a href=&quot;mailto:info@kodsnack.se&quot;&gt;info@kodsnack.se&lt;/a&gt; if you want to write longer. We read everything we receive.
If you enjoy Kodsnack we would love a review in iTunes!&lt;/p&gt;</content:encoded></item><item><title><![CDATA[We're Gonna Build a Benchmark – Lyrics]]></title><description><![CDATA[I was inspired by Dylan Beattie’s “We’re Gonna Build a Framework” (go
watch it, it’s so good!) to make a song called “We’re Gonna Build a…]]></description><link>http://hollycummins.com/were-gonna-build-a-benchmark/</link><guid isPermaLink="false">http://hollycummins.com/were-gonna-build-a-benchmark/</guid><pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I was inspired by Dylan Beattie’s &lt;a href=&quot;https://dylanbeattie.net/songs/framework.html&quot;&gt;“We’re Gonna Build a Framework”&lt;/a&gt; (go
watch it, it’s so good!) to make a song called “We’re Gonna Build a Benchmark”. (Dylan was of course, himself, riffing
on Billy Joel’s “We Didn’t Start the Fire,” but I think I’ve listened to Dylan’s version more than Billy Joel’s, so
Dylan’s are the lyrics I hear in my head.) Sadly, I lack Dylan’s musical talent, so I had to use Suno for the music
production. It’s not all cheating, because I wrote the lyrics myself.&lt;/p&gt;
&lt;p&gt;The rendered song is &lt;a href=&quot;https://suno.com/s/1rXurHspQYwYlest_&quot;&gt;here, on Suno&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Lyrics&lt;/h2&gt;
&lt;p&gt;Throughput, build time,
RSS should be fine
Latency, P99
Warmups, ready line
RAPL, energy
CPU, wrong frequency&lt;/p&gt;
&lt;p&gt;Cold start, Hot cache,
Page fault, disk thrash
Sync cost, lock-free
For latency
Soft swap, core crash
Queue depth, load smash
Profile, flame graph&lt;/p&gt;
&lt;p&gt;We’re gonna build a benchmark
‘cos we wanna use one, but don’t wanna choose one,
We’re gonna build a benchmark
‘cos we wanna use one, but don’t wanna choose one,&lt;/p&gt;
&lt;p&gt;Heap size, lazy threads
Pool size bikesheds
Metrics, tracing,
Otel excess
Pinned cores
Sync chores
Twist the knob,
NUMA on the floor&lt;/p&gt;
&lt;p&gt;I/O bound, rebound
scores on the ground
numbers are not sound
Cache pop, head drop,
Works on my machine,
is it really clean?&lt;/p&gt;
&lt;p&gt;Change one little flag
Watch the numbers sag
Tune, run, tweak, repeat
Share the test and shriek
Read rows, write rows
Stale container woes
CPU GPU, what else do I have to say?&lt;/p&gt;
&lt;p&gt;Wrk2, hyperfoil,
Cache hit, slashdot
Mutex, deadlock
A/B, baby,
Share the code,
Why’s it slow in this mode?
Data, state-a, I can’t take it anymore&lt;/p&gt;
&lt;p&gt;We’re gonna build a benchmark
‘cos we wanna use one, but don’t wanna choose one,
We’re gonna build a benchmark
‘cos we wanna use one, but don’t wanna choose one.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Things You Thought You Didn’t Need To Care About That Have a Big Impact On Your Job]]></title><description><![CDATA[Development is about working with computers, right? Well, not quite. Development is all about working with computers (
easy), and working…]]></description><link>http://hollycummins.com/things-to-care-about-devoxx-greece/</link><guid isPermaLink="false">http://hollycummins.com/things-to-care-about-devoxx-greece/</guid><pubDate>Fri, 24 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Development is about working with computers, right? Well, not quite. Development is all about working with computers (
easy), and working with people (hard). Oh, and it’s about physics. Things like the speed of light and thermodynamics
influence APIs, because they influence hardware and networking. If, like Holly, you slept through statistics modules in
university, it will be a surprise to discover how statistics has changed our development workflows. Finally, we mustn’t
forget economics. The end of zero-interest-rates has changed the employment landscape for many of us. In this
wide-ranging talk, Holly will cover why the end of Moore’s law means we might finally need to get to grips with
concurrent programming, why is Loom a good idea now when green threads were a bad idea, why is AOT a good idea now when
it used to be a bad idea, and how much you should care about business studies, finance, and statistics.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[How We Benchmarked Quarkus: Patterns and anti-patterns]]></title><description><![CDATA[Holly, Eric, and Franz discuss some of the lessons learned in creating the new Quarkus benchmark suite.]]></description><link>http://hollycummins.com/how-we-benchmarked-quarkus/</link><guid isPermaLink="false">http://hollycummins.com/how-we-benchmarked-quarkus/</guid><pubDate>Mon, 20 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Holly, Eric, and Franz discuss some of the lessons learned in creating the new Quarkus benchmark suite.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Java and Web – airhacks.fm podcast with Adam Bien]]></title><link>http://hollycummins.com/airhacks-fm-2/</link><guid isPermaLink="false">http://hollycummins.com/airhacks-fm-2/</guid><pubDate>Mon, 13 Apr 2026 00:00:00 GMT</pubDate><content:encoded></content:encoded></item><item><title><![CDATA[Six and a half ridiculous things to do with Quarkus]]></title><description><![CDATA[Let’s abuse the tools! Everyone knows Quarkus is computationally efficient, expressive, and rock-solid for production.
But did you know that…]]></description><link>http://hollycummins.com/quarkus-ridiculous-things-voxxed-amsterdam/</link><guid isPermaLink="false">http://hollycummins.com/quarkus-ridiculous-things-voxxed-amsterdam/</guid><pubDate>Wed, 01 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Let’s abuse the tools! Everyone knows Quarkus is computationally efficient, expressive, and rock-solid for production.
But did you know that we can use Quarkus efficiency to build applications that shouldn’t go anywhere &lt;em&gt;near&lt;/em&gt; production?
In this demo-driven session, Holly will put the joy into “developer joy”. She’ll show you all sorts of things you can do
with Quarkus that you probably shouldn’t:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Build an LLM-powered app that’s &lt;em&gt;guaranteed&lt;/em&gt; to hallucinate, because you can do more than you think with guardrails,
and truth is so boring&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Write your business code in rockstarlang, because everything should be a hair metal ballad&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use Minecraft as your observability client, because the LGTM stack doesn’t have enough explosions&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Write a CLI for generating memes faster, because everything is better on the command-line&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Benchmark an application against a grapefruit, because metric units aren’t tasty&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Business value? Learning? If you insist. As well as absurd demos, you’ll leave this session with a deeper understanding
of how to get the most out of Quarkus and Java. There will be new Java 25 language features, Quarkus best practices,
powerful integrations, and nifty use cases alongside the silly explosions and grapefruit.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Things You Thought You Didn’t Need To Care About That Have a Big Impact On Your Job]]></title><description><![CDATA[Development is about working with computers, right? Well, not quite. Development is all about working with computers (
easy), and working…]]></description><link>http://hollycummins.com/things-to-care-about-utrecht-jug/</link><guid isPermaLink="false">http://hollycummins.com/things-to-care-about-utrecht-jug/</guid><pubDate>Tue, 31 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Development is about working with computers, right? Well, not quite. Development is all about working with computers (
easy), and working with people (hard). Oh, and it’s about physics. Things like the speed of light and thermodynamics
influence APIs, because they influence hardware and networking. If, like Holly, you slept through statistics modules in
university, it will be a surprise to discover how statistics has changed our development workflows. Finally, we mustn’t
forget economics. The end of zero-interest-rates has changed the employment landscape for many of us. In this
wide-ranging talk, Holly will cover why the end of Moore’s law means we might finally need to get to grips with
concurrent programming, why is Loom a good idea now when green threads were a bad idea, why is AOT a good idea now when
it used to be a bad idea, and how much you should care about business studies, finance, and statistics.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Fixing The Open Source Bus Number]]></title><description><![CDATA[Open source is a marvellous multiplier which amplifies our collective productivity by allowing us to code on the
shoulders of giants. It has…]]></description><link>http://hollycummins.com/monkigras-bus-factor/</link><guid isPermaLink="false">http://hollycummins.com/monkigras-bus-factor/</guid><pubDate>Thu, 19 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Open source is a marvellous multiplier which amplifies our collective productivity by allowing us to code on the
shoulders of giants. It has clear benefits for business continuity.&lt;/p&gt;
&lt;p&gt;But things can go wrong. Many critical projects have just one or two maintainers (we’ve all seen the xkcd cartoon about
modern digital infrastructure, haven’t we?). Sometimes those maintainers no longer have time, or burn out. At the other
end of the spectrum, even projects with many active contributors can grind to a halt with the contributors all work for
the same employer, and that employer changes their business priorities. Investment can dry up or the licence can change.
After all, the business environment for open source is tough these days.&lt;/p&gt;
&lt;p&gt;What can be done?&lt;/p&gt;
&lt;p&gt;The classic solution for increasing a team’s bus number is to use pair programming to share knowledge. In the
asynchronous and distributed world of open source, pair programming can work, but it’s harder – and it can’t fix
changing business realities or hostile licence changes.&lt;/p&gt;
&lt;p&gt;This talk will discuss some of the strategies used by the Quarkus team to help ensure our open source community is
prepared … for almost anything. These include&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Using GitHub organisations to allow independent contributions with a ‘safety’ backup if maintainers disappear&lt;/li&gt;
&lt;li&gt;Productising dependencies so that anything in the stack can be rebuilt to address vulnerabilities; this helps with
security, and also helps with investment&lt;/li&gt;
&lt;li&gt;Joining the Commonhaus foundation to ensure Quarkus can’t ever be owned by a single company&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Some of these have been easy, some have been tough (the logistics of moving to a foundation are not for the
faint-hearted). In this talk, Holly and Sanne will reflect on what’s worked well, what’s transferrable, and how all of
us can be prepared for the future of open source.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The free-lunch guide to idea circularity]]></title><description><![CDATA[Why do the same ideas keep coming round again, and again? Why is it that sometimes an idea sticks, and sometimes it just
fades away? Why is…]]></description><link>http://hollycummins.com/idea-circularity-qcon/</link><guid isPermaLink="false">http://hollycummins.com/idea-circularity-qcon/</guid><pubDate>Wed, 18 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Why do the same ideas keep coming round again, and again? Why is it that sometimes an idea sticks, and sometimes it just
fades away? Why is it that no technology, or pattern, or method, is ever quite as good as we’re told it’s going to be?
Why are we working harder, even though AI is supposed to be doing the work for us? Is debt inevitable? How do external
factors influence the day-to-day reality of our jobs? In this wide-ranging session, Holly will discuss interest rates,
ahead-of-time compilation, how venture capital works, why our codebases might be feeling the AI hangover, and the future
of developer jobs.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Developer Journey: Accelerating Developer Productivity]]></title><description><![CDATA[In 2026, we’ve learned not to measure developer productivity by lines of code. What actually matters is the velocity of
the “inner loop”
and…]]></description><link>http://hollycummins.com/techcon-developer-productivity/</link><guid isPermaLink="false">http://hollycummins.com/techcon-developer-productivity/</guid><pubDate>Tue, 17 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In 2026, we’ve learned not to measure developer productivity by lines of code. What actually matters is the velocity of
the “inner loop”
and getting to production. Agentic AI and hyper-distributed deployment topologies solve many problems, but developers
still face many of the same frictions – cognitive overload, code overload, and configuration overload. This session
mixes a high level strategic overview of the modern developer journey with live demos of how IBM’s modern frameworks
bring the developer joy&lt;/p&gt;
&lt;p&gt;It will cover:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Why developer productivity is about more than outputs&lt;/li&gt;
&lt;li&gt;Standard First Architecture: Why relying on Jakarta EE and MicroProfile creates portable, future-proof systems.&lt;/li&gt;
&lt;li&gt;Observability by Design: Moving beyond simple logging to a standardized telemetry approach that provides instant
feedback.&lt;/li&gt;
&lt;li&gt;How to identify and eliminate “toil” in your specific development lifecycle.&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title><![CDATA[Quarkus has great performance – and we have new evidence]]></title><description><![CDATA[Quarkus: Supersonic Subatomic Java]]></description><link>http://hollycummins.com/new-benchmarks/</link><guid isPermaLink="false">http://hollycummins.com/new-benchmarks/</guid><pubDate>Mon, 02 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Quarkus: Supersonic Subatomic Java&lt;/p&gt;</content:encoded></item><item><title><![CDATA[From Quantum Physics to Quarkus – airhacks.fm podcast with Adam Bien]]></title><link>http://hollycummins.com/airhacks-fm-1/</link><guid isPermaLink="false">http://hollycummins.com/airhacks-fm-1/</guid><pubDate>Thu, 26 Feb 2026 00:00:00 GMT</pubDate><content:encoded></content:encoded></item><item><title><![CDATA[Security & DevEx: Can We Have Both? • Abby Bangser, Adrian Mouat & Holly Cummins • GOTO 2025]]></title><description><![CDATA[This interview was recorded at GOTO Copenhagen 2025. #GOTOcon #GOTOcphhttps://gotocph.comAbby Bangser - Platform
Engineering Insights from…]]></description><link>http://hollycummins.com/security-devex/</link><guid isPermaLink="false">http://hollycummins.com/security-devex/</guid><pubDate>Wed, 11 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This interview was recorded at GOTO Copenhagen 2025. #GOTOcon #GOTOcphhttps://gotocph.comAbby Bangser - Platform
Engineering Insights from Syntasso deliverin…&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Quarkus in Action • GOTO Book Club]]></title><description><![CDATA[This interview was recorded for the GOTO Book Club.http://gotopia.tech/bookclub Check out more here:https://gotopia.tech/episodes/416Martin]]></description><link>http://hollycummins.com/quarkus-book-club/</link><guid isPermaLink="false">http://hollycummins.com/quarkus-book-club/</guid><pubDate>Tue, 03 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This interview was recorded for the GOTO Book Club.&lt;a href=&quot;http://gotopia.tech/bookclub&quot;&gt;http://gotopia.tech/bookclub&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Check out more here:&lt;a href=&quot;https://gotopia.tech/episodes/416Martin&quot;&gt;https://gotopia.tech/episodes/416Martin&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Six and a half ridiculous things to do with Quarkus]]></title><description><![CDATA[Let’s abuse the tools! Everyone knows Quarkus is computationally efficient, expressive, and rock-solid for production.
But did you know that…]]></description><link>http://hollycummins.com/quarkus-ridiculous-things-jchampions/</link><guid isPermaLink="false">http://hollycummins.com/quarkus-ridiculous-things-jchampions/</guid><pubDate>Tue, 27 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Let’s abuse the tools! Everyone knows Quarkus is computationally efficient, expressive, and rock-solid for production.
But did you know that we can use Quarkus efficiency to build applications that shouldn’t go anywhere &lt;em&gt;near&lt;/em&gt; production?
In this demo-driven session, Holly will put the joy into “developer joy”. She’ll show you all sorts of things you can do
with Quarkus that you probably shouldn’t:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Build an LLM-powered app that’s &lt;em&gt;guaranteed&lt;/em&gt; to hallucinate, because you can do more than you think with guardrails,
and truth is so boring&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Write your business code in rockstarlang, because everything should be a hair metal ballad&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use Minecraft as your observability client, because the LGTM stack doesn’t have enough explosions&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Write a CLI for generating memes faster, because everything is better on the command-line&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Benchmark an application against a grapefruit, because metric units aren’t tasty&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Business value? Learning? If you insist. As well as absurd demos, you’ll leave this session with a deeper understanding
of how to get the most out of Quarkus and Java. There will be new Java 25 language features, Quarkus best practices,
powerful integrations, and nifty use cases alongside the silly explosions and grapefruit.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Foojay Podcast #89: Quarkus and Agentic Commerce]]></title><link>http://hollycummins.com/foojay-podcast-89/</link><guid isPermaLink="false">http://hollycummins.com/foojay-podcast-89/</guid><pubDate>Mon, 26 Jan 2026 00:00:00 GMT</pubDate><content:encoded></content:encoded></item><item><title><![CDATA[Things Software Developers Think They Don’t Need to Care about, But Can Impact Their Job ]]></title><description><![CDATA[Holly Cummins gave a keynote at Goto Copenhagen where she urged developers to care about overlooked issues that shape
their work. She warned…]]></description><link>http://hollycummins.com/things-software-developers/</link><guid isPermaLink="false">http://hollycummins.com/things-software-developers/</guid><pubDate>Thu, 01 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Holly Cummins gave a keynote at Goto Copenhagen where she urged developers to care about overlooked issues that shape
their work. She warned of unintended consequences of design decisions, promoted sy&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Five (and a half) Cool Things You Can Do With Quarkus]]></title><description><![CDATA[Save the world. Lightning-quick CLIs. Embed WASM. Run Spring code. AI, for real. 5½. Use Minecraft as an observability client. Ok, this one…]]></description><link>http://hollycummins.com/quarkus-cool-things/</link><guid isPermaLink="false">http://hollycummins.com/quarkus-cool-things/</guid><pubDate>Wed, 05 Nov 2025 00:00:00 GMT</pubDate><content:encoded>&lt;ol&gt;
&lt;li&gt;Save the world.&lt;/li&gt;
&lt;li&gt;Lightning-quick CLIs.&lt;/li&gt;
&lt;li&gt;Embed WASM.&lt;/li&gt;
&lt;li&gt;Run Spring code.&lt;/li&gt;
&lt;li&gt;AI, for real.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;5½. Use Minecraft as an observability client. Ok, this one isn’t cool, it’s stupid, but Holly’s
done it anyway.&lt;/p&gt;
&lt;p&gt;In this demo-driven session, Holly will show some of her favorite Quarkus capabilities. Some are established and
important, some are less well-known, and some are plain silly. But they’re all cool. Whether you’re new to Quarkus or an
experienced user, you’ll discover something you didn’t know.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Developer Joy - The New Paradigm]]></title><description><![CDATA[Ever been told “work is not a place to be happy?” It’s not true! As developers, our job is to be productive, and we’re
most productive when…]]></description><link>http://hollycummins.com/developer-joy-paradigm-lsdd/</link><guid isPermaLink="false">http://hollycummins.com/developer-joy-paradigm-lsdd/</guid><pubDate>Wed, 22 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Ever been told “work is not a place to be happy?” It’s not true! As developers, our job is to be productive, and we’re
most productive when we’re in flow, doing friction-free creation. How do we embrace the happiness paradigm, without
throwing out the old ones we also need, such as efficiency and safety? In this talk, Holly will explain how our industry
is changing, and present a number of productivity tips for the lazy, happy, developer.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Using LangChain4j to Make Your Java Apps Smarter]]></title><description><![CDATA[AI isn’t just for coding assistants and python programmers.
The real power of LLMs comes from integrating them into applications, connected…]]></description><link>http://hollycummins.com/langchain4j-ljc-ai/</link><guid isPermaLink="false">http://hollycummins.com/langchain4j-ljc-ai/</guid><pubDate>Tue, 14 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;AI isn’t just for coding assistants and python programmers.
The real power of LLMs comes from integrating them into applications, connected to real data and real business logic.
LangChain4j is emerging as a de facto standard for LLM integration in Java.
In this demo-driven talk, Holly will explore a range of cool LangChain4j capabilities, such
as type safe object mapping, stateful context, agents, RAG, guard rails, and fault tolerance.
(The demos will use Quarkus, but LangChain4j can be used with any framework.)&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Things You Thought You Didn’t Need To Care About That Have a Big Impact On Your Job]]></title><description><![CDATA[Development is about working with computers, right? Well, not quite. Development is all about working with computers (
easy), and working…]]></description><link>http://hollycummins.com/things-to-care-about-devoxx-be/</link><guid isPermaLink="false">http://hollycummins.com/things-to-care-about-devoxx-be/</guid><pubDate>Thu, 09 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Development is about working with computers, right? Well, not quite. Development is all about working with computers (
easy), and working with people (hard). Oh, and it’s about physics. Things like the speed of light and thermodynamics
influence APIs, because they influence hardware and networking. If, like Holly, you slept through statistics modules in
university, it will be a surprise to discover how statistics has changed our development workflows. Finally, we mustn’t
forget economics. The end of zero-interest-rates has changed the employment landscape for many of us. In this
wide-ranging talk, Holly will cover why the end of Moore’s law means we might finally need to get to grips with
concurrent programming, why is Loom a good idea now when green threads were a bad idea, why is AOT a good idea now when
it used to be a bad idea, and how much you should care about business studies, finance, and statistics.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Six and a half ridiculous things to do with Quarkus]]></title><description><![CDATA[Let’s abuse the tools! Everyone knows Quarkus is computationally efficient, expressive, and rock-solid for production.
But did you know that…]]></description><link>http://hollycummins.com/quarkus-ridiculous-things-devoxx-be/</link><guid isPermaLink="false">http://hollycummins.com/quarkus-ridiculous-things-devoxx-be/</guid><pubDate>Thu, 09 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Let’s abuse the tools! Everyone knows Quarkus is computationally efficient, expressive, and rock-solid for production.
But did you know that we can use Quarkus efficiency to build applications that shouldn’t go anywhere &lt;em&gt;near&lt;/em&gt; production?
In this demo-driven session, Holly will put the joy into “developer joy”. She’ll show you all sorts of things you can do
with Quarkus that you probably shouldn’t:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Build an LLM-powered app that’s &lt;em&gt;guaranteed&lt;/em&gt; to hallucinate, because you can do more than you think with guardrails,
and truth is so boring&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Write your business code in rockstarlang, because everything should be a hair metal ballad&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use Minecraft as your observability client, because the LGTM stack doesn’t have enough explosions&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Write a CLI for generating memes faster, because everything is better on the command-line&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Benchmark an application against a grapefruit, because metric units aren’t tasty&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Business value? Learning? If you insist. As well as absurd demos, you’ll leave this session with a deeper understanding
of how to get the most out of Quarkus and Java. There will be new Java 25 language features, Quarkus best practices,
powerful integrations, and nifty use cases alongside the silly explosions and grapefruit.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Things You Thought You Didn’t Need To Care About That Have a Big Impact On Your Job]]></title><description><![CDATA[Development is about working with computers, right? Well, not quite. Development is all about working with computers (
easy), and working…]]></description><link>http://hollycummins.com/things-to-care-about-goto/</link><guid isPermaLink="false">http://hollycummins.com/things-to-care-about-goto/</guid><pubDate>Thu, 02 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Development is about working with computers, right? Well, not quite. Development is all about working with computers (
easy), and working with people (hard). Oh, and it’s about physics. Things like the speed of light and thermodynamics
influence APIs, because they influence hardware and networking. If, like Holly, you slept through statistics modules in
university, it will be a surprise to discover how statistics has changed our development workflows. Finally, we mustn’t
forget economics. The end of zero-interest-rates has changed the employment landscape for many of us. In this
wide-ranging talk, Holly will cover why the end of Moore’s law means we might finally need to get to grips with
concurrent programming, why is Loom a good idea now when green threads were a bad idea, why is AOT a good idea now when
it used to be a bad idea, and how much you should care about business studies, finance, and statistics.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Things You Thought You Didn’t Need To Care About That Have a Big Impact On Your Job]]></title><description><![CDATA[Development is about working with computers, right? Well, not quite. Development is all about working with computers (
easy), and working…]]></description><link>http://hollycummins.com/things-to-care-about-xconf/</link><guid isPermaLink="false">http://hollycummins.com/things-to-care-about-xconf/</guid><pubDate>Thu, 18 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Development is about working with computers, right? Well, not quite. Development is all about working with computers (
easy), and working with people (hard). Oh, and it’s about physics. Things like the speed of light and thermodynamics
influence APIs, because they influence hardware and networking. If, like Holly, you slept through statistics modules in
university, it will be a surprise to discover how statistics has changed our development workflows. Finally, we mustn’t
forget economics. The end of zero-interest-rates has changed the employment landscape for many of us. In this
wide-ranging talk, Holly will cover why the end of Moore’s law means we might finally need to get to grips with
concurrent programming, why is Loom a good idea now when green threads were a bad idea, why is AOT a good idea now when
it used to be a bad idea, and how much you should care about business studies, finance, and statistics.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Optimizing Cloud Native Java • GOTO - The Brightest Minds in Tech]]></title><description><![CDATA[This interview was recorded for the GOTO Book Club.http://gotopia.tech/bookclub Read the full transcription of the interview here.]]></description><link>http://hollycummins.com/goto-optimizing-cloud-native-java-ben-evans/</link><guid isPermaLink="false">http://hollycummins.com/goto-optimizing-cloud-native-java-ben-evans/</guid><pubDate>Fri, 08 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This interview was recorded for the GOTO Book Club.&lt;a href=&quot;http://gotopia.tech/bookclub&quot;&gt;http://gotopia.tech/bookclub&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Read the full transcription of the interview &lt;a href=&quot;https://gotopia.tech/episodes/363/optimizing-cloud-native-java&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[LangChain4j, Java, and You]]></title><description><![CDATA[If you’re not experimenting with AI, were you even developing in 2025? LangChain4j is emerging as a de facto standard
for LLM integration in…]]></description><link>http://hollycummins.com/langchain4j-ljc-unconference/</link><guid isPermaLink="false">http://hollycummins.com/langchain4j-ljc-unconference/</guid><pubDate>Fri, 11 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;If you’re not experimenting with AI, were you even developing in 2025? LangChain4j is emerging as a de facto standard
for LLM integration in Java. In this demo-driven talk, Holly will explore a range of cool LangChain4j capabilities, such
as type safe object mapping, stateful context, agents, RAG, guard rails, and fault tolerance.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The ELUSIVE ART of User-Focused Simplicity In Software]]></title><description><![CDATA[This clip from The Engineering Room features Dave Farley and Holly Cummins, Senior Principal Software Engineer at Red
Hat, as they explore…]]></description><link>http://hollycummins.com/simplicity-secret/</link><guid isPermaLink="false">http://hollycummins.com/simplicity-secret/</guid><pubDate>Fri, 27 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This clip from The Engineering Room features Dave Farley and Holly Cummins, Senior Principal Software Engineer at Red
Hat, as they explore The ELUSIVE ART of…&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Aflevering 99: The Hidden Cost of Doing Nothing: Hunting Cloud Zombies | De Nederlandse Kubernetes Podcast]]></title><description><![CDATA[Holly explains that waste in our infrastructure is often easier to solve than we think. With simple automation,
time-bound resources, or…]]></description><link>http://hollycummins.com/aflevering-99-the-hidden-cost-of-doing-nothing-hunting-cloud-zombies/</link><guid isPermaLink="false">http://hollycummins.com/aflevering-99-the-hidden-cost-of-doing-nothing-hunting-cloud-zombies/</guid><pubDate>Tue, 24 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Holly explains that waste in our infrastructure is often easier to solve than we think. With simple automation,
time-bound resources, or tools like Dailyclean, it’s possible to make an impact without large investments.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Productivity Through Play: Why Messing Around Makes Better Software Engineers ]]></title><description><![CDATA[In this podcast, Shane Hastie, Lead Editor for Culture & Methods, spoke to Holly Cummins about productivity in creative
knowledge work like…]]></description><link>http://hollycummins.com/productivity-play-better-software-engineers/</link><guid isPermaLink="false">http://hollycummins.com/productivity-play-better-software-engineers/</guid><pubDate>Fri, 20 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In this podcast, Shane Hastie, Lead Editor for Culture &amp;#x26; Methods, spoke to Holly Cummins about productivity in creative
knowledge work like software engineering.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Developer Joy: A Better Way to Boost Developer Productivity ]]></title><description><![CDATA[Joy isn’t a distraction from productivity. Learn how to reclaim developer satisfaction and boost output by embracing
curiosity, minimizing…]]></description><link>http://hollycummins.com/developer-joy-productivity/</link><guid isPermaLink="false">http://hollycummins.com/developer-joy-productivity/</guid><pubDate>Wed, 04 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Joy isn’t a distraction from productivity. Learn how to reclaim developer satisfaction and boost output by embracing
curiosity, minimizing friction, and giving ourselves a break.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Efficiency and Rock 'n’ Roll (Really!)]]></title><description><![CDATA[Is efficiency rock and roll? You might think the answer is “no, definitely not, no way.” Efficiency is about doing more
with less, and rock…]]></description><link>http://hollycummins.com/efficiency-rocknroll/</link><guid isPermaLink="false">http://hollycummins.com/efficiency-rocknroll/</guid><pubDate>Tue, 27 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Is efficiency rock and roll? You might think the answer is “no, definitely not, no way.” Efficiency is about doing more
with less, and rock n’ roll is all about turning it up to eleven and doing more with more. Efficiency is about being
responsible, and rock n’ roll is about being irresponsible. But wait! High overheads are not rock n roll, and they’re
not efficient. Spending time on boring tasks is neither rock n roll, nor efficient. We’re spending way too much time
writing and running code that doesn’t spark joy. In this talk, Holly will discuss practical patterns for wringing
maximum value out of our code, for minimum effort. One of the techniques is sleeping! It turns out, both people and
computers should be lazier, and that’s definitely rock n roll.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Java meets AI: Build LLM-Powered Apps with LangChain4j]]></title><description><![CDATA[Join us for a guided tour through the possibilities of the LangChain4j framework! Chat with virtually any LLM provider (
OpenAI, Gemini…]]></description><link>http://hollycummins.com/langchain4j-devoxx-uk/</link><guid isPermaLink="false">http://hollycummins.com/langchain4j-devoxx-uk/</guid><pubDate>Thu, 08 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Join us for a guided tour through the possibilities of the LangChain4j framework! Chat with virtually any LLM provider (
OpenAI, Gemini, HuggingFace, Azure, AWS, …)? Generate AI images straight from your Java application with Dall-E and
Gemini? Have LLMs return POJOs? Interact with local models on your machine? LangChain4j makes it a piece of cake! We
will explain the fundamental building blocks of LLM-powered applications, show you how to chain them together into AI
Services, and how to interact with your knowledge base using advanced RAG.&lt;/p&gt;
&lt;p&gt;Then, we take a deeper dive into the Quarkus LangChain4j integration. We’ll show how little code is needed when using
Quarkus, how live reload makes experimenting with prompts a breeze and finally we’ll look at its native image generation
capabilities, aiming to get your AI-powered app deployment-ready in no time. By the end of this session, you will have
all the technical knowledge to get your hands dirty, along with plenty of inspiration for designing the apps of the
future.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Things You Thought You Didn’t Need To Care About That Have a Big Impact On Your Job]]></title><description><![CDATA[Development is about working with computers, right? Well, not quite. Development is all about working with computers (
easy), and working…]]></description><link>http://hollycummins.com/things-to-care-about-devoxx-uk/</link><guid isPermaLink="false">http://hollycummins.com/things-to-care-about-devoxx-uk/</guid><pubDate>Wed, 07 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Development is about working with computers, right? Well, not quite. Development is all about working with computers (
easy), and working with people (hard). Oh, and it’s about physics. Things like the speed of light and thermodynamics
influence APIs, because they influence hardware and networking. If, like Holly, you slept through statistics modules in
university, it will be a surprise to discover how statistics has changed our development workflows. Finally, we mustn’t
forget economics. The end of zero-interest-rates has changed the employment landscape for many of us. In this
wide-ranging talk, Holly will cover why the end of Moore’s law means we might finally need to get to grips with
concurrent programming, why is Loom a good idea now when green threads were a bad idea, why is AOT a good idea now when
it used to be a bad idea, and how much you should care about business studies, finance, and statistics.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Create AI-Infused Apps with LangChain4j (and Quarkus) (Mini Lab)]]></title><description><![CDATA[Generative AI has taken the world by storm, and it seems like every executive leader out there is telling us “regular” Java devs to “add AI…]]></description><link>http://hollycummins.com/langchain4j-workshop-devoxx-uk/</link><guid isPermaLink="false">http://hollycummins.com/langchain4j-workshop-devoxx-uk/</guid><pubDate>Wed, 07 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Generative AI has taken the world by storm, and it seems like every executive leader out there is telling us “regular” Java devs to “add AI” to our apps. Does that mean we need to drop everything we’ve built and become data scientists instead now?&lt;/p&gt;
&lt;p&gt;Fortunately, we can infuse AI models built by actual AI experts into our applications in a fairly straightforward way. We promise it’s not as complicated as you might think! Thanks to the ease of use and superb developer experience of Quarkus and the nice AI integration capabilities that the LangChain4j libraries offer, it becomes trivial to start working with AI and make your stakeholders happy.&lt;/p&gt;
&lt;p&gt;In this session, you’ll explore a variety of AI capabilities. We’ll start from the Quarkus DevUI where you can try out AI models before writing any code. Then we’ll get get into the code and explore LangChain4j features such as prompting, chaining, and preserving state; agents and function-calling; enriching your AI model’s knowledge with your own documents using retrieval augmented generation (RAG); and discovering ways to run (and train) models locally using tools like Ollama and/or Podman AI Lab. In addition, we’ll take a look at observability and fault tolerance of the AI integration. We might even try some new features, such as MCP.&lt;/p&gt;
&lt;p&gt;Come to this session to learn how to build AI-infused applications in Java. This is also an opportunity to provide feedback to the maintainers of these projects and contribute back to the community.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[How Developers Can Eliminate Software Waste and Reduce Climate Impact ]]></title><description><![CDATA[High performance and sustainability correlate; making software go faster by improving the efficiency of algorithms can reduce energy…]]></description><link>http://hollycummins.com/software-waste-climate/</link><guid isPermaLink="false">http://hollycummins.com/software-waste-climate/</guid><pubDate>Mon, 28 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;High performance and sustainability correlate; making software go faster by improving the efficiency of algorithms can reduce energy requirements, Holly Cummins said at QCon London. She suggested swit&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The Evolution Of Kubernetes Workload Patterns]]></title><description><![CDATA[Kubernetes workloads differ because they represent applications and services deployed within a cluster encompassing one or more components.]]></description><link>http://hollycummins.com/the-evolution-of-kubernetes-workload-patterns/</link><guid isPermaLink="false">http://hollycummins.com/the-evolution-of-kubernetes-workload-patterns/</guid><pubDate>Wed, 23 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Kubernetes workloads differ because they represent applications and services deployed within a cluster encompassing one or more components.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[How AI will change software engineering]]></title><description><![CDATA[No one can agree how AI will change software engineering. Here’s how to prepare anyway.]]></description><link>http://hollycummins.com/how-ai-will-change-software-engineering/</link><guid isPermaLink="false">http://hollycummins.com/how-ai-will-change-software-engineering/</guid><pubDate>Mon, 14 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;No one can agree how AI will change software engineering. Here’s how to prepare anyway.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The Efficiency Paradox and How to Save Yourself and the World]]></title><description><![CDATA[Inefficiency is ruining our planet and our lives. Efficiency is ruining our happiness, and weirdly, it’s also ruining
our efficiency…]]></description><link>http://hollycummins.com/efficiency-paradox-qcon/</link><guid isPermaLink="false">http://hollycummins.com/efficiency-paradox-qcon/</guid><pubDate>Mon, 07 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Inefficiency is ruining our planet and our lives. Efficiency is ruining our happiness, and weirdly, it’s also ruining
our efficiency. Heeeeelppp!? What’s a techie to do? In this talk, Holly walks through a range of techniques that can be
used to find and eliminate software waste and reduce climate impacts. For example, zombie servers and slow code are a
big climate problem, but the vrrrooom model gives us double-win hope.&lt;/p&gt;
&lt;p&gt;But machine efficiency isn’t much use without human efficiency. The good news is that there isn’t as much of a tradeoff
as you might think between these two types of efficiency. Sorting out machine efficiency often helps humans, too. For
example, the Quarkus Java framework uses many interesting waste-reduction techniques. These optimisations have the dual
benefit of speeding up computers, and also speeding up people.&lt;/p&gt;
&lt;p&gt;So far, so good, but we need to be careful we don’t end up accidentally optimising the wrong things, and making stuff
worse. 100% utilisation is not sustainable for either humans, or people. It’s not even very efficient (remember the
paradox part?). It turns out, thinking about efficiency needs systems thinking. Holly will draw lessons from performance
engineering, mathematics,economics, and psychology to give guidance on how to achieve more by doing less.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Productivity is Messing Around and Having Fun]]></title><description><![CDATA[Developer satisfaction, developer joy, and business results are strongly correlated. Developer productivity frameworks
like SPACE recognize…]]></description><link>http://hollycummins.com/productivity-messing-around-qcon/</link><guid isPermaLink="false">http://hollycummins.com/productivity-messing-around-qcon/</guid><pubDate>Mon, 07 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Developer satisfaction, developer joy, and business results are strongly correlated. Developer productivity frameworks
like SPACE recognize this, with Satisfaction being a key metric. And yet - our jobs are frustrating, filled with
mindless work, and free of joy. How do we fix that? Is annoying waste inevitable? Can developer performance be tuned?
Are productivity measurements helping or hurting us? And how can you persuade management to invest in boredom?&lt;/p&gt;
&lt;p&gt;Except… it’s not the boss we need to convince. Sometimes, it’s ourselves. We’re so in the habit of running to meet
deadlines, running from one problem to the next, of aiming for 100% efficiency, we’re the first ones to say “I don’t
have time for fun”. In this talk, Holly and Trisha will try to convince you that fun isn’t a luxury, but a necessity.&lt;/p&gt;
&lt;p&gt;Holly is an expert on play at work, unwise automations, and polar bears. Trisha is an expert on performance tuning,
tooling and productivity. Come to this talk to find out what these topics have in common.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Practical Zombie Hunting for Kubernetes Users]]></title><description><![CDATA[Zombies? Yup, zombies. Zombies are servers which aren’t doing useful work. They’re everywhere, costing money, eating electricity, and…]]></description><link>http://hollycummins.com/zombies-kubecon/</link><guid isPermaLink="false">http://hollycummins.com/zombies-kubecon/</guid><pubDate>Thu, 03 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Zombies? Yup, zombies. Zombies are servers which aren’t doing useful work. They’re everywhere, costing money, eating electricity, and belching carbon. And they’re useless! Sadly, the cloud has &lt;em&gt;not&lt;/em&gt; helped our zombie problem, and even Kubernetes hasn’t helped.&lt;/p&gt;
&lt;p&gt;One of the reasons zombies don’t get switched off is that no one knows they’re there. So how do we get rid of our pesky zombies? In this talk, Holly will explain the underlying technical and organisational factors that lead to zombies, and introduce a range of real-world zombie-hunting strategies. These include getting to grips with elasticity and utilisation, LightSwitchOps, FinOps, and the eco-monkey (it’s like the chaos monkey, but greener). Technologies covered include absurdly simple scripts, DailyClean, Kruize Autotune, and Backstage.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The Weight of Data: Rethinking Cloud-Native Systems for the Age of AI]]></title><description><![CDATA[The explosion of data and the rise of AI agents have brought cloud-native systems to a critical tipping point. While the CNCF has driven…]]></description><link>http://hollycummins.com/weight-of-data-kubecon/</link><guid isPermaLink="false">http://hollycummins.com/weight-of-data-kubecon/</guid><pubDate>Thu, 03 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The explosion of data and the rise of AI agents have brought cloud-native systems to a critical tipping point. While the CNCF has driven significant advancements, the challenges of fault tolerance and state management in the age of AI remain unresolved both at the core and the edge.&lt;/p&gt;
&lt;p&gt;This keynote examines how data gravity, distributed environments, and the complexity of AI workloads demand a fundamental shift from stateless architectures to intelligent, state-aware platforms. This provides a unique opportunity for the CNCF and its ecosystem to pave the way for a new generation of cloud-native, resilient, cost efficient, scalable, and AI-ready systems, while tackling the pressing challenges that lie ahead.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Kubernetes drives AI scale with cloud-native power - SiliconANGLE]]></title><description><![CDATA[Kubernetes plays a key role in scaling AI, bridging stateless design with stateful needs while supporting cloud-native, edge and sustainable…]]></description><link>http://hollycummins.com/smaller-ai-models-redefining-whats-possible-kubernetes-kubeconeu/</link><guid isPermaLink="false">http://hollycummins.com/smaller-ai-models-redefining-whats-possible-kubernetes-kubeconeu/</guid><pubDate>Thu, 03 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Kubernetes plays a key role in scaling AI, bridging stateless design with stateful needs while supporting cloud-native, edge and sustainable strategies.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[theCUBE at KubeCon+CloudNativeCon EU 2025]]></title><description><![CDATA[Holly Cummins, Senior Principal Software Engineer, Red Hat, &Vincent Caldeira, CTO APAC, Red Hat, join theCUBE for this segment of KubeCon…]]></description><link>http://hollycummins.com/thecube-kubecon/</link><guid isPermaLink="false">http://hollycummins.com/thecube-kubecon/</guid><pubDate>Thu, 03 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Holly Cummins, Senior Principal Software Engineer, Red Hat, &amp;#x26;Vincent Caldeira, CTO APAC, Red Hat, join theCUBE for this segment of KubeCon+CloudNativeCon EU …&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Environment Variables: Sustainable AI Progress]]></title><description><![CDATA[For this 100th episode of Environment Variables from the Green Software Foundation, guest host Anne Currie is joined by Holly Cummins…]]></description><link>http://hollycummins.com/the-week-in-green-software-sustainable-ai-progress/</link><guid isPermaLink="false">http://hollycummins.com/the-week-in-green-software-sustainable-ai-progress/</guid><pubDate>Thu, 20 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;For this 100th episode of Environment Variables from the Green Software Foundation, guest host Anne Currie is joined by Holly Cummins, senior principal engineer at Red Hat, to discuss the intersection of AI, efficiency, and sustainable software practices. They explore the concept of “Lightswitch Ops”—designing systems that can easily be turned off and on to reduce waste—and the importance of eliminating zombie servers. They cover AI’s growing energy demands, the role of optimization in software sustainability, and Microsoft’s new shift in cloud investments. They also touch on AI regulation and the evolving strategies for balancing performance, cost, and environmental impact in tech.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Optimizing Cloud Native Java • GOTO Book Club]]></title><description><![CDATA[This interview was recorded for the GOTO Book Club. #GOTOcon #GOTObookclub http://gotopia.tech/bookclub Read the full transcription of the…]]></description><link>http://hollycummins.com/goto-book-club-optimising-cloud-native-java/</link><guid isPermaLink="false">http://hollycummins.com/goto-book-club-optimising-cloud-native-java/</guid><pubDate>Thu, 13 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This interview was recorded for the GOTO Book Club.&lt;/p&gt;
&lt;p&gt;#GOTOcon #GOTObookclub&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://gotopia.tech/bookclub&quot;&gt;http://gotopia.tech/bookclub&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Read the full transcription of the interview here: &lt;a href=&quot;https://gotopia.tech/episodes/363&quot;&gt;https://gotopia.tech/episodes/363&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Zero Waste, Radical Magic, and Italian Graft – Quarkus Efficiency Secrets]]></title><description><![CDATA[What makes a platform efficient? Is it how quickly code executes, or is it how quickly developers can use it to solve problems? Quarkus…]]></description><link>http://hollycummins.com/quarkus-efficiency-jchampions/</link><guid isPermaLink="false">http://hollycummins.com/quarkus-efficiency-jchampions/</guid><pubDate>Tue, 28 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;What makes a platform efficient? Is it how quickly code executes, or is it how quickly developers can use it to solve problems? Quarkus makes both people and hardware more efficient. That’s cool, but how does it work? Usually, we expect to trade-off developer experience against runtime efficiency. In this session, Holly will dive into some of the technical underpinnings of Quarkus’s efficiency. She’ll give advice for those using or considering Quarkus - should you be doing reactive programming? Do native binaries run fastest? She’ll also share general principles and transferrable discoveries from the engineering team, such as knowing what you’re optimising for, avoiding cache pollution, and how to be static-but-dynamic.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The Efficiency Paradox and How to Save Yourself and the World]]></title><description><![CDATA[Inefficiency is ruining our planet and our lives. Efficiency is ruining our happiness, and weirdly, it’s also ruining our efficiency…]]></description><link>http://hollycummins.com/efficiency-yow-sydney/</link><guid isPermaLink="false">http://hollycummins.com/efficiency-yow-sydney/</guid><pubDate>Fri, 13 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Inefficiency is ruining our planet and our lives. Efficiency is ruining our happiness, and weirdly, it’s also ruining our efficiency. Heeeeelppp!? What’s a techie to do? Zombie servers and slow code are a big climate problem, but the vrrrooom model gives us double-win hope. Holly walks through a range of techniques that can be used to find and eliminate software waste and reduce climate impacts.&lt;/p&gt;
&lt;p&gt;But machine efficiency isn’t much use without human efficiency. Surprisingly, sorting out machine efficiency often helps humans, too. For example, the Quarkus Java framework uses many interesting waste-reduction techniques. These optimisations have the dual benefit of speeding up computers, and also speeding up people.&lt;/p&gt;
&lt;p&gt;So far, so good, but we need to be careful we don’t end up accidentally optimising the wrong things, and making stuff worse. 100% utilisation is not sustainable for either humans, or people. It’s not even very efficient (what!?). Holly gives a brief tour of the brain’s default mode network, the latest business research, and queueing theory, to show why we actually achieve more when we do a bit less.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Tradeoffs, Bad Science, and Polar Bears – The World of Java Optimisation]]></title><description><![CDATA[Welcome to the Java optimisation jungle. Why can’t we “just make it go faster”? It turns out, in most cases, we need to first work out…]]></description><link>http://hollycummins.com/tradeoffs-bad-science-and-polar-bears-the-world-of-java-optimisation-yow-sydney/</link><guid isPermaLink="false">http://hollycummins.com/tradeoffs-bad-science-and-polar-bears-the-world-of-java-optimisation-yow-sydney/</guid><pubDate>Fri, 13 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Welcome to the Java optimisation jungle. Why can’t we “just make it go faster”? It turns out, in most cases, we need to first work out “faster for whom?” and “why do we want to go faster?” and “what even &lt;em&gt;is&lt;/em&gt; faster?” This talk introduces the basic principles of optimisation, before bouncing through the pitfalls of optimisation; why the exact same techniques which make Quarkus rocket-fast used to be a terrible idea fifteen years ago, why fast benchmarks make for slow programs, and why even though it can be easy to get wrong, optimisation really really matters. Along the way we’ll talk about measuring things, bad advice, garbage collection, and climate change.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The Efficiency Paradox and How to Save Yourself and the World]]></title><description><![CDATA[Inefficiency is ruining our planet and our lives. Efficiency is ruining our happiness, and weirdly, it’s also ruining our efficiency…]]></description><link>http://hollycummins.com/efficiency-yow-brisbane/</link><guid isPermaLink="false">http://hollycummins.com/efficiency-yow-brisbane/</guid><pubDate>Tue, 10 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Inefficiency is ruining our planet and our lives. Efficiency is ruining our happiness, and weirdly, it’s also ruining our efficiency. Heeeeelppp!? What’s a techie to do? Zombie servers and slow code are a big climate problem, but the vrrrooom model gives us double-win hope. Holly walks through a range of techniques that can be used to find and eliminate software waste and reduce climate impacts.&lt;/p&gt;
&lt;p&gt;But machine efficiency isn’t much use without human efficiency. Surprisingly, sorting out machine efficiency often helps humans, too. For example, the Quarkus Java framework uses many interesting waste-reduction techniques. These optimisations have the dual benefit of speeding up computers, and also speeding up people.&lt;/p&gt;
&lt;p&gt;So far, so good, but we need to be careful we don’t end up accidentally optimising the wrong things, and making stuff worse. 100% utilisation is not sustainable for either humans, or people. It’s not even very efficient (what!?). Holly gives a brief tour of the brain’s default mode network, the latest business research, and queueing theory, to show why we actually achieve more when we do a bit less.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The Efficiency Paradox and How to Save Yourself and the World]]></title><description><![CDATA[Inefficiency is ruining our planet and our lives. Efficiency is ruining our happiness, and weirdly, it’s also ruining our efficiency…]]></description><link>http://hollycummins.com/efficiency-yow-melbourne/</link><guid isPermaLink="false">http://hollycummins.com/efficiency-yow-melbourne/</guid><pubDate>Fri, 06 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Inefficiency is ruining our planet and our lives. Efficiency is ruining our happiness, and weirdly, it’s also ruining our efficiency. Heeeeelppp!? What’s a techie to do? Zombie servers and slow code are a big climate problem, but the vrrrooom model gives us double-win hope. Holly walks through a range of techniques that can be used to find and eliminate software waste and reduce climate impacts.&lt;/p&gt;
&lt;p&gt;But machine efficiency isn’t much use without human efficiency. Surprisingly, sorting out machine efficiency often helps humans, too. For example, the Quarkus Java framework uses many interesting waste-reduction techniques. These optimisations have the dual benefit of speeding up computers, and also speeding up people.&lt;/p&gt;
&lt;p&gt;So far, so good, but we need to be careful we don’t end up accidentally optimising the wrong things, and making stuff worse. 100% utilisation is not sustainable for either humans, or people. It’s not even very efficient (what!?). Holly gives a brief tour of the brain’s default mode network, the latest business research, and queueing theory, to show why we actually achieve more when we do a bit less.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Tradeoffs, Bad Science, and Polar Bears – The World of Java Optimisation]]></title><description><![CDATA[Welcome to the Java optimisation jungle. Why can’t we “just make it go faster”? It turns out, in most cases, we need to first work out…]]></description><link>http://hollycummins.com/tradeoffs-bad-science-and-polar-bears-the-world-of-java-optimisation-yow/</link><guid isPermaLink="false">http://hollycummins.com/tradeoffs-bad-science-and-polar-bears-the-world-of-java-optimisation-yow/</guid><pubDate>Thu, 05 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Welcome to the Java optimisation jungle. Why can’t we “just make it go faster”? It turns out, in most cases, we need to first work out “faster for whom?” and “why do we want to go faster?” and “what even &lt;em&gt;is&lt;/em&gt; faster?” This talk introduces the basic principles of optimisation, before bouncing through the pitfalls of optimisation; why the exact same techniques which make Quarkus rocket-fast used to be a terrible idea fifteen years ago, why fast benchmarks make for slow programs, and why even though it can be easy to get wrong, optimisation really really matters. Along the way we’ll talk about measuring things, bad advice, garbage collection, and climate change.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The Engineering Room with Dave Farley]]></title><description><![CDATA[Listen to Dave Farley’s The Engineering Room with Dave Farley podcast on Apple Podcasts.]]></description><link>http://hollycummins.com/engine-room/</link><guid isPermaLink="false">http://hollycummins.com/engine-room/</guid><pubDate>Sun, 01 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Listen to Dave Farley’s The Engineering Room with Dave Farley podcast on Apple Podcasts.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Leverage LLMs in Java with LangChain4j and Quarkus]]></title><description><![CDATA[In this session, we’ll explore how to infuse AI capabilites into Java applications, using LangChain4j and its Quarkus integration. We’ll…]]></description><link>http://hollycummins.com/langchain4j-and-quarkus-openconf/</link><guid isPermaLink="false">http://hollycummins.com/langchain4j-and-quarkus-openconf/</guid><pubDate>Fri, 22 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In this session, we’ll explore how to infuse AI capabilites into Java applications, using LangChain4j and its Quarkus integration. We’ll start from the Quarkus DevUI where you can try out AI models even before writing any code. Then we’ll explore LangChain4j features such as prompting, chaining, and preserving state; agents and function-calling; enriching your AI model’s knowledge with your own documents using retrieval augmented generation (RAG); and discovering ways to run (and train) models locally using tools like Ollama and/or Podman AI Lab. In addition, we’ll take a look at observability and fault tolerance of the AI integration and compile the app to a native binary.&lt;/p&gt;
&lt;p&gt;Fortunately, we can infuse AI models built by actual AI experts into our applications in a fairly straightforward way, thanks to some new projects out there. We promise it’s not as complicated as you might think! Thanks to the ease of use and superb developer experience of Quarkus and the nice AI integration capabilities that the LangChain4j libraries offer, it becomes trivial to start working with AI and make your stakeholders happy :)&lt;/p&gt;
&lt;p&gt;In this session, you’ll explore a variety of AI capabilities. We’ll start from the Quarkus DevUI where you can try out AI models even before writing any code. Then we’ll get our hands dirty with some code and exploring LangChain4j features such as prompting, chaining, and preserving state; agents and function-calling; enriching your AI model’s knowledge with your own documents using retrieval augmented generation (RAG); and discovering ways to run (and train) models locally using tools like Ollama and/or Podman AI Lab.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Less waste, more joy, and a lot more green – How Quarkus makes Java better]]></title><description><![CDATA[Quarkus makes both people and hardware more efficient. That’s cool, but how does it work? Usually, we expect to trade-off developer…]]></description><link>http://hollycummins.com/quarkus-joy-oredev/</link><guid isPermaLink="false">http://hollycummins.com/quarkus-joy-oredev/</guid><pubDate>Wed, 06 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Quarkus makes both people and hardware more efficient. That’s cool, but how does it work? Usually, we expect to trade-off developer experience against runtime efficiency. In this session, Holly will dive into some of the technical underpinnings of Quarkus’s efficiency. She’ll give advice for those using or considering Quarkus - should you be doing reactive programming? Do native binaries run fastest? In this under-the-hood session, she’ll also share general principles and transferrable discoveries from the engineering team, such as knowing what you’re optimising for, avoiding cache pollution, and how to be static-but-dynamic.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The Power of LLMs in Java – Leveraging Quarkus and LangChain4j]]></title><description><![CDATA[Generative AI has taken the world by storm over the last year, and it seems like every executive leader out there is telling us “regular…]]></description><link>http://hollycummins.com/llms-and-quarkus-techxchange/</link><guid isPermaLink="false">http://hollycummins.com/llms-and-quarkus-techxchange/</guid><pubDate>Wed, 23 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Generative AI has taken the world by storm over the last year, and it seems like every executive leader out there is telling us “regular” Java application developers to “add AI” to our applications. Does that mean we need to drop everything we’ve built and become data scientists instead now? Fortunately, we can actually infuse AI models built by actual AI experts into our applications fairly straightforwardly, thanks to some new projects out there. We promise it’s not as complicated as you might think! Thanks to the ease of use and superb developer experience of Quarkus and the nice AI integration capabilities that the LangChain4j libraries offer, it becomes trivial to start working with AI and make your stakeholders happy :) In this session, you’ll explore a variety of AI capabilities. We’ll start from the Quarkus DevUI where you can try out AI models even before writing any code. Then we’ll get our hands dirty with some code and exploring LangChain4j features such as prompting, chaining, and preserving state; agents and function-calling; enriching your AI model’s knowledge with your own documents using retrieval augmented generation (RAG); and discovering ways to run (and train) models locally using tools like Ollama and/or Podman AI Lab. In addition, we’ll take a look at observability and fault tolerance of the AI integration and compile the app to a native binary.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Refactoring to Kube-native Java with Quarkus]]></title><description><![CDATA[Quarkus was created to enable Java developers to deliver applications for a modern, cloud-native world. A Kubernetes-native Java framework…]]></description><link>http://hollycummins.com/quarkus-techxchange/</link><guid isPermaLink="false">http://hollycummins.com/quarkus-techxchange/</guid><pubDate>Wed, 23 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Quarkus was created to enable Java developers to deliver applications for a modern, cloud-native world. A Kubernetes-native Java framework, Quarkus is tailored for the Java VM and GraalVM native image, and crafted from best-of-breed Java libraries and standards. Join us as we explore the technical capabilities, critical use cases, and benefits that make Quarkus ideal for Kubernetes and serverless environments while offering developers a framework to address a wider range of distributed application architectures. We’ll even throw in a demonstration of Quarkus in action.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Choosing the right Java runtime for the job]]></title><description><![CDATA[Successful digital transformation requires business and IT systems to be secure, sustainable, and minimize technical debt.  Technical debt…]]></description><link>http://hollycummins.com/java-runtimes-techxchange/</link><guid isPermaLink="false">http://hollycummins.com/java-runtimes-techxchange/</guid><pubDate>Tue, 22 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Successful digital transformation requires business and IT systems to be secure, sustainable, and minimize technical debt.  Technical debt stifles innovation and burdens application teams with security weaknesses and inefficient resource utilization. Select the right Java runtime for your application needs to begin addressing technical debt and delivering new cloud native applications with the frameworks and IDEs of choice.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The future of development – Are our jobs getting harder or easier?]]></title><description><![CDATA[In the early days of computing, software developers had to encode their programs on punch cards, and carry the bits around by hand. By the…]]></description><link>http://hollycummins.com/jobs-harder-easier-voxxed-thessaloniki/</link><guid isPermaLink="false">http://hollycummins.com/jobs-harder-easier-voxxed-thessaloniki/</guid><pubDate>Sat, 19 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In the early days of computing, software developers had to encode their programs on punch cards, and carry the bits around by hand. By the 1970s they had the joy of keyboards and displays. Sadly, those oppressed developers had to wear flare trousers, work in C, and manage their own memory. By 2000 the memory thing was sorted out, but the trousers were arguably worse, and developers had to maintain their own hardware. Now, our hardware is someone else’s problem, everything is open source, AI can write our code, and we have a choice whether to work in Java, Kotlin, Javascript, Ruby, Go, Python, Rust, or Typescript. On the other hand, now we have yaml. And many of us find we have to work in ALL of Java, Kotlin, Javascript, Ruby, Go, Python, Rust, or Typescript, all while managing a cloud, becoming security experts, learning CSS, and debugging the code our AI “helper” wrote. And we’re supposed to be full-stack, and shifting left, and building up open source in our free time. Are we living the dream or sinking under cognitive overload?&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Zombie Menace, Vampire Peril]]></title><description><![CDATA[It’s the spookiest time of year!
You might think spookiness and tech are unrelated, but you’d be wrong.
Well, actually, you’d probably be…]]></description><link>http://hollycummins.com/vampires-and-zombies/</link><guid isPermaLink="false">http://hollycummins.com/vampires-and-zombies/</guid><pubDate>Wed, 16 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;It’s the spookiest time of year!
You might think spookiness and tech are unrelated, but you’d be wrong.
Well, actually, you’d probably be right, but I’m not going to let that stop me writing Hallowe’en-themed &lt;a href=&quot;/blood-curdling-tales-of-microservices-misadventure-devops-dread-and-grisly-governance-software-circus&quot;&gt;talks about getting cloud native wrong&lt;/a&gt;, and Hallowe’en-themed talks about the &lt;a href=&quot;/death-and-software&quot;&gt;importance of TestContainers cleanup logic&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This year, I’ve been thinking about zombies and vampires.
Zombies in movies are scary, but (spoiler) &lt;em&gt;they don’t exist&lt;/em&gt;.
Same for vampires.&lt;/p&gt;
&lt;p&gt;But in the tech world, these monsters do exist.
And they’re pretty bad.
Maybe not ripping-your-head off bad, but definitely bad enough to be worth exorcising.&lt;/p&gt;
&lt;h2&gt;Vampire code&lt;/h2&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/405d431d1de356a07d7a053adc967c21/cac9f/vampire.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 38.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA7klEQVR42qXRz0vCYBzHcf9ij3XpJggdlHUoIhBL0KAyQg9C04OIQjBQog475TZ/kNOHOdlp2/NuI4MGghM/1+/D68vn+WbYESklYRiyXK0YWybeZoPv+6RJZhcWxxaCUUdFq1YYtVWE6x4Heo6D1nihflvmo/2Kt3YS8/RgVDWOGGp0LwqcKwr6lcJSbSF/xQPA7eP4v74fauila9RyiWnujMlJFufzPbF0L/hXR5hjpsU8i8sixmONeSGPeZpl1nhOLE4Nri0D4+4G8+kevd9j/jbgq9XEm1iHgf/hIAhwo8subJsgqhiXlCmu/AOa12KkbxwYnQAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;a stick-figure vampire whose cape is covered in code&quot;
        title=&quot;&quot;
        src=&quot;/static/405d431d1de356a07d7a053adc967c21/5a190/vampire.png&quot;
        srcset=&quot;/static/405d431d1de356a07d7a053adc967c21/772e8/vampire.png 200w,
/static/405d431d1de356a07d7a053adc967c21/e17e5/vampire.png 400w,
/static/405d431d1de356a07d7a053adc967c21/5a190/vampire.png 800w,
/static/405d431d1de356a07d7a053adc967c21/c1b63/vampire.png 1200w,
/static/405d431d1de356a07d7a053adc967c21/29007/vampire.png 1600w,
/static/405d431d1de356a07d7a053adc967c21/cac9f/vampire.png 2207w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Let’s start off by talking about code.
As developers, we work really really hard to create code. So many of us assume code must be an asset.
It’s not.&lt;/p&gt;
&lt;p&gt;Code is a liability. Every bit of code we produce needs to be maintained.
Code increases the attack surface of applications, creates cognitive load for developers, and slows down compilation. Ugh. Who’d want code?&lt;/p&gt;
&lt;p&gt;Martijn Verburg once said that he paid his junior developers by how much code they wrote, and his senior developers by how much code they deleted.
People sometimes compare working with an LLM to pair programming with a very enthusiastic junior developer.
The model will get excited by your request and produce &lt;em&gt;as much code as it possibly can&lt;/em&gt;.
I suspect something in the mathematics of how these models are trained biases them towards verbosity. I saw this anecdotally when I generated a Quarkus application and 70% of the generated code was unnecessary.
The Hibernate with Panache libraries eliminate the need for boilerplate code, but the AI assistant put all the boilerplate in anyway.&lt;/p&gt;
&lt;p&gt;Statistical analysis of codebases seems to confirm my intuition. &lt;a href=&quot;https://www.gitclear.com/coding_on_copilot_data_shows_ais_downward_pressure_on_code_quality&quot;&gt;A study by GitClear&lt;/a&gt; found that codebases today have more duplicated code than they did before developers started using tools like CoPilot and ChatGPT.
They also found a reduction in the number of commits which deleted code.
As developers, we spend far more time reading code than writing code, so this excess code becomes an ongoing drain on developer time.&lt;/p&gt;
&lt;p&gt;Code can be vampire code even when it actually is needed in the codebase.
All but the smallest libraries usually include files and functions which a particular consumer application might not use.
Even though they’re unused, these dormant bits of code still have a cost. They increase the size of the packaged application, which means increased network traffic for users.
This is extra bad for Javascript libraries, which will be downloaded every single time a web page loads.
The code bloat doesn’t just make page load slower, it uses energy.&lt;/p&gt;
&lt;p&gt;Extra code can also mean extra memory footprint; for example, the Java runtime will load unused database support classes into memory as part of the Hibernate bootstrap process. The classes will then be unloaded, but by then it’s too late; the peak memory requirement has been set high.&lt;/p&gt;
&lt;p&gt;Extra code can even slow applications down. For example, in Java, the process of invoking an interface method on an object is slower if multiple possible implementations exist on the classpath.
If the JVM has to choose between several implementations, that’s called megamorphic dispatching.
It’s slower than the single implementation case, monomorphic dispatching.&lt;/p&gt;
&lt;p&gt;The good news is that there is a solution.
For Javascript, where extra code has such an obvious bad impact, most modern build tooling will do a process called tree-shaking, which strips unused code.
Historically, Java did not have a similar process, but that’s now changing.
For example, building a GraalVM native binary will aggressively eliminate unused code.
Project Leyden may also some tree-shaking ideas to the JVM itself.&lt;/p&gt;
&lt;p&gt;At a level above the runtime, the Quarkus architecture is designed to reduce vampire code.  Quarkus applies a number of build-time optimisations to applications, and libraries can participate in this optimisation process through extensions.&lt;br&gt;
For example, all of those undead database support classes in Hibernate?
The Quarkus Hibernate extension makes sure they never make it into the built application.
Think of Quarkus’s build architecture as an extensible wooden stake.&lt;/p&gt;
&lt;h2&gt;Zombie servers&lt;/h2&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/74dec07bce78ddc8bd0f84060db936df/81512/zombie.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 50%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAx0lEQVR42qXSzQqCQBQFYN//VYIW0TIIo0WIGZmKNKURaFQ6/uco6GkwXLSQTC/M7Oaby71HQGfVzc2KAqYuwrZ26FNCJ1d/wCRJYBpznMkaVTUCbJtM0wSavsGRqKDU//rsLzDPM5DTAZI8hWEuoOxncG/2cNBxrpC3ImRlAuuyArFEeL47DGwfhCGFpi5BiATHtcEYGzbDFgwCv0E974GiYMO33IJRRPkJOExRluW42DQZZBnHnrzD+8/Z9YtNg74Qx0Fv8A0Byw/F1Sb7UgAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;a stick-figure zombie that looks a bit like a server&quot;
        title=&quot;&quot;
        src=&quot;/static/74dec07bce78ddc8bd0f84060db936df/5a190/zombie.png&quot;
        srcset=&quot;/static/74dec07bce78ddc8bd0f84060db936df/772e8/zombie.png 200w,
/static/74dec07bce78ddc8bd0f84060db936df/e17e5/zombie.png 400w,
/static/74dec07bce78ddc8bd0f84060db936df/5a190/zombie.png 800w,
/static/74dec07bce78ddc8bd0f84060db936df/c1b63/zombie.png 1200w,
/static/74dec07bce78ddc8bd0f84060db936df/29007/zombie.png 1600w,
/static/74dec07bce78ddc8bd0f84060db936df/81512/zombie.png 2205w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Vampire code happens when a portion of an application’s codebase is unneeded.
Zombies happen when the &lt;em&gt;entire&lt;/em&gt; application is unneeded.
By extension, not only is the application wasting resources, so is all the infrastructure running it.&lt;/p&gt;
&lt;p&gt;How could a whole application be unused?
Usually, the root cause is forgetfulness: individual forgetfulness, and also organisational forgetfulness.
It may be that something was originally well-used, but then processes changed.
Or perhaps a prototype was put into staging, and never progressed to production, but never got torn down, either.&lt;/p&gt;
&lt;p&gt;Over-provisioning also causes zombies.
Organisational incentive structures encourage over-provisioning,
because no one wants to be the person who provisioned too little infrastructure and caused an outage.
To avoid this career-limiting situation, many people will err on the side of caution and configure far too much capacity.&lt;/p&gt;
&lt;p&gt;How bad is the zombie menace?
It’s bad.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.nrdc.org/sites/default/files/data-center-efficiency-assessment-IB.pdf&quot;&gt;NRDC research&lt;/a&gt; concluded that the average server was running at 12-18% of maximum capacity.
That wouldn’t be terrible, except a machine running with such low utilization still uses 30-60% of its maximum power. (This ratio is called “energy proportionality,” if you want to bring out the technical terms.)
Things are even more disproportionate when we look at the hardware side. Building an unused server emits &lt;em&gt;exactly&lt;/em&gt; the same amount of carbon and consumes the same amount of natural resources as building a well-utilised server. The cost to us and the planet is the same, but the value is far far lower.&lt;/p&gt;
&lt;p&gt;A 2017 survey from the Anthesis Institute found that, over a six month period, 29% of servers had utilisation less than 5%.
A quarter of the servers had no utilization at all; they were &lt;em&gt;completely unused&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;That quarter figure is the average over a large sample, and included a number of different companies. In some unlucky organisations, the proportion of zombies can be higher.
Like, much much higher.
&lt;em&gt;Building Green Software&lt;/em&gt; shares the story of a VMWare data centre in Singapore.
The data centre was being physically moved, and so before doing the move, the team checked what was running on the machines.
Rather incredibly, 66% of all the host machines were zombies. That’s a full-on &lt;em&gt;Twenty Eight Days Later&lt;/em&gt; scenario, in which the zombies outnumber the value-creating machines.&lt;/p&gt;
&lt;p&gt;Hunting down zombie servers isn’t trivial; kind of by definition, forgotten servers are hard to find.
The reason VMWare discovered them was because the physical move forced a virtual clear-out.
Otherwise, who knows how long the useless servers might have hung around?
Regular audits of an estate can help, but, regrettably, they are pretty boring to execute.
As a more intellectually rewarding alternative, consider deploying elastic scaling solution, or even fully-fledged autonomic resource optimisation.
Infrastructure-as-code can help make it easier to keep tabs on what’s being run, and ephemeral leasing can help hurry the release of systems which aren’t actually needed anymore.&lt;/p&gt;
&lt;p&gt;Vampire code and zombie servers are, fundamentally, wasteful.
They use resources and have no value.
That waste costs us money, but it also threatens the planet.
Why not organise a few trick-or-treating expeditions to hunt down those under-utilized servers and useless lines of code?&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Productivity is Messing Around and Having Fun]]></title><description><![CDATA[What is the happy path, for developers? It’s less boredom, and more play. Developer satisfaction, developer joy, and business results are…]]></description><link>http://hollycummins.com/productivity-messing-around-devoxx-be/</link><guid isPermaLink="false">http://hollycummins.com/productivity-messing-around-devoxx-be/</guid><pubDate>Thu, 10 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;What is the happy path, for developers? It’s less boredom, and more play.&lt;/p&gt;
&lt;p&gt;Developer satisfaction, developer joy, and business results are strongly correlated. And yet - many of our jobs are frustrating, filled with friction, and free of joy. What’s going on? How do we fix that? Is annoying waste inevitable? Can developer performance be tuned? Are productivity measurements helping or hurting us? How do we deal with fear at work? Will AI take our jobs? Finally, how can you persuade management to invest in boredom?&lt;/p&gt;
&lt;p&gt;Holly is an expert on play at work, unwise automations, and polar bears. Trisha is an expert on performance tuning, tooling and productivity. Come to this talk to find out what these topics have in common.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Zero Waste, Radical Magic, and Italian Graft – Quarkus Efficiency Secrets]]></title><description><![CDATA[What makes software efficient? Is it how quickly code executes, or is it how quickly developers can use it to solve problems? Quarkus makes…]]></description><link>http://hollycummins.com/quarkus-efficiency-devoxx/</link><guid isPermaLink="false">http://hollycummins.com/quarkus-efficiency-devoxx/</guid><pubDate>Thu, 10 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;What makes software efficient? Is it how quickly code executes, or is it how quickly developers can use it to solve problems? Quarkus makes both people and hardware more efficient. That’s cool, but how does it work? Usually, we expect to trade-off developer experience against runtime efficiency. In this session, Holly will dive into some of the technical underpinnings of Quarkus’s efficiency. She’ll give advice for those using or considering Quarkus - Do native binaries run fastest? Are verbose programs more efficient? She’ll also share general principles and transferrable discoveries from the engineering team, such as knowing what you’re optimising for, avoiding cache pollution, and how to be static-but-dynamic.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[How Quarkus makes your apps cheaper, greener, and happier]]></title><description><![CDATA[Java never went away, but it’s having a renaissance. After some initial teething pains on the cloud (too big, too slow, too hard to…]]></description><link>http://hollycummins.com/quarkus-cheaper-greener-happier-summit-connect/</link><guid isPermaLink="false">http://hollycummins.com/quarkus-cheaper-greener-happier-summit-connect/</guid><pubDate>Tue, 08 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Java never went away, but it’s having a renaissance. After some initial teething pains on the cloud (too big, too slow, too hard to configure) a new breed of Java frameworks are changing everything. In this talk, Holly will introduce Quarkus and then delve into some of the advanced features you might not know about. She’ll cover native binaries, what makes Quarkus super-fast running on the JVM, TDD with Quarkus, and Quarkus’s carbon footprint. The talk includes some theory (what underpins Quarkus’s surprising speed?) and also live demos (does Quarkus really start faster than a light bulb? What does an integration testing flow with Quarkus look like?)&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Panel – Where Is Software Development Going?]]></title><link>http://hollycummins.com/future-of-dev-goto/</link><guid isPermaLink="false">http://hollycummins.com/future-of-dev-goto/</guid><pubDate>Thu, 03 Oct 2024 00:00:00 GMT</pubDate><content:encoded></content:encoded></item><item><title><![CDATA[The Efficiency Paradox and How to Save Yourself and the World]]></title><description><![CDATA[Inefficiency is ruining our planet and our lives. Efficiency is ruining our happiness, and weirdly, it’s also ruining our efficiency…]]></description><link>http://hollycummins.com/efficiency-goto/</link><guid isPermaLink="false">http://hollycummins.com/efficiency-goto/</guid><pubDate>Thu, 03 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Inefficiency is ruining our planet and our lives. Efficiency is ruining our happiness, and weirdly, it’s also ruining our efficiency. Heeeeelppp!? What’s a techie to do? Zombie servers and slow code are a big climate problem, but the vrrrooom model gives us double-win hope. Holly walks through a range of techniques that can be used to find and eliminate software waste and reduce climate impacts.&lt;/p&gt;
&lt;p&gt;But machine efficiency isn’t much use without human efficiency. Surprisingly, sorting out machine efficiency often helps humans, too. For example, the Quarkus Java framework uses many interesting waste-reduction techniques. These optimisations have the dual benefit of speeding up computers, and also speeding up people.&lt;/p&gt;
&lt;p&gt;So far, so good, but we need to be careful we don’t end up accidentally optimising the wrong things, and making stuff worse. 100% utilisation is not sustainable for either humans, or people. It’s not even very efficient (what!?). Holly gives a brief tour of the brain’s default mode network, the latest business research, and queueing theory, to show why we actually achieve more when we do a bit less.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[NLJUG academy masterclass – Create Java-based AI applications with Quarkus and LangChain4j]]></title><description><![CDATA[Generative AI has taken the world by storm over the last year, and it seems like every executive leader out there is telling us “regular…]]></description><link>http://hollycummins.com/langchain4j-and-quarkus-nljug/</link><guid isPermaLink="false">http://hollycummins.com/langchain4j-and-quarkus-nljug/</guid><pubDate>Thu, 26 Sep 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Generative AI has taken the world by storm over the last year, and it seems like every executive leader out there is telling us “regular” Java application developers to “add AI” to our applications. Does that mean we need to drop everything we’ve built and become data scientists instead now?&lt;/p&gt;
&lt;p&gt;Fortunately, we can infuse AI models built by actual AI experts into our applications in a fairly straightforward way, thanks to some new projects out there. We promise it’s not as complicated as you might think! Thanks to the ease of use and superb developer experience of Quarkus and the nice AI integration capabilities that the LangChain4j libraries offer, it becomes trivial to start working with AI and make your stakeholders happy :)&lt;/p&gt;
&lt;p&gt;In this session, you’ll explore a variety of AI capabilities. We’ll start from the Quarkus DevUI where you can try out AI models even before writing any code. Then we’ll get our hands dirty with some code and exploring LangChain4j features such as prompting, chaining, and preserving state; agents and function-calling; enriching your AI model’s knowledge with your own documents using retrieval augmented generation (RAG); and discovering ways to run (and train) models locally using tools like Ollama and/or Podman AI Lab.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Developer Joy == Developer Productivity (really!)]]></title><description><![CDATA[Ever been told “work is not a place to be happy?” It’s not true! As developers, our job is to be productive, and we’re most productive when…]]></description><link>http://hollycummins.com/productivity-equals-joy-swiss-redhat/</link><guid isPermaLink="false">http://hollycummins.com/productivity-equals-joy-swiss-redhat/</guid><pubDate>Tue, 17 Sep 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Ever been told “work is not a place to be happy?” It’s not true! As developers, our job is to be productive, and we’re most productive when we’re in flow, doing friction-free creation. The good news is that new technologies help us do more, with less effort. (And only some of them are LLMs.) These developer tools and frameworks make us productive, and they bring joy. In this talk, Holly will present a number of productivity tips for the lazy, happy, developer.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[How Quarkus makes your apps cheaper, greener, and happier]]></title><description><![CDATA[Java never went away, but it’s having a renaissance. After some initial teething pains on the cloud (too big, too slow, too hard to…]]></description><link>http://hollycummins.com/quarkus-cheaper-greener-happier-dev-confederation/</link><guid isPermaLink="false">http://hollycummins.com/quarkus-cheaper-greener-happier-dev-confederation/</guid><pubDate>Tue, 17 Sep 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Java never went away, but it’s having a renaissance. After some initial teething pains on the cloud (too big, too slow, too hard to configure) a new breed of Java frameworks are changing everything. In this talk, Holly will introduce Quarkus and then delve into some of the advanced features you might not know about. She’ll cover native binaries, what makes Quarkus super-fast running on the JVM, TDD with Quarkus, and Quarkus’s carbon footprint. The talk includes some theory (what underpins Quarkus’s surprising speed?) and also live demos (does Quarkus really start faster than a light bulb? What does an integration testing flow with Quarkus look like?)&lt;/p&gt;</content:encoded></item><item><title><![CDATA[How to create your own Quarkus extension]]></title><description><![CDATA[Holly Cummins discusses the basics, tips and tricks of creating your own Quarkus extensions.]]></description><link>http://hollycummins.com/quarkus-insights-extensions/</link><guid isPermaLink="false">http://hollycummins.com/quarkus-insights-extensions/</guid><pubDate>Mon, 12 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Holly Cummins discusses the basics, tips and tricks of creating your own Quarkus extensions.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Using yq in GitHub Actions]]></title><description><![CDATA[TLDR: GitHub runners come with yq pre-installed. There’s no need to install it, or use a third-party action. A problem of modern search…]]></description><link>http://hollycummins.com/using-yq-in-github-actions/</link><guid isPermaLink="false">http://hollycummins.com/using-yq-in-github-actions/</guid><pubDate>Fri, 09 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;TLDR: GitHub runners come with yq pre-installed. There’s no need to install it, or use a third-party action.&lt;/p&gt;
&lt;p&gt;A problem of modern search engines is that it’s much easier to index the presence of something than the absence of it.
(LLMs have this problem too, which is why ChatGPT will sometimes misunderstand a programming model and generate pages of unnecessary boilerplate.)&lt;/p&gt;
&lt;p&gt;I recently used &lt;a href=&quot;https://mikefarah.gitbook.io/yq&quot;&gt;yq&lt;/a&gt; to alphabetise an array in a yaml document.
I wanted to run my script after every commit to a GitHub repo, but I didn’t know if &lt;code class=&quot;language-text&quot;&gt;yq&lt;/code&gt; would be installed on the GitHub runners.
So I googled “yq github actions,” as one does*.&lt;/p&gt;
&lt;p&gt;The result was lots of marketplace actions for installing it.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/12ab62d9d64b8e1c9b7ebfaca38219f4/0d721/search-results.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 61%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAABYlAAAWJQFJUiTwAAABrklEQVR42p1SS27bMBT0vpdo9/Ul0uQWvoEAA1rpCrpNb9FNDWRju7aBIAkkKPrQlERSP/5eH6nUBdqkbfqgwTyS0mjeSIv729v3j4/f4jzLEVmcpmmcIWdZ6ZHn5DfMZyQuS4prGreUxqqj8eFw+LDY7XbXgKW1cWStsb639geD7w3uG7fwN8HMz1S2Gr7eKTidTjdO8JPB58qi0M2ZKKmk5oJppZQ2xmgU067wQOPl934Cz9Sk7jKhP38h9ng8Xl8c0opBel/aIqVQZTVwJkDKCcZx9MAXwCtlZ9cW9vv9zUWQcwHnM7VDP8AwjDBJiSNrFJUwTZPvXxN0ikr/ItgQDujO1hUHWjAQvAdtNLhM/1IvO2xqDqSqreADjtujS3Q6zk7/S7AsGTw8FDZJKkiSM3Rdj9lNXrjHGMz8F/y7oBACmraxfd/7vIz79NZ4nnv7NkFCBDqjtsD88rxFMIxheLvgZrO5QleaEKqS5ElmT4WqKqrahqu6Zopxrhjjqus6heO/BOkYJ9Tb7fZqsVqt3q3X649RFC6jKFg6DqNoGYYBIrwgCII/wmk4re9a31PghvLm2wAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;a page of search results for marketplace actions&quot;
        title=&quot;&quot;
        src=&quot;/static/12ab62d9d64b8e1c9b7ebfaca38219f4/5a190/search-results.png&quot;
        srcset=&quot;/static/12ab62d9d64b8e1c9b7ebfaca38219f4/772e8/search-results.png 200w,
/static/12ab62d9d64b8e1c9b7ebfaca38219f4/e17e5/search-results.png 400w,
/static/12ab62d9d64b8e1c9b7ebfaca38219f4/5a190/search-results.png 800w,
/static/12ab62d9d64b8e1c9b7ebfaca38219f4/c1b63/search-results.png 1200w,
/static/12ab62d9d64b8e1c9b7ebfaca38219f4/29007/search-results.png 1600w,
/static/12ab62d9d64b8e1c9b7ebfaca38219f4/0d721/search-results.png 2774w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;There was a featured snippet for “is yq available on GitHub actions,” which directed me to a marketplace installer.
The yq project itself had a marketplace installer. Clearly, I needed to install it before using it. Right?&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/30dd49565f1f0694f75a838c2915840f/0c3d0/snippet.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 41.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAABYlAAAWJQFJUiTwAAABOklEQVR42p1R2U7DMBDM//8Rz0DFUUorKAJ656odx0lIvLaTNhmctOIRFSyNdu09Z+wZYxCGIRhj4JwjSRIcDgf893h9ccKZaxgPVogEpBSM0X9qXDcN2q6Dp92Ge5bADyIEEUMQc2z9GJtdBCELKF2jVBYVWZBpoKg+v5kz7CmuNNq2hSdywtVoheuJj9l7iMncx+QtGOzddInb8SdGTws8zDYYv2wxft05fz3g5vEDd89L3E/XkFl5olxWhNl8hcU6QBQGKIoc1pqBstYa1jEgchKcfaUqJ0nl7oSqqlwODfl1XZ8aNo57nstBwz7Yr310aLt28Ht0TpuLP4Ucdxal4PsUgmfIROmsGxBJpLxAEmeQ/AuNPf4U/TbAa0wL6RNK4YSVFqmvQEUDGRJkRBA7Bb4pkTN90YbfyRxmQhd5y3MAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;a github answer for Is yq available in GitHub Actions?&quot;
        title=&quot;&quot;
        src=&quot;/static/30dd49565f1f0694f75a838c2915840f/5a190/snippet.png&quot;
        srcset=&quot;/static/30dd49565f1f0694f75a838c2915840f/772e8/snippet.png 200w,
/static/30dd49565f1f0694f75a838c2915840f/e17e5/snippet.png 400w,
/static/30dd49565f1f0694f75a838c2915840f/5a190/snippet.png 800w,
/static/30dd49565f1f0694f75a838c2915840f/c1b63/snippet.png 1200w,
/static/30dd49565f1f0694f75a838c2915840f/0c3d0/snippet.png 1414w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;I wrote my workflow, using the action from the yq project itself, and sent it off to review. My colleague George Gastaldi looked at what I’d done, and pointed out yq was available on the runners. This matters, because we try and limit our use of external, ‘non-official’ actions, for supply chain security reasons.&lt;/p&gt;
&lt;p&gt;So I searched again to confirm, and … still found very little. To actually confirm, I had to merge and experiment.
And, indeed, the GitHub runners do come with yq pre-installed. They’ve had &lt;code class=&quot;language-text&quot;&gt;yq&lt;/code&gt; since 2021.&lt;/p&gt;
&lt;p&gt;This is the workflow step which alphabetises an antora playbook:&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;yaml&quot;&gt;&lt;pre class=&quot;language-yaml&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;      &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Alphabetise
        &lt;span class=&quot;token key atrule&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;token scalar string&quot;&gt;
          yq &apos;.content.sources |= sort_by(.url)&apos; antora-playbook.yml &gt; antora-playbook-sorted.yml
          mv antora-playbook-sorted.yml antora-playbook.yml&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;I’m hoping this blog can help the next person who might be trying to figure out how to use yq with GitHub Actions.
For everyone else, please appreciate my attempt to illustrate ‘yaml,’ by combining a yak and lots of marks and language.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/4bc900fffca303316546bf47c02180a9/09ede/yak.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 52.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB/ElEQVR42o2TbY/SQBSF+f9/wC8munHNxriIIBQqS9e2wrZQW6BCoWxLd2GBAgHCW8vrcaYIqFmNJ5lkOnP73HNn7oQmkwkGg0Ew6Hy73YJqv9/jOdH1X/f+jAuNRiN4nofFYoHpdIpOp4PVaoXZbHaCD/ouakYV4/EIu90uWNuRPY/ErTeb34E0w4Ys+r4fBFMwTSIKAuZk3m63wIWvYMki2GQC4m0GRqWMsqrgu5xFUc5hOBye3IaWy2UAWq/XAZS6ogGmaULgeYg3KdQLWahZHkw0jGrhKxriDRqSAEfNoZkXoSr5wFTgsNvtBhA6jqX3SYn026jo4JgYKmoemcRH6GIaTlEibvkAWv+SRDvLQZdEPD21D8D5fA7XdYPR7/fJOY3RarVgGAZosgwTRVXJQsvdwubisAoCHqsqbAK/51Owhc+wizLMmnEAHmunjo4HTkXhvV4PkXdvwTMR8jMLI/WBOGPRZKOwNQkPpFwnHYNdVqDk5fOlPN8eB7heKuHi5QsMCKCZuEaHOHKLebi1Mh7qOhyjhEwyBunu7uzwb/1G5ZGLSibi0Mg5Nb5JUDkWmiIjHY8gcvUGTCyCdJI5tw3+oSO07di4vnyNy4tXEEUBlmXhU/g97EYduqbg3jTObYP/kE9un7bUbDY9JfFJU1PRdtv8fADU4Q88nyyzacrvTQAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;a yak covered in marks&quot;
        title=&quot;&quot;
        src=&quot;/static/4bc900fffca303316546bf47c02180a9/5a190/yak.png&quot;
        srcset=&quot;/static/4bc900fffca303316546bf47c02180a9/772e8/yak.png 200w,
/static/4bc900fffca303316546bf47c02180a9/e17e5/yak.png 400w,
/static/4bc900fffca303316546bf47c02180a9/5a190/yak.png 800w,
/static/4bc900fffca303316546bf47c02180a9/c1b63/yak.png 1200w,
/static/4bc900fffca303316546bf47c02180a9/29007/yak.png 1600w,
/static/4bc900fffca303316546bf47c02180a9/09ede/yak.png 1710w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In hindsight, I perhaps should have been more precise and searched for “yq github runner,” but even if I had, the results are pretty much the same.&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title><![CDATA[Productivity is Messing Around and Having Fun]]></title><description><![CDATA[What is the happy path, for developers? It’s less boredom, and more play. Developer satisfaction, developer joy, and business results are…]]></description><link>http://hollycummins.com/productivity-messing-around-dpe-london/</link><guid isPermaLink="false">http://hollycummins.com/productivity-messing-around-dpe-london/</guid><pubDate>Tue, 25 Jun 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;What is the happy path, for developers? It’s less boredom, and more play.&lt;/p&gt;
&lt;p&gt;Developer satisfaction, developer joy, and business results are strongly correlated. And yet - many of our jobs are frustrating, filled with friction, and free of joy. What’s going on? How do we fix that? Is annoying waste inevitable? Can developer performance be tuned? Are productivity measurements helping or hurting us? How do we deal with fear at work? Will AI take our jobs? Finally, how can you persuade management to invest in boredom?&lt;/p&gt;
&lt;p&gt;Holly is an expert on play at work, unwise automations, and polar bears. Trisha is an expert on performance tuning, tooling and productivity. Come to this talk to find out what these topics have in common.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Quarkus Efficiency Secrets]]></title><description><![CDATA[What makes a platform efficient? Is it how quickly code executes, or is it how quickly developers can use it to solve problems? Quarkus…]]></description><link>http://hollycummins.com/quarkus-efficiency-quarkus-club/</link><guid isPermaLink="false">http://hollycummins.com/quarkus-efficiency-quarkus-club/</guid><pubDate>Thu, 20 Jun 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;What makes a platform efficient? Is it how quickly code executes, or is it how quickly developers can use it to solve problems? Quarkus makes both people and hardware more efficient. That’s cool, but how does it work? Usually, we expect to trade-off developer experience against runtime efficiency. In this session, Holly will dive into some of the technical underpinnings of Quarkus’s efficiency. She’ll give advice for those using or considering Quarkus - should you be doing reactive programming? Do native binaries run fastest? She’ll also share general principles and transferrable discoveries from the engineering team, such as knowing what you’re optimising for, avoiding cache pollution, and how to be static-but-dynamic.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Is efficiency a good thing?]]></title><description><![CDATA[We live in a golden age of efficiency. Our modern cloud native applications have tiny footprints. Our infrastructure is now code. Everything…]]></description><link>http://hollycummins.com/efficiency-staffplus/</link><guid isPermaLink="false">http://hollycummins.com/efficiency-staffplus/</guid><pubDate>Tue, 11 Jun 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;We live in a golden age of efficiency. Our modern cloud native applications have tiny footprints. Our infrastructure is now code. Everything is automated, even creative endeavours like writing and artwork. And yet. Despite all the optimisation, despite all the automation, many of us feel unproductive - and it’s worse than that. Busywork hasn’t gone away, our systems are stretched so thin any disturbance destabilises them, our people are burning out, and IT consumes more resources than ever before. What’s going on? Was efficiency the wrong goal, or are we just doing it wrong?&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Faster, greener, and happier- why Quarkus should be your next tech stack]]></title><description><![CDATA[Java never went away, but it’s having a renaissance. After some initial teething pains on the cloud (too big, too slow,
too hard to…]]></description><link>http://hollycummins.com/faster-greener-code-europe/</link><guid isPermaLink="false">http://hollycummins.com/faster-greener-code-europe/</guid><pubDate>Mon, 10 Jun 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Java never went away, but it’s having a renaissance. After some initial teething pains on the cloud (too big, too slow,
too hard to configure) a new breed of Java frameworks are changing everything. In this talk, Holly will introduce
Quarkus and then delve into some of the advanced features you might not know about. She’ll cover native binaries, what
makes Quarkus super-fast running on the JVM, TDD with Quarkus, and Quarkus’s carbon footprint. The talk includes some
theory (what underpins Quarkus’s surprising speed?) and also live demos (does Quarkus really start faster than a light
bulb? What does an integration testing flow with Quarkus look like?)&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Productivity is Messing Around and Having Fun]]></title><description><![CDATA[What is the happy path, for developers? It’s less boredom, and more play. Developer satisfaction, developer joy, and business results are…]]></description><link>http://hollycummins.com/productivity-messing-around-devoxx/</link><guid isPermaLink="false">http://hollycummins.com/productivity-messing-around-devoxx/</guid><pubDate>Thu, 09 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;What is the happy path, for developers? It’s less boredom, and more play.&lt;/p&gt;
&lt;p&gt;Developer satisfaction, developer joy, and business results are strongly correlated. And yet - many of our jobs are frustrating, filled with friction, and free of joy. What’s going on? How do we fix that? Is annoying waste inevitable? Can developer performance be tuned? Are productivity measurements helping or hurting us? How do we deal with fear at work? Will AI take our jobs? Finally, how can you persuade management to invest in boredom?&lt;/p&gt;
&lt;p&gt;Holly is an expert on play at work, unwise automations, and polar bears. Trisha is an expert on performance tuning, tooling and productivity. Come to this talk to find out what these topics have in common.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Six things we learned implementing Rockstar on Quarkus]]></title><description><![CDATA[Let’s run Rockstar programs on Quarkus! What could possibly go wrong? Rockstar is an example of an “esoteric language,” designed to be…]]></description><link>http://hollycummins.com/rockstar-devoxx/</link><guid isPermaLink="false">http://hollycummins.com/rockstar-devoxx/</guid><pubDate>Wed, 08 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Let’s run Rockstar programs on Quarkus! What could possibly go wrong?&lt;/p&gt;
&lt;p&gt;Rockstar is an example of an “esoteric language,” designed to be interesting rather than intuitive, efficient or especially functional. Rockstar’s interesting feature is that its programs use the lyrical conventions of eighties rock ballads. Rockstar has been implemented in many languages, but not as a JVM language. This was clearly (clearly!) a gap that needed fixing, so Holly and Hanno have stepped in to make sure us JVM folks aren’t missing out. As a bonus, because “Bon Jova” is a JVM language, it can take advantage of Quarkus-y goodness. Along the way, a lot was learned about eighties music, classloaders, parsing, bytecode manipulation, and the important relationship between language style, syntax, and semantics.&lt;/p&gt;
&lt;p&gt;There will be live coding, live singing and live guitar!&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Java Annoted Featured Content – The Long Version]]></title><description><![CDATA[I’m a JetBrains Community Contributor, and I was
honoured to be invited to provide featured content for the Java Annotated
newsletter. A…]]></description><link>http://hollycummins.com/java-annotated-featured-content/</link><guid isPermaLink="false">http://hollycummins.com/java-annotated-featured-content/</guid><pubDate>Wed, 01 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I’m a &lt;a href=&quot;https://www.jetbrains.com/lp/jetbrains-community-contributor/&quot;&gt;JetBrains Community Contributor&lt;/a&gt;, and I was
honoured to be invited to provide featured content for the &lt;a href=&quot;https://www.jetbrains.com/lp/jam/&quot;&gt;Java Annotated&lt;/a&gt;
newsletter. A week before it was due, I had a blank page. And then the day before it was due, I had a blank page. The
day it was due, I had been thinking really hard, and had … a blank page with a few scraps of links. So I continued
working on it. At some point, near the end of the day it was due, I reached out to the JetBrains team to ask how long it
should be. “Oh, a paragraph or two” was the answer. “So, uh, eight paragraphs would be too much?” Yes. Yes, it seemed it
would. Apparently, that’s what my own blog is for.&lt;/p&gt;
&lt;p&gt;So, because I don’t like throwing things out, please enjoy the full, with-lots-of-extra-thoughts, version of the Java
Annotated Monthly Featured content. Or, if you prefer the short version, it’s coming
soon &lt;a href=&quot;https://blog.jetbrains.com/idea/2024/04/java-annotated-monthly-may-2024/&quot;&gt;on the JetBrains site&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This past month, I’ve been enjoying the
new &lt;a href=&quot;https://www.jetbrains.com/help/idea/full-line-code-completion.html&quot;&gt;full line code completion&lt;/a&gt;. There’s a lot of
things to like about it; the feature is included in my existing IntelliJ IDEA Ultimate subscription, it runs locally, is
privacy-friendly, is integrated into my existing tools, and it solves a real problem (typing is boring).&lt;/p&gt;
&lt;p&gt;We’re in the midst of a full-on AI hype cycle at the moment. Last summer, Gartner announced
that &lt;a href=&quot;https://web.archive.org/web/20230816114302/https://www.gartner.com/en/newsroom/press-releases/2023-08-16-gartner-places-generative-ai-on-the-peak-of-inflated-expectations-on-the-2023-hype-cycle-for-emerging-technologies&quot;&gt;we had reached the peak of inflated expectations&lt;/a&gt;.
Right now, many of us are flip-flopping back and forth between excitement and cynicism as we slide back down the hype
curve. The potential of these tools is enormous, but so many of them promise a lot, and deliver … errors. And, if you
look at the actual cost of training and running the larger models, it’s eye-wateringly, jaw-droppingly, horrifyingly,
enormous.&lt;/p&gt;
&lt;p&gt;There’s another problem with AI, which affects me personally. AI development all about Python, and I just don’t do
Python. I’ve been a Java developer my whole career, and I quite like the idea of keeping it that way. If Python is the
language of AI, does that mean us Java developers can ignore AI until we reach the trough of disillusionment, and after
that don’t need to worry about it any more? Does it mean us Java developers are &lt;em&gt;excluded&lt;/em&gt; from AI, whether we like it
or not?&lt;/p&gt;
&lt;p&gt;No. AI isn’t going away, but we’re starting to get a better understanding of where it’s useful and where it isn’t. Molly
White, of &lt;a href=&quot;https://www.web3isgoinggreat.com/&quot;&gt;web3isgoinggreat&lt;/a&gt; fame, has just published a fantastic piece
called &lt;a href=&quot;https://www.citationneeded.news/ai-isnt-useless/&quot;&gt;“AI Isn’t Useless”&lt;/a&gt;. I also wrote on my blog last month about
the big question of &lt;a href=&quot;https://hollycummins.com/will-ai-take-our-jobs/&quot;&gt;whether AI will take developer jobs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And AI is opening up to Java developers. This isn’t just AI-powered Java coding assistants; us Java developers can now
&lt;em&gt;create&lt;/em&gt; AI tools. &lt;a href=&quot;https://github.com/langchain4j/langchain4j&quot;&gt;LangChain4j&lt;/a&gt; simplifies integrating machine learning
into Java applications. The Quarkus team have applied the Quarkus principle
of &lt;a href=&quot;https://quarkus.io/developer-joy/&quot;&gt;developer joy&lt;/a&gt; to
their &lt;a href=&quot;https://quarkus.io/blog/quarkus-meets-langchain4j/&quot;&gt;Langchain4j integration&lt;/a&gt;, so it’s really nice. Last month,
they released an &lt;a href=&quot;https://docs.quarkiverse.io/quarkus-langchain4j/dev/rag-easy-rag.html&quot;&gt;Easy RAG&lt;/a&gt; extension, which
allows you to set up a Retrieval Augmented Generation (RAG) application with just a single piece of configuration. You
tell the &lt;code class=&quot;language-text&quot;&gt;easy-rag&lt;/code&gt; extension what directory your documents (PDF, Word files, etc) are in, and it will ingest them,
decode them, and use them to teach itself. This makes it way more useful than a generic LLM, because it means the model
has knowledge of the domain-specific things that you care about. I chat to some of my Quarkus colleagues about the
Quarkus + LangChain4j in &lt;a href=&quot;https://www.youtube.com/watch?v=EeR_8HMFwN4&quot;&gt;the latest episode of Quarkus Insights&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Another course-correction that I’m excited about is the revival of symbolic reasoning (that is, rules). We’re going to
start talking more about combining large language models with symbolic reasoning. Rules engines are cheap to execute,
easier to reason about, and reassuringly correct. Mario Fusco did a talk at Devoxx Greece about how LLMs and symbolic
reasoning are complementary. The video isn’t out yet, although it might have appeared
on &lt;a href=&quot;https://www.youtube.com/@DevoxxForever&quot;&gt;the Devoxx YouTube channel&lt;/a&gt; by the time you read this. In the meantime, he’s
prepared several sample applications,
including &lt;a href=&quot;https://github.com/mariofusco/quarkus-drools-llm?tab=readme-ov-file#the-airline-chatbot-example&quot;&gt;an airline chatbot&lt;/a&gt;.
He’s also got nice explanation of why symbolic reasoning is important in
the &lt;a href=&quot;https://github.com/mariofusco/quarkus-drools-llm&quot;&gt;readme&lt;/a&gt;. I think we’ll be seeing more of this kind of hybrid
approach in the future, as our industry matures in how we use LLMs.&lt;/p&gt;
&lt;p&gt;Being able to leverage AI from Java is important, because Java is getting better and better. One JVM improvement I’m
excited about is project Leyden. Leyden isn’t news, but we’re seeing a nice stream of news and JEPs. Per-Åke Minborg
from Oracle gave a nice Leyden updateat this year’s Jfokus. Both
the &lt;a href=&quot;https://www.jfokus.se/jfokus24-preso/Project-Leyden--Capturing-Lightning-in-a-Bottle.pdf&quot;&gt;slides&lt;/a&gt;
and &lt;a href=&quot;https://www.youtube.com/watch?v=CeO9RaJhjxg&quot;&gt;video&lt;/a&gt; are now available.&lt;/p&gt;
&lt;p&gt;Leyden is part of a general movement to make Java start faster and run leaner. Historically, JVMs were optimised for
dynamism. You could completely change the behaviour and dependencies of your application without stopping it. This is
very clever engineering, but dynamism has a cost, and a highly dynamic runtime in a container is pointless. Even outside
a container, realistically, most of us would (and should!) prefer to manage production updates through a CI/CD pipeline
rather than patches to a live server. The good news is that Java is evolving, to reduce repeated work and unecessary
classloading. Leyden is part of a bigger (and exciting!) trend of technologies to make Java start faster and run leaner,
which also includes GraalVM, CRaC, and &lt;a href=&quot;http://quarkus.io&quot;&gt;Quarkus&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Zero Waste, Radical Magic, and Italian Graft – Quarkus Efficiency Secrets]]></title><description><![CDATA[What makes a platform efficient? Is it how quickly code executes, or is it how quickly developers can use it to solve problems? Quarkus…]]></description><link>http://hollycummins.com/quarkus-efficiency-qcon/</link><guid isPermaLink="false">http://hollycummins.com/quarkus-efficiency-qcon/</guid><pubDate>Tue, 09 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;What makes a platform efficient? Is it how quickly code executes, or is it how quickly developers can use it to solve problems? Quarkus makes both people and hardware more efficient. That’s cool, but how does it work? Usually, we expect to trade-off developer experience against runtime efficiency. In this session, Holly will dive into some of the technical underpinnings of Quarkus’s efficiency. She’ll give advice for those using or considering Quarkus - should you be doing reactive programming? Do native binaries run fastest? She’ll also share general principles and transferrable discoveries from the engineering team, such as knowing what you’re optimising for, avoiding cache pollution, and how to be static-but-dynamic.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[What is cloud native and how can it generate business value?]]></title><description><![CDATA[Knowing what cloud native is and where it benefits enterprise operations is essential for competitive cloud development]]></description><link>http://hollycummins.com/what-is-cloud-native-and-how-can-it-generate-business-value/</link><guid isPermaLink="false">http://hollycummins.com/what-is-cloud-native-and-how-can-it-generate-business-value/</guid><pubDate>Tue, 02 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Knowing what cloud native is and where it benefits enterprise operations is essential for competitive cloud development&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Will Generative AI Kill Developer Jobs?]]></title><description><![CDATA[Large language models are astonishingly good at producing large volumes of code quickly.
That’s also, sort of, what I do for a living…]]></description><link>http://hollycummins.com/will-ai-take-our-jobs/</link><guid isPermaLink="false">http://hollycummins.com/will-ai-take-our-jobs/</guid><pubDate>Thu, 21 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Large language models are astonishingly good at producing large volumes of code quickly.
That’s also, sort of, what I do for a living, except for the “quickly” part. And the “large volumes” part.
So, will generative AI eliminate us developers?&lt;/p&gt;
&lt;p&gt;Spoiler alert:&lt;/p&gt;
&lt;p&gt;No.&lt;/p&gt;
&lt;p&gt;I firmly believe developers are &lt;em&gt;not&lt;/em&gt; going to be replaced by these models.
Some industry figures are saying the opposite, quite loudly, so this isn’t an easy one to call.
I’ll admit, some of the signs don’t look so good for us developers.&lt;/p&gt;
&lt;p&gt;It hurts my professional pride to admit it, but LLMs are much better than developers at producing large quantities of
code in a short time.
And where a machine can do a job better, in general, job markets will shift and eliminate the human jobs.
History is littered with jobs whose practitioners thought they were special and unique and un-disruptable, until …
their jobs disappeared.&lt;/p&gt;
&lt;p&gt;And, overall, I’m ok with that. These shifts can be painful at the time; no one likes losing their livelihood, much less
losing their whole industry.
If other opportunities don’t become available, it’s devastating for the people affected.
It’s super-important, and humane, and fair, that businesses and governments help those who are economically displaced
get back to meaningful employment.
And we need to keep an eye on where the money is flowing when people are replaced by machines.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/a16902079f91dde4958acb5c9340b5f0/161ec/machine.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 68.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAABYlAAAWJQFJUiTwAAADAklEQVR42o1U+U+TQRT8/lcTNUZNiInRRBMNGlGJiqhchXIoN+UsQqEnvSi9uSm00IvSg7bQAygwzm7gJxPjJi+7277Mzps371PAdX19/Vf8a11dXSGZPETk4ACR/QMUC0Xc4ij4j3V5eSmjVqvJeyKRwODIKIY042hX92BsfBLVSkXmKAJ1by8Mj88Pl8cD54obtmUXlhxOWOwOmKw2mG12eRexH40iFNrF3IIeOpMZQ5NT0M7rsOLxIri2DiUeT8DqdCKeSiEqyojGEYnFEGbsx+NIZbM4IKNsPo90LofTclmWmUynkTo+xno4AiMfDIXD8PoDUKLRGLzBICpnZ/KVfLGI6vm5vBd41huMaHjfiBntLHIEuGDZOr0BTd9boDOaENjZgZnM17e24AuuQkkkkgRcxbLbgzt3H8jSBeDZxQVcLP/l63pMEOxtwwfUv3mHaZ7VPX2wu92IkWWE7ANra9iiDN4AGeYLBZjtdhRLJZkYpQRiCYZt7SpoZrSY1S2gsakZ9+4/RJwE0ukMBkbH8KNLjebWdgyPabBHbR2uFSg1dkZnMOGkXMIStejrH8DwqAYqdTe+Nn9D46cv0BLw4+cmqDrVuKRljgj4c2AQrbxPzf6Gx++XmktAkeAm1QwFP2Op5WoF4+xc3ZOneMUSHz2uw7PnL9Db9wuh3T3J/rx2IXcDu2xnQwWpfZZu41naxsKSU5kMSuUKAatSeAvt0tHdIy3RpuqCyWKVNmpp74CGD05Mz6B/aAQer0/qHaFUwl7KFQEX2K1k6ghV6nZKLcVePDlBb/8gWjo6YWMXQ/TqxvY2rARd29yUsUurFJh3cnqKJAm5CK5w0LBA6mF6LkebpGmNI5YvfLexE5JJgn02X5C/H/H/FHeRd5ubuTl7aD85eoKhdlEPk5gMhoWMDEtW6M1L0gF6swVG3he5z9GD8/SmIGGkLA5ay0n/iunyCdsIwGzuGNFYnHZII8vJKJJphbMptBRRu5ll0UDxYajdzHWVeh+T2eFhSu7i4/AHAl/WEvGH3OQAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;a made up machine&quot;
        title=&quot;&quot;
        src=&quot;/static/a16902079f91dde4958acb5c9340b5f0/5a190/machine.png&quot;
        srcset=&quot;/static/a16902079f91dde4958acb5c9340b5f0/772e8/machine.png 200w,
/static/a16902079f91dde4958acb5c9340b5f0/e17e5/machine.png 400w,
/static/a16902079f91dde4958acb5c9340b5f0/5a190/machine.png 800w,
/static/a16902079f91dde4958acb5c9340b5f0/c1b63/machine.png 1200w,
/static/a16902079f91dde4958acb5c9340b5f0/29007/machine.png 1600w,
/static/a16902079f91dde4958acb5c9340b5f0/161ec/machine.png 1840w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;But even though job loss hurts, the alternative is worse.&lt;/p&gt;
&lt;p&gt;I wouldn’t want me, or anyone else, to be spending time and effort doing a job that a machine could do. That’s just
pointless busywork.
Busywork doesn’t help the individuals involved, and it definitely doesn’t help us as a species.
Automation has been responsible
for &lt;a href=&quot;https://ourworldindata.org/a-history-of-global-living-conditions&quot;&gt;a huge rise in global living standards&lt;/a&gt; over the
past two hundred years.&lt;/p&gt;
&lt;h2&gt;A short, selective, history of automation.&lt;/h2&gt;
&lt;p&gt;Many things we used to do by hand, such as washing clothes or weaving fabric, are now done by machines.
(The economic disruption caused by automated fabric weaving led to a great deal of social disruption, and gave us the
words ‘sabotage’ and ‘Luddite’.)&lt;/p&gt;
&lt;p&gt;Jobs have disappeared, and technology was to blame. Automation killed the job of the washerwoman, and the stockinger,
and also the knocker-up.
But wait, what on earth is a knocker-up?&lt;/p&gt;
&lt;p&gt;Do you remember alarm clocks? They were the things we used to use before we all used our phones as alarms.
They were mechanical, and are themselves a relatively recent invention.
Before people had alarms, how did they get to work at the right time?&lt;/p&gt;
&lt;p&gt;Often, “the right time’ was the time that they got to work. Cows and carrots and fields are pretty forgiving of
tardiness.
It was only when people starting working together, in shifts, in expensive factories, that clock-time became important.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/89c6ef32242c53496c3293e0b43e0512/10c1e/knocker-up.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 55.99999999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAAA70lEQVR42qWS3W6CQBCFef83shixkTRNKKxGVxa9aPlZoKyGtBJFEE7jNJrG9ELwXH0z2T2zMzsabtS2LWSSYH84XOMu0m4TTdNgODERxjHFoZTI8/xuc+2/5NAYg7susWU7ePf9xwyVUhCcEwvhwQ/CfobnC83pRCyjCGVZXsfQaYaXyn4kMeO/rTLG4C6XZFbXdT9DZ8HxYtvEg4EO/UkHnznYfX/1a/mVTWFaFvFoZMDzBPibiTSOuhleDso0BZvPicfGM5IkxWoxxSb77PfCqqpo585zU1mG8njEx1pgu1GPrc1fhUGAoiju/pQfguFZkeFas48AAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A person with a long stick, standing in front of a window&quot;
        title=&quot;&quot;
        src=&quot;/static/89c6ef32242c53496c3293e0b43e0512/5a190/knocker-up.png&quot;
        srcset=&quot;/static/89c6ef32242c53496c3293e0b43e0512/772e8/knocker-up.png 200w,
/static/89c6ef32242c53496c3293e0b43e0512/e17e5/knocker-up.png 400w,
/static/89c6ef32242c53496c3293e0b43e0512/5a190/knocker-up.png 800w,
/static/89c6ef32242c53496c3293e0b43e0512/c1b63/knocker-up.png 1200w,
/static/89c6ef32242c53496c3293e0b43e0512/29007/knocker-up.png 1600w,
/static/89c6ef32242c53496c3293e0b43e0512/10c1e/knocker-up.png 2090w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;This new need for punctuality spawned a new job: the knocker-up.&lt;/p&gt;
&lt;p&gt;The knocker-up was a human alarm clock.
Knockers-up would visit their clients and wake them up, either by tapping on the window with a stick, or by shooting
their window with pea-shooters.&lt;/p&gt;
&lt;p&gt;(If you’re reading this and are confused or horrified, the important context you’re missing is that ‘knocking up’
means ‘to wake someone up’ in UK English.
In North American English ‘knocking up’ means ‘to impregnate’, but that kind of service was definitely outside the job
description here.)&lt;/p&gt;
&lt;p&gt;Knocking-up was a job created by the changing technology of the industrial revolution, but changing technology also
eliminated the profession.
As more people got mechanical alarm clocks, the need for the knocker-up faded.
The need didn’t fade as fast as you might think, though;
professional knocking-up lasted to the 1940s and 1950s, and in some parts of
England &lt;a href=&quot;https://www.bbc.co.uk/news/uk-england-35840393&quot;&gt;it hung around until the 1970s.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Even though it survived a surprisingly long time, it’s easy to see why the knocking-up industry was ultimately doomed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A convenient technological alternative was available&lt;/li&gt;
&lt;li&gt;The pool of the population who need waking up is limited; only people working outside the home on a strict schedule
wanted the service&lt;/li&gt;
&lt;li&gt;Each client needed the service a maximum of once a day; no matter how much marketing a knocker-up did, no matter how
great the knocking-up service, people didn’t need re-waking once they were already awake&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A cheap alternative, and finite demand. Clearly, knocking-up couldn’t last.&lt;/p&gt;
&lt;h2&gt;Why software development is different (really!)&lt;/h2&gt;
&lt;p&gt;So what’s different for developers? Almost everything.
Although software-writing automation is (sort of) available, it is &lt;em&gt;not&lt;/em&gt; a convenient replacement for human developers.
That’s true now, and it’s likely to stay true.
Crucially, too, the world’s demand for software is apparently infinite, or would be if there weren’t budget constraints.
That means demand for software developers is large, and growing.&lt;/p&gt;
&lt;h2&gt;The role of the developer - writing code is only a small part&lt;/h2&gt;
&lt;p&gt;Why can’t Copilot, or ChatGPT, or Devin, or other generative AI equivalents, do the job of a software developer?
These tools are very, very, good at copying and pasting code from the internet.
Software developers are
also &lt;a href=&quot;https://stackoverflow.blog/2021/09/28/become-a-better-coder-with-this-one-weird-click/&quot;&gt;very good&lt;/a&gt; at copying and
pasting code from the internet, but these tools are even better.&lt;/p&gt;
&lt;p&gt;But the job of a software developer is not to copy and paste from the internet.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/2c5b55e042e34974ddf25a5c8474d1eb/c3611/copy-paste.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 34%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAxElEQVR42p3QPw6CMBQGcM7GgAeQEU9giOEGHABTexCZ9AAOREcHJ/9AWjXKQDA6VILlE4gwiRC/NHlN0/7y+hQ0JstXVu6SJIEQAl2ifKU+kMxrHEc48i3CkEPK139gEfGIELE1Ltcd7rcT5jMXlFKkadodrDo7+D7OfINnvMdytYBljaCqKmzbrr9e3f0JSinL6jhjmOYQE0qgaT0YxgCuO23FGjtkjOWgCb2vgxCCIAhaocYZVo845/A8r55Zcd4FfAM3jhH/wr24HwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;a copy and paste key with the stack overflow logo&quot;
        title=&quot;&quot;
        src=&quot;/static/2c5b55e042e34974ddf25a5c8474d1eb/5a190/copy-paste.png&quot;
        srcset=&quot;/static/2c5b55e042e34974ddf25a5c8474d1eb/772e8/copy-paste.png 200w,
/static/2c5b55e042e34974ddf25a5c8474d1eb/e17e5/copy-paste.png 400w,
/static/2c5b55e042e34974ddf25a5c8474d1eb/5a190/copy-paste.png 800w,
/static/2c5b55e042e34974ddf25a5c8474d1eb/c1b63/copy-paste.png 1200w,
/static/2c5b55e042e34974ddf25a5c8474d1eb/29007/copy-paste.png 1600w,
/static/2c5b55e042e34974ddf25a5c8474d1eb/c3611/copy-paste.png 2992w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;That’s part of the job, but only part.&lt;/p&gt;
&lt;p&gt;The role of the knocker-up is fairly well-defined. It’s … to wake people up.
This is different from the role of, say, a hairdresser, who is partly there to cut hair, and partly there to act as a
therapist.&lt;/p&gt;
&lt;p&gt;The role of a software developer is similarly blended, except the computer is the one on the therapy couch.
Even before we start writing code, our job is to understand what problem is being solved,
understand why the original problem statement was flawed, re-define the problem,
and explore risks.
Then, after we’ve written (or copy-and-pasted) the code, our job is to
get code from the internet all the way into production,
debug the code, debug the code again,
understand the computer’s deepest secrets, try and stop the computer system from going completely mad, work with
colleagues to integrate incompatible systems,
manage stakeholders, manage other stakeholders who are quite obstreperous,
debug the code again since it’s doing something in production which no one has seen before,
and then re-define the problem again.&lt;/p&gt;
&lt;p&gt;Fundamentally, our job as software developers is to solve problems which have never been solved before.
I mean, if the problem had been solved already, why would we want to solve it again?
Let’s just get a computer to do that for us.&lt;/p&gt;
&lt;h2&gt;Demand is infinite&lt;/h2&gt;
&lt;p&gt;In my experience, software creates the need for … more software.
Think, for example, of Jenkins, or Tekton. Or Kubernetes. Or, in fact, the whole of the CNCF landscape.
These are complex pieces of software which only came into existence because other software existed.
Think of ad-blockers; their whole existence is a response to other software.&lt;/p&gt;
&lt;p&gt;Software multiplies. Software snowballs.&lt;/p&gt;
&lt;p&gt;The world doesn’t just demand software. It demands:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;software to do stuff&lt;/li&gt;
&lt;li&gt;software to do more stuff&lt;/li&gt;
&lt;li&gt;software to bypass advertisements in the software&lt;/li&gt;
&lt;li&gt;software to bypass the bypass software so ads still show (the ad-blocker arms race is creating a &lt;em&gt;lot&lt;/em&gt; of jobs)&lt;/li&gt;
&lt;li&gt;software to monitor the software&lt;/li&gt;
&lt;li&gt;software to debug the software&lt;/li&gt;
&lt;li&gt;software to manage the software&lt;/li&gt;
&lt;li&gt;software to write the software&lt;/li&gt;
&lt;li&gt;software to manage the software that writes the software&lt;/li&gt;
&lt;li&gt;software to try and avoid skynet&lt;/li&gt;
&lt;li&gt;software to tell people about software&lt;/li&gt;
&lt;li&gt;software to work out the meaning of life&lt;/li&gt;
&lt;li&gt;software to gamify software&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Past productivity gains did not eliminate developer jobs&lt;/h2&gt;
&lt;p&gt;My assertion that the development for software developers will increase isn’t just a reassuring wish.
We can look at the impact of earlier changes in our industry.
Each one made software development easier (in some way), made it accessible to a wider group, and made developers more
productive.
And yet following each productivity gain, demand for developers &lt;em&gt;increased&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Programming a computer used to be &lt;em&gt;hard&lt;/em&gt;.
Before we had IDEs and MacBooks, we had punch cards and vacuum tubes.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/a08425422a86d2bff73cb20249ecc65c/7a8f9/punchcard.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 37.99999999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAABYlAAAWJQFJUiTwAAABTklEQVR42nWRi46CMBBF/f8vW10REEHRbFyhyEN5tJRXBO9OISYbopM0c2Y6XG7bBf5FW0uUIocsOaoyQ8nTqRYpmoqjkRyCKxa0X4xrHosXdG0DHh3QpEfUdxdVvEN9c9DcdqhCDYKtUYYm6mQHmexRpyfk0Ql9388En88RRle3A4nRcGyiZEtUkYHubkGSYJ1YVOuQ1zX9jDixkYcuCT4+C/KrCXE1KOsQ/hcKfwkebMiZPmYeUPZXNEMcWrizPfrH3CEmwUoKpN4a+WWJzNeR+8TeCjnTkVG/YBqKwKC+RvU3UmYg8R0Mw8cjC2TMBKcPlYhyqVyJQIOk+5SxjTb7QcfPKOkO82CL2LffHPn1KF1LAw5iz0L8u52yt0V03iA868Q27e+RMBdJcER0sRF6Lobn8F5QhbI/DMO0+onVK/Yj91PvVZOzuTsl+AccUWCGGwN11wAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;a hand-drawn punch card&quot;
        title=&quot;&quot;
        src=&quot;/static/a08425422a86d2bff73cb20249ecc65c/5a190/punchcard.png&quot;
        srcset=&quot;/static/a08425422a86d2bff73cb20249ecc65c/772e8/punchcard.png 200w,
/static/a08425422a86d2bff73cb20249ecc65c/e17e5/punchcard.png 400w,
/static/a08425422a86d2bff73cb20249ecc65c/5a190/punchcard.png 800w,
/static/a08425422a86d2bff73cb20249ecc65c/c1b63/punchcard.png 1200w,
/static/a08425422a86d2bff73cb20249ecc65c/29007/punchcard.png 1600w,
/static/a08425422a86d2bff73cb20249ecc65c/7a8f9/punchcard.png 2988w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;In 1947, Kathleen Booth created the first assembly language, which made programming more efficient.
In 1956 John Backus and an IBM team developed the first high-level language, FORTRAN, which made programming more
efficient.
By the mid-1960s, higher level languages were enriched with reusable libraries, which made programming more efficient.
Somewhere in the 1980s we got frameworks, which made programming more efficient.
In the 1990s we got mainstream garbage collection, which made programming more efficient.
In the 2000s we got and smart completion, which made programming more efficient.&lt;/p&gt;
&lt;p&gt;So did each productivity improvement reduce the number of developers working in the industry?
Er, not exactly. In the 1950s, there were a few hundred developers in the world.
In 1970, there
were &lt;a href=&quot;https://computinged.wordpress.com/2013/01/03/how-many-programmers-are-there-from-the-computer-boys-take-over/&quot;&gt;around half a million&lt;/a&gt;.
In 2024, there are
around &lt;a href=&quot;https://www.statista.com/statistics/627312/worldwide-developer-population/&quot;&gt;28 million developers&lt;/a&gt; in the world.
It’s Jevons paradox, but for people. And exponential.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/b55a27018e336130ff4ae3a466102e81/5f78c/developer-stats.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 70.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAABYlAAAWJQFJUiTwAAABxUlEQVR42pWTiY7iMBBE+f+f45AQICEIZCF3SJw4d1Lr6hlnyOwhTUtWMLZfV7XbK/wgpmn6Y3yPFX4YFvJ6vXC73eA4Dq7XKy5mZFm2BCqlZAzDgL7v0batfAkpigJxHCMMQ0RRJLDT6QTXdfH45cLzPGitP4D2UNM0SJJkTsA5lXBcLhfsdjtsNhscj0ej7IY8V7LvmdWouvHLclmWsxrKJpxzgs7nsyghhGqohA64ztDtgMNDzTUVYFVVsiHPc7HDg+v1WhRtt1vs93sEQYCu62Qfv3VdYzJg/1UhzMrlpdA71fm+L2oOh4NAWCcmsIrthVDhwBr3o7HbSAK7Nit8Pp9ii8o4WCsCmei9zoxxHAWqmlGgw9vaDORl0Or9fkeapjJnbXnQWuS3/5wXukJatgLj5S2AtExLdd0IzPYbNxLIaNtOlH0uwolKNEbdZP5jgkUN32/ZAr/b5O9xnDCYqaoH5FU3J7ZlmYHMbBdcL4TSDbJCw4sz+KlClGlcvRSPWCFRGnlRojKu6IiloKCF5fdn5TwCuEGCwMA8P0BkXkduXo8fRKZ1QuhCGReJtBHbjH3LTrDlWP3rrf4teIj1/l/8BhjtPA8E/+uQAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;a chart showing an exponential rise in the number of developers&quot;
        title=&quot;&quot;
        src=&quot;/static/b55a27018e336130ff4ae3a466102e81/5a190/developer-stats.png&quot;
        srcset=&quot;/static/b55a27018e336130ff4ae3a466102e81/772e8/developer-stats.png 200w,
/static/b55a27018e336130ff4ae3a466102e81/e17e5/developer-stats.png 400w,
/static/b55a27018e336130ff4ae3a466102e81/5a190/developer-stats.png 800w,
/static/b55a27018e336130ff4ae3a466102e81/c1b63/developer-stats.png 1200w,
/static/b55a27018e336130ff4ae3a466102e81/29007/developer-stats.png 1600w,
/static/b55a27018e336130ff4ae3a466102e81/5f78c/developer-stats.png 1606w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;em&gt;&lt;a href=&quot;https://computinged.wordpress.com/2013/01/03/how-many-programmers-are-there-from-the-computer-boys-take-over/&quot;&gt;Source for earlier data&lt;/a&gt;, &lt;a href=&quot;https://www.statista.com/statistics/627312/worldwide-developer-population/&quot;&gt;source for recent data&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;As Gergely Orosz put it this
week, &lt;a href=&quot;https://newsletter.pragmaticengineer.com/p/is-the-ai-developera-threat-to-jobs&quot;&gt;writing about the same question&lt;/a&gt;,
the goal of COBOL “was to allow business people with no programming background to use it. In the end, COBOL didn’t
remove the need for developers: instead, it created demand for COBOL developers.”&lt;/p&gt;
&lt;h2&gt;But our jobs will change&lt;/h2&gt;
&lt;p&gt;Even if AI is unlikely to take our jobs, it doesn’t mean it won’t &lt;em&gt;change&lt;/em&gt; them.
When a productivity improvement is available, it is expected that people use it.
None of us, not even the most curmudgeonly technology-resistant developer, program like it’s 1947.
If we did, we wouldn’t have achieved cat videos and &lt;em&gt;Baldur’s Gate&lt;/em&gt; and online shopping.
None of us are using punch cards, or &lt;code class=&quot;language-text&quot;&gt;GOTO&lt;/code&gt; statements. We use IDEs, and Testcontainers, and Quarkus.
We wouldn’t write a greenfield application in COBOL, except as a dare.
Some hardcore folks use assembler, but only in contexts where being close to the metal is worth the productivity
penalty.&lt;/p&gt;
&lt;p&gt;I have some questions about how much the current batch of tools &lt;em&gt;actually&lt;/em&gt; improve productivity, but that’s a separate
topic.
I think we can safely assume that some of the quality issues with generative AI will be ironed out.
These tools will become embedded in our workflow, just as IDEs and compilers have.
They will take away some drudgery and toil, but they will not take the jobs.
The computer assistants are coming, but the people aren’t going away.&lt;/p&gt;
&lt;h1&gt;Further reading&lt;/h1&gt;
&lt;p&gt;This topic isn’t going away. Here are some other takes that I found well worth reading:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://newsletter.pragmaticengineer.com/p/is-the-ai-developera-threat-to-jobs&quot;&gt;Is the “AI developer”a threat to jobs – or a marketing stunt?&lt;/a&gt;,
Gergely Orosz. March 19, 2024.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://stackoverflow.blog/2024/06/10/generative-ai-is-not-going-to-build-your-engineering-team-for-you/&quot;&gt;Generative AI Is Not Going To Build Your Engineering Team For You&lt;/a&gt;,
by Charity Majors. June 10, 2024.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://alonso.network/the-recurring-cycle-of-developer-replacement-hype/&quot;&gt;The Recurring Cycle of ‘Developer Replacement’ Hype&lt;/a&gt;
presents a nice historical perspective. It also points out that code is not an asset, it’s a liability. If AI makes it
easier to generate a lot of that liability, the need for people who can manage the overall system is going to become
higher.&lt;/li&gt;
&lt;li&gt;At GOTO Copenhagen 2024, Kent Beck was asked if AI would end the job of a developer. He had a two-word answer: ”
Jevon’s Paradox.” In other words, reducing the cost of a thing increases demand for it. This is a simular argument to
mine, but I hadn’t thought of linking it to Jevon’s Paradox, even though I actually spend a lot of time thinking about
Jevon’s paradox in other contexts.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://newsletter.pragmaticengineer.com/p/ai-tools-for-software-engineers-simon-willison&quot;&gt;AI tools for software engineers, but without the hype&lt;/a&gt;,
September 25,2024. The inaugural podcast from Gergely Orosz featured Simon Willison, who has been doing a lot of
interesting writing and talking about AI. The whole podcast is worth a listen, but there’s a discussion about the
impact on jobs towards the end. Simon’s take is that AI won’t replace developer jobs, but developers who don’t become
proficient with the tools may become out-competed.&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title><![CDATA[The future of development: Are our jobs getting harder or easier?]]></title><description><![CDATA[In the early days of computing, software developers had to encode their programs on punch cards, and carry the bits around by hand. By the…]]></description><link>http://hollycummins.com/jobs-harder-easier-sphere/</link><guid isPermaLink="false">http://hollycummins.com/jobs-harder-easier-sphere/</guid><pubDate>Fri, 15 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In the early days of computing, software developers had to encode their programs on punch cards, and carry the bits around by hand. By the 1970s they had the joy of keyboards and displays. Sadly, those oppressed developers had to wear flare trousers, work in C, and manage their own memory. By 2000 the memory thing was sorted out, but the trousers were arguably worse, and developers had to maintain their own hardware. Now, our hardware is someone else’s problem, everything is open source, AI can write our code, and we have a choice whether to work in Java, Kotlin, Javascript, Ruby, Go, Python, Rust, or Typescript. On the other hand, now we have yaml. And many of us find we have to work in ALL of Java, Kotlin, Javascript, Ruby, Go, Python, Rust, or Typescript, all while managing a cloud, becoming security experts, learning CSS, and debugging the code our AI “helper” wrote. And we’re supposed to be full-stack, and shifting left, and building up open source in our free time. Are we living the dream or sinking under cognitive overload? And is open source helping or hurting?&lt;/p&gt;</content:encoded></item><item><title><![CDATA[LCC 307 - Interview sur la passion, la créativité et le fun sur le long terme avec Holly Cummins et Mark Jane]]></title><description><![CDATA[Enregistré le 27 février 2024]]></description><link>http://hollycummins.com/lcc-307-interview-sur-la-passion-la-creativite-et-le-fun-sur-le-long-terme-avec-holly-cummins-et-mark-jane/</link><guid isPermaLink="false">http://hollycummins.com/lcc-307-interview-sur-la-passion-la-creativite-et-le-fun-sur-le-long-terme-avec-holly-cummins-et-mark-jane/</guid><pubDate>Sun, 03 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Enregistré le 27 février 2024&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Is Efficiency A Good Thing? Part II: All the Things That Can Go Wrong]]></title><description><![CDATA[In part I of this blog, I discussed what efficiency even is,
and explored the question of whether we’re any good at it.
Although in some…]]></description><link>http://hollycummins.com/is-efficiency-a-good-thing-part-ii/</link><guid isPermaLink="false">http://hollycummins.com/is-efficiency-a-good-thing-part-ii/</guid><pubDate>Sat, 02 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In &lt;a href=&quot;/is-efficiency-a-good-thing-part-i&quot;&gt;part I&lt;/a&gt; of this blog, I discussed what efficiency even is,
and explored the question of whether we’re any good at it.
Although in some ways we’re getting more efficient, many of our organisations and software systems are still shockingly inefficient.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/4e4b06003f8b0cdbeccef6bbe15cad79/fa83c/waste.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 60.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAABYlAAAWJQFJUiTwAAAB2klEQVR42qWT+0/aUBSA/f//hCXLljn3gyFCxVF59QGlIKU8SgsVcDIwOHVOeSOvb7XKkmW47HGTk3uSm/PlfPeeu8M/rvV67e+LxZLLRpOrbpfFcsnO/8CWyxWuU6IixWmUTXoXnb8HbmDDQZ/TRgM9p2OUTIwTnV7n/M+BT6An2GQ6JRkVefvmNabtIBwnCCV0prOH3wMfIZvgubPL7gUtSUHY3+VYDFC0beS0hpItcPP123bgRmu1Wv3Ix6Ohp9SiUjKwUipicI+slkA3LSS9SC6T4v7u9uUOp9MZ7U6XXq/H2ac2ipJESsYwTIOCXSWTUb3700jmyrwKSFgVm3ajvh14e3NFvuSQVNOk83misspJseQBMqTlOGomQ82t8TEWJyIc4Xi6rfPPDIfDX4FLb5bO3Cqx8AGRw31EMUxICGILYXKHAQ6CH5A95bicJCpJZCWZlqIgaRr3g8HPwPXzK9abTXb33iFGQsjRI8TAe/SQQFVVEKNBZClGVEmR0rzOy2VEVaPqun7tVuUv19cYlQpWvU7JcciZ3pxZVSz3FNOyyBp5dKNA2bEp1lykfNWveRHofylPfb5Y8ODF3Munsxnz+dyftdFkwnA85q7f9zUHo5F/9gj8DtsFeSzzOxB7AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A pile of garbage&quot;
        title=&quot;&quot;
        src=&quot;/static/4e4b06003f8b0cdbeccef6bbe15cad79/5a190/waste.png&quot;
        srcset=&quot;/static/4e4b06003f8b0cdbeccef6bbe15cad79/772e8/waste.png 200w,
/static/4e4b06003f8b0cdbeccef6bbe15cad79/e17e5/waste.png 400w,
/static/4e4b06003f8b0cdbeccef6bbe15cad79/5a190/waste.png 800w,
/static/4e4b06003f8b0cdbeccef6bbe15cad79/c1b63/waste.png 1200w,
/static/4e4b06003f8b0cdbeccef6bbe15cad79/29007/waste.png 1600w,
/static/4e4b06003f8b0cdbeccef6bbe15cad79/fa83c/waste.png 2788w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;I get intensely annoyed by waste. All of us should take it as a personal mission to eliminate waste.
As techies, we have a brilliant opportunity to do this by streamlining processes and optimising software.
We should also go further; sometimes, instead of being streamlined, a process should just be eliminated.
The management consultant Peter Drucker once said “there’s nothing quite so useless as doing with great efficiency that which should not be done at all.”&lt;/p&gt;
&lt;p&gt;My team used to have a regular meeting in which we set the priority of incoming defects.
For every defect, we would discuss the potential impact, and then set the priority to “medium”.
Every. Single. Time. (We had another field, Severity, which had more meaningful variation.)
Eventually, someone suggested that perhaps we could save some effort by writing a shell script which automated  setting the priority to “medium”.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/f3892199d85524c74b93cbe1072011bc/e9572/defect-triage.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 64.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAAsTAAALEwEAmpwYAAACdklEQVR42m2T+1PaQBDH+fv7a/uTndqp09qOFVDUgMjLJwmUNBh5RV6JYnklyCOBAOHbu52B1tqd2bncZe9z393b861WK4zHYzw/P2M4HMK2bfC1v83zPCyXS6zYuPKWNHddl3yxWLyI9Y1GI3Q6HQL2ej08PT0RdG0cZFoDONMpXNtBWTPQbOro9/vkfO9sNvsD5KDJZLIJGAwG6Ha7L4DdjslUe+j2RwhENRRLGqrVe2iahlqtRmK48cx8fAOHcOg69UajAdM0GcxDtaGzA0w2t2it2ayx/3U6tNVqEbDdbm/K5Fsr4eoajSaNDw8GS8OF1fuFdDyAfrdNMY+PLRSLJQZtwrIsgs7ncxLDU+f19K3JD4aOAQtKiyJkWaa1Yl5EJfoGlVKB5nJWRKmgolwuMy/BMAzyer0OXdcpO1LIb06t1JFVNYQCfnz9tI3rVALxyAki/o9QshJSiTgCn99DOA4glEjSBXKA4zh0ibwcXC0BHbYQupQhZEr4svUOyeAuIt+2kb88Q12VUf2ZxuHOFsJ7Owgc7COaycBjtZ+ym+etxp230KaGnBxMSQiGjhH88BbXoV0oyRNIZyGo1zHmceTPBeQTR8izb+nmivb8zwjounPEEimIZ0dQEseQhO/IRg+QiR6icBOHehWjeS68h1w0CPn8FBVVoQZft8sL4ILJN7QCKtkLKKkIcwFi2I+0sA85KUC5OMXteRj3Ygw/In7cXjKgnIY9Gv4fyG1k9aGXVWgssJaXkEudIpeMQL6I4U66gqZk0K7eQS/IeKwWMR6YG4WvUt68WV5oe4KZPcZ85rBxgoU75RLoHS/m7qt3/i/wNwS6u1JeH3hpAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A group of people around a table&quot;
        title=&quot;&quot;
        src=&quot;/static/f3892199d85524c74b93cbe1072011bc/5a190/defect-triage.png&quot;
        srcset=&quot;/static/f3892199d85524c74b93cbe1072011bc/772e8/defect-triage.png 200w,
/static/f3892199d85524c74b93cbe1072011bc/e17e5/defect-triage.png 400w,
/static/f3892199d85524c74b93cbe1072011bc/5a190/defect-triage.png 800w,
/static/f3892199d85524c74b93cbe1072011bc/c1b63/defect-triage.png 1200w,
/static/f3892199d85524c74b93cbe1072011bc/29007/defect-triage.png 1600w,
/static/f3892199d85524c74b93cbe1072011bc/e9572/defect-triage.png 3898w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;This was a good idea, but there was a better one. If the field had so little value that we could manage it with a shell script, why did we even have the field? Why not just remove it from the tooling, and eliminate some clutter in our UI?&lt;/p&gt;
&lt;p&gt;I sometimes have the same thought about some of the code and verbiage generated by gen AI tools.
If the code, or comment, or words, are so predictable that ChatGPT can write it, do we really want that code?
AI is good at writing boilerplate, but the best thing to do with boilerplate is eliminate it.
&lt;a href=&quot;https://the-decoder.com/github-ceo-thinks-ai-will-write-majority-of-code-in-just-five-years/&quot;&gt;A GitHub study&lt;/a&gt; found that Copilot users accepted 30% of its suggestions, and Copilot produced 40% of the code.
These figures seem impressive on the surface, but the more you unpack them, the less good they are.
First of all, a 30% success rate means that 70% of the time, Copilot suggested the wrong thing.
But what about that 40% of the code that was written by the AI?
I suspect such a codebase will have a low information density – lots of boilerplate, lots of code comments ‘documenting’ parameters whose purpose is self-evident from the name, and so on.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/7357a9adba0c6c5ba353e1bb830842e2/48463/cat-sick.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 37%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAAAsTAAALEwEAmpwYAAABTElEQVR42n1Q226CQBD1/z+gH9BXnmxCa42mFzVSK9JaUVQugsiKtQQRhMjldMHWxtp0ksnO7pxz9syU8E8EQQBT10BMA6okQux1oKsKHMfBjvbyyLLshFM6lzkANp6Haf8ZXIXBywOL1jWD8uUFhkIHaRyBzDW47uaMXfrLWZJm1A2HUbsKSeDQe6xgzDfRYBloQ6HAOPYCjdotmnd1uNTxt9ujYH5J07SowzBEq17BTORBdAXvS+uwAs/FeqEV9T4MwNfLqF0x2Pr+ueDv3VmmiSjwIE/GkPo8VjaBv91iMhAgj0ewlzZatSqGby/QdQNJkvyMnDta2TYsy8J0MoUx07AkBPpMBdfmKOkVNrGgKirFEMiyDEWS8HTfwGAgQpGVU4fhLoRpzPGxXiOKouK3vLmPY8Q081Xkbz4dLaZn8pV5dLs9sOzNUfATFhQNgpE2ZM4AAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A cat being sick&quot;
        title=&quot;&quot;
        src=&quot;/static/7357a9adba0c6c5ba353e1bb830842e2/5a190/cat-sick.png&quot;
        srcset=&quot;/static/7357a9adba0c6c5ba353e1bb830842e2/772e8/cat-sick.png 200w,
/static/7357a9adba0c6c5ba353e1bb830842e2/e17e5/cat-sick.png 400w,
/static/7357a9adba0c6c5ba353e1bb830842e2/5a190/cat-sick.png 800w,
/static/7357a9adba0c6c5ba353e1bb830842e2/c1b63/cat-sick.png 1200w,
/static/7357a9adba0c6c5ba353e1bb830842e2/29007/cat-sick.png 1600w,
/static/7357a9adba0c6c5ba353e1bb830842e2/48463/cat-sick.png 2663w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;I’ve certainly seen this kind of bloat in my own experiments with ChatGPT.
When I asked ChatGPT to write me a Quarkus &lt;code class=&quot;language-text&quot;&gt;PanacheEntity&lt;/code&gt;, I was initally delighted with how much code it produced. “Wow,” I thought, “it would have taken me ages to write that much code!”
But when I looked closer at the code, I realised I &lt;em&gt;wouldn’t&lt;/em&gt; have written that much code, because the code didn’t need to be there.&lt;/p&gt;
&lt;p&gt;70% of what the AI produced was waste.
It used a bad, outdated, design where it explicitly filled in getters and setters that would normally be generated by the Panache framework.
One of the design features of Quarkus is how it eliminates boilerplate, but ChatGPT had carefully put all the boilerplate right back in.&lt;/p&gt;
&lt;p&gt;This kind of pointless code may seem unnecessarily flabby, but otherwise harmless.
But superfluous code and comments is noise. It inteferes with our ability to understand code and distracts us from the important parts. It’s also a maintenance liability.
For example, generic, value-free, comments can easily go out of sync with the code. When that happens, they’re no longer value-free, they’re value-negative.&lt;/p&gt;
&lt;p&gt;Our industry learned, long ago, that measuring developers by the lines of code they write is a bad idea.
We now need to learn not to measure our AIs by that criteria.&lt;/p&gt;
&lt;h2&gt;Measuring productivity&lt;/h2&gt;
&lt;p&gt;All organisations want to be data-driven. What does productivity data look like?
How &lt;em&gt;do&lt;/em&gt; you measure productivity, if it’s not by lines of code?
Some people joke that you should measure junior developers by how much code they write, and senior developers by how much code they delete.
This is a nice way of thinking about the difference in roles, but it’s not a proper productivity metric.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/5bf28953b6d3464df4343bb068383e27/daf05/calipers.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 23%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAs0lEQVR42nVQsQqFMAz0/7/AT3Bws0WKkyi06thNcBBUHF3soOg9E3xQeb6Da0iaXi4NcOM8T47jOGIYhkfNB9V8ejjoCPyHfd8jSRJEUYQwDFHXNeZ5xrqu2Pf9dcCrIGfHgaqqIISAlPKiQBzHnCulkGUZ8jxHWZZomgZt2/Imzrl3wW3bYIxBURTsiECRSHfTNKHrOlhruU9rjTRN2cRt6Cn4FViW5e///ex4adAw3+EHT2J5Y9SqJMwAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A set of calipers&quot;
        title=&quot;&quot;
        src=&quot;/static/5bf28953b6d3464df4343bb068383e27/5a190/calipers.png&quot;
        srcset=&quot;/static/5bf28953b6d3464df4343bb068383e27/772e8/calipers.png 200w,
/static/5bf28953b6d3464df4343bb068383e27/e17e5/calipers.png 400w,
/static/5bf28953b6d3464df4343bb068383e27/5a190/calipers.png 800w,
/static/5bf28953b6d3464df4343bb068383e27/c1b63/calipers.png 1200w,
/static/5bf28953b6d3464df4343bb068383e27/29007/calipers.png 1600w,
/static/5bf28953b6d3464df4343bb068383e27/daf05/calipers.png 2672w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;You get what you measure, so make sure what you measure is the thing you really care about.
This is harder than it sounds, because often the thing we really care about is hard to measure.
For example, an important role of senior developers is to produce &lt;em&gt;other&lt;/em&gt; senior developers, but how do you measure the subtle chains of influence involved in that process?&lt;/p&gt;
&lt;p&gt;Often, we resort to proxy measurements. This can be dangerous, if we’re unwise in our choice of proxies.
I saw a comically awful social media post recently, in which a VC boasted that his founders were measuring their sleep using a Whoop group. The goal wasn’t for the founders to sleep more so they could make good decisions, it was for the founders to sleep &lt;em&gt;less&lt;/em&gt; so they could demonstrate … commitment, or drive, or something equally nebulous.
The founders were averaging 5.5 hours sleep a night, and this was judged to be a great result.
This is &lt;em&gt;not&lt;/em&gt; a great result.
The effects of sleep deprivation are similar to the effects of alcohol; being tired makes people careless and stupid and causes all sorts of bad decisions and workplace-related accidents.&lt;/p&gt;
&lt;p&gt;Being sleep-deprived is an illusion of efficiency, not real efficiency.
Using AI to generate reams of value-free code is an illusion of efficiency, not real efficiency.&lt;/p&gt;
&lt;h2&gt;Why inefficiency is efficient&lt;/h2&gt;
&lt;p&gt;Sometimes, real efficiency looks like inefficiency. This is a complicated stuff! No wonder we get it wrong.&lt;/p&gt;
&lt;p&gt;There’s an enormous amount of research that shows fun in the workplace is good for business.
If people are happy at work they work harder, take less sick leave, and are more productive.
In 2014, the first DORA report established that job satisfaction is the &lt;a href=&quot;https://services.google.com/fh/files/misc/state-of-devops-2014.pdf&quot;&gt;number one predictor&lt;/a&gt; of performance against organizational goals.&lt;/p&gt;
&lt;p&gt;At an individual level, the Harvard Business Review found your brain in a positive state is &lt;a href=&quot;https://hbr.org/2012/01/positive-intelligence&quot;&gt;31% more productive&lt;/a&gt; than your brain when it’s neutral or stressed.
How can such a positive state of mind be achieved?
Well, cat videos are part of the solution.
&lt;a href=&quot;https://wrap.warwick.ac.uk/63228/7/WRAP_Oswald_681096.pdf&quot;&gt;A study from the University of Warwick&lt;/a&gt; found that people performed 12% better on a test if they’d just watched a comedy video.
Most managers would be delighted if you told them you knew how to achieve a 12% performance improvement …
at least, until you mention it involves comedy videos.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/b51ca7ef1c1cdf94c1599f45dd32e78d/33c15/cat-video.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 62.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAAsTAAALEwEAmpwYAAAC4klEQVR42jWTWW/bVhCF/evbp6IPfSmCFkig2nEUWXG8RSvFTSt3USQlWbYky7bi2EBSOG6BSvXX4TVKYHAvOXfOPXPmcGe7msHTI/lze3PN5cWM1dVS4orVcqniarFgKXFzveLu85r17a3KLxdzZtMJD/f3/P/sLE72+TIecb1eo2tNmvUabdPAlujYFoNej9D3GIYB8XAoa0jguSrcQU/V5PtvX7++AJquhyMHu65LtVpFNwyCUUKcZXhhhBeExGlKFI84+1jGaFTQTAsvivClLhyNmM3nTIXpdrtlpzPoq499Kda1OtrhHroUdXRhWinjmVXcjk7XaJD2mkS+Q1tIuAKWR5gkpOfnjGTdbjbs6J0OfT9gIDfWhP5l4nJ7kXJzHuPVS/iNMrOwyzz1WV8ktAyTtuNiiBRtx5Fan0DAomH0AtgwTZXoeD62sHU7Fr+++Y1Cucgy9VjEfd4dHbAr70HXpCNgtpzPAfVuV+1zyUIhpFqui2Zmv68SmmUxGTr4fg+7a3AtLNezGFM7w24c4bTOsASkJjVvyx84qdWFhLAUnQMZlgJsWia63GbLzVWtReP4gGFX59vdCsfQOC28Fu0a9ColDvde8/59iaNKlaZl07TbWP0Bg3zy4oLtVlpu2bZil7MsHR2zWyhwWvyD8Sjk7u4ey7B4WK949cvP/PTjD+y/+Z39d8UXiZRUHl4cE+Ya5oC2sOsHgdzU56RaY7dY4u1ugYcvn3l6+ovH749spJXFbEr1cJ/mxyKVgz1OPn1Sg3SEXZikjMQpquX8oy8+y2kbMvE9Aawdf+D7ny9GfX5+Vuvm70fmWcRlGpE4bQKnp/wapRnZbMZUrPNvDtg+PRXP6RjCsCWAx2JurVkliELGciidTMim5yTjsUTGSAyfZKnKayJXPtSe2G4YD9ls/mFnKh7KkhHZZMxYivNQIAKQSmEi7FOJicqNFdhQ2vOkIy/wlXaxvOf/trTDf/iKeYM1UxHxAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A cat video&quot;
        title=&quot;&quot;
        src=&quot;/static/b51ca7ef1c1cdf94c1599f45dd32e78d/5a190/cat-video.png&quot;
        srcset=&quot;/static/b51ca7ef1c1cdf94c1599f45dd32e78d/772e8/cat-video.png 200w,
/static/b51ca7ef1c1cdf94c1599f45dd32e78d/e17e5/cat-video.png 400w,
/static/b51ca7ef1c1cdf94c1599f45dd32e78d/5a190/cat-video.png 800w,
/static/b51ca7ef1c1cdf94c1599f45dd32e78d/c1b63/cat-video.png 1200w,
/static/b51ca7ef1c1cdf94c1599f45dd32e78d/33c15/cat-video.png 1463w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Not only does having fun at work improve productivity, staring into space can improve productivity.
Doing nothing creates the ideal conditions for creativity and problem-solving.
For our industry (lucky us!), creativity and problem solving are key elements of our productivity.
That means doing nothing is a key part of our job.&lt;/p&gt;
&lt;p&gt;What underpins the productivity of idleness? The default mode network is a pattern of brain activity which kicks into life when the rest of the brain goes into an idle state.
For example, taking a shower or going for a run can trigger the default mode network. The default mode network is associated with mental time travelling, creativity and problem-solving, so triggering it is a good thing.&lt;/p&gt;
&lt;p&gt;It’s not only fluffy-wuffy psychology which says idle time is important for productivity. Un-fluffy, un-wuffy, mathematics confirms it.  Queueing theory is the science of how and when works get done.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/61709224584beb54b8f103d16e3b0476/89819/queue.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 64.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAAsTAAALEwEAmpwYAAABbUlEQVR42qWTW0sCURSF/fn6UkZ2ly50IyJMg8RSa6BpZhwrksTRCHXUMfHSiCCSl69xULEnzRYc2A/7fGetc852MKVer0en07HrwWDAInJMb9Z1HU3TqNVqNnxa8x7wC5jN58nlc4TDEZLJJPV6HdP84rvb/ZtDO64FVYV7bgMB5JhCNBomGLzC7ztHkVQ+3j9ot9uzgWN3WiqFtr9D+eyYWOCcjHRJUvSSiB8iKEe4d9yUP8sz4zv6/b5d3N2EyK67qW+t8ny8Tf7xhIy8a7k74vTCQ+DaT3eO6BOgEAqRW3bxtbmCsrdK6dFL5smH0+lCjb0wGPXNjjxq1BKv6Adesp4l3oJWXPkKUbhlbX2D3sjZPC89uUPTNHlVVVRRRJJkwpEoajxOwfpKQ/XndjgCNhoNjFKJQrGI+PCAIAhUq9U/f/IJsNlskk6nKVpAwzCoVCqLTcoY2Gq1kGXZhv579MaA4bgN17BeFPgDEMzdDaL+8mMAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A queue&quot;
        title=&quot;&quot;
        src=&quot;/static/61709224584beb54b8f103d16e3b0476/5a190/queue.png&quot;
        srcset=&quot;/static/61709224584beb54b8f103d16e3b0476/772e8/queue.png 200w,
/static/61709224584beb54b8f103d16e3b0476/e17e5/queue.png 400w,
/static/61709224584beb54b8f103d16e3b0476/5a190/queue.png 800w,
/static/61709224584beb54b8f103d16e3b0476/c1b63/queue.png 1200w,
/static/61709224584beb54b8f103d16e3b0476/29007/queue.png 1600w,
/static/61709224584beb54b8f103d16e3b0476/89819/queue.png 2035w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;It could be a computer doing the work, or a person; either way, the mathematics are the same.
A getting-stuff-done process is modelled as&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;an arrival process (new work coming into the system)&lt;/li&gt;
&lt;li&gt;a queue (work requests waiting to get sorted out)&lt;/li&gt;
&lt;li&gt;servers (people, or threads, or machines, or whatever is doing the work)&lt;/li&gt;
&lt;li&gt;completed work (what gets spat out at the end of the process)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/86ddfe8fb409a0a24f0fca207b47fc0c/df438/queueing-basics.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 50.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAABYlAAAWJQFJUiTwAAABjUlEQVR42o1Si66bMAzl/39s0iZtUjW1e5TLo4RHm4QkhUB59MwOG/dq2pVmyXIwzvHxiaN1XeDuPfp+wFvz3sNai67r4JwLkXNaa6rt8Z5Fy/rEl2MN4zbA5/MZYtM0uFwuKMsSRVFACIG6rpEkCa7X6/uA8zyjqSTKosL/GDdkX5ZlP6/ruhOJeGSR19DKhAQ32HzCNE3hzJEBOEopUTdVYD5PMx7TA4fTIfzbGVaiIUAdklq3GPyDdBrJ/e844k46W2OgW4U0j5FlWdCVG2Ui2xlH4zgii8twmcW/3Rpcb2eU9Te60BKbH9QkRyG+o6oaqutCYwZTSu3MpJY4/jwi+jO7NQ6mNTBW4SX9iHP8AVIJJOknAvuKOPmMviO2vg+vbIgtT2edJaAT/OCRlzkiBjPG4nSI0dK4LYEqSU6atvr1LOW2LoqYvKRnZGkWABkoFemuf/T29dj4xTbfNFkosj5sLA/vZgCmcYdhW7VlXl7Xhi9xIaP/vR7/ynnSmsd1dxcas7GOvPT8/QsIOwQnaPWirAAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A diagram showing an arrival process, a queue, servers, and completed work&quot;
        title=&quot;&quot;
        src=&quot;/static/86ddfe8fb409a0a24f0fca207b47fc0c/5a190/queueing-basics.png&quot;
        srcset=&quot;/static/86ddfe8fb409a0a24f0fca207b47fc0c/772e8/queueing-basics.png 200w,
/static/86ddfe8fb409a0a24f0fca207b47fc0c/e17e5/queueing-basics.png 400w,
/static/86ddfe8fb409a0a24f0fca207b47fc0c/5a190/queueing-basics.png 800w,
/static/86ddfe8fb409a0a24f0fca207b47fc0c/c1b63/queueing-basics.png 1200w,
/static/86ddfe8fb409a0a24f0fca207b47fc0c/df438/queueing-basics.png 1556w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The arrival process is usually assumed to be a Poisson distribution; that is, random, but distributed around some average arrival rate.
If server capacity is too low, a queue builds up, and wait times are high.
If server capacity is high, the queue will be mostly empty, and some servers will be idle.
Is this an efficient situation, or is it inefficient? It depends what you’re measuring.
Requests are handled quickly (efficient!), but there’s a lot of wasted capacity (inefficient!).&lt;/p&gt;
&lt;p&gt;What makes this trade-off particularly interesting is that it’s asymmetric.
Because requests come in somewhat randomly, there will be times when requests bunch up a bit, and queues
build up. But what happens when requests are unusually sparse? The queue can’t build &lt;em&gt;down&lt;/em&gt; below zero.&lt;/p&gt;
&lt;p&gt;Because a queue length can’t be negative, busy times hurt the system more than quiet times help it.
You can see this effect on a plot lead time as a function of utilisation (how much of the time servers are busy).
With a Poisson distribution of arrival times, going from 80% utilization to 90% utilization doubles wait times.
If the servers are busy 100% of the time, lead times are infinite.
There &lt;em&gt;has&lt;/em&gt; to be some slack in the system, or it collapses.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/df5dd5573d5c81b7bf77f5e8acabce18/61beb/lead-time-vs-utilisation.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 60.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAABVUlEQVR42qVT7XKDIBDM+79epz+SppNYY1TAD0QRRNyCiTbUmaad3swNAt6yd3u3w92macI4jviv7R43hBAYY/4M0rXakbFfgJ6dtzwn0FrfGGN6CrTEMSIwDOMW8HJNkLAUetTr2TNw65iVVGD5fQb0aRZF4VKm4G2Dsq1Aaoqmb2BG8yNwLwdURXtnfAf0Yvj6eV9S9mdVx0E4A20KqEEHqS6MfLpam1AUH8w5nxkugI/BalCgDphwCqn79a4VCiUTW5WXelG6BXw0Yw1YW6CSNbhoZ3bfq7BRuesUfAcYY51ydl6NWwc9QgoNXkpEHxn27ydEWYy0yAISAeD1muL15YDjIcLb/ry635+OMeIoRZbmyDOKuqrBGMMpdnfRec7OWhs2tlIK2hXfq2knO7v/VlohSS7uwQRCiKAH/So7uQ7E7jeT4F/u+x5SymA8b2qHRfwE1RCr0CH19UgAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;An exponential curve&quot;
        title=&quot;&quot;
        src=&quot;/static/df5dd5573d5c81b7bf77f5e8acabce18/5a190/lead-time-vs-utilisation.png&quot;
        srcset=&quot;/static/df5dd5573d5c81b7bf77f5e8acabce18/772e8/lead-time-vs-utilisation.png 200w,
/static/df5dd5573d5c81b7bf77f5e8acabce18/e17e5/lead-time-vs-utilisation.png 400w,
/static/df5dd5573d5c81b7bf77f5e8acabce18/5a190/lead-time-vs-utilisation.png 800w,
/static/df5dd5573d5c81b7bf77f5e8acabce18/c1b63/lead-time-vs-utilisation.png 1200w,
/static/df5dd5573d5c81b7bf77f5e8acabce18/29007/lead-time-vs-utilisation.png 1600w,
/static/df5dd5573d5c81b7bf77f5e8acabce18/61beb/lead-time-vs-utilisation.png 2563w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;em&gt;Lead times (purple line) and resource cost (green line) as a function of utilisation. Source: &lt;a href=&quot;http://brodzinski.com/2015/01/slack-time-value.html&quot;&gt;http://brodzinski.com/2015/01/slack-time-value.html&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This is the reason train schedules have some slack in them.
Trains usually travel a bit below their maximum speed, or pause for longer than strictly necessary at each station. Otherwise, any minor delay could perturb the system unrecoverably.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/1c847d0544b9054efc003ddae9326884/0f882/train-schedule.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 55.99999999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAAB7klEQVR42o2S7U+SYRTG+YP7VOL8VE3WnA0cuTbKQW5AgohAW268PoIEiDSQ94i3IY2n2sD8YOP9181jJKYrz3Z27nv37utc13WOioWYTqdK7fV61GoNzs7a4nzOcDBgOBz+ef/7zzxnoboLsFKp8M7txu/3EQ5HSKXSVKs1Wq0WnY5Mt9tjIJqMRqNbTW4ATiYTpWbSaZy7Fl691GLYXEO7rkGn1eFyufD5fESPjvB5vcTjCQqFIs1mk65QNRyOrgDnlOeAyeMElu3XbDzX8EKrYWXpASvLaoxbBhx2Mx6Pmx3rNhvadZ48forJ9AbnnpNyqXTNcAY4k/Hj4gJ/SMIfDBGORLDZ7Oj1mxgMW5iMRgXUYrYKMB2a1VXUS2o0mmcsP3qIw/YWVV+AyN++UyiVOYzGiCdPiB6n8EhJQpKE1b5PrlCm2WhSrdUoFkvkcnmy2ZySmcypuOcU6TXhs8pk3mFNq8e2u8dBQMIbCBIT3jiieQ6CEQJSmE/1FvcNVbv9BekwTPRDjPe+EImTj+TzOfbjZSLZz8jdc9KC4Wg8vrUmV75fe39jypeXP2k0GhSEpLSYsjcS5yiVUaZXEVIWP/2T4eJSKlVkv9+nUa+TFV5FhfxT4dX4N8P/At612It7KcsyHfkrk+n9GP4COkYXZUFc+/MAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A train and a train schedule board&quot;
        title=&quot;&quot;
        src=&quot;/static/1c847d0544b9054efc003ddae9326884/5a190/train-schedule.png&quot;
        srcset=&quot;/static/1c847d0544b9054efc003ddae9326884/772e8/train-schedule.png 200w,
/static/1c847d0544b9054efc003ddae9326884/e17e5/train-schedule.png 400w,
/static/1c847d0544b9054efc003ddae9326884/5a190/train-schedule.png 800w,
/static/1c847d0544b9054efc003ddae9326884/c1b63/train-schedule.png 1200w,
/static/1c847d0544b9054efc003ddae9326884/0f882/train-schedule.png 1584w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;On the other hand, too much slack is unaffordable.
The green line in the plot above shows the cost of the idle capacity; at low utilisation, it’s &lt;em&gt;big&lt;/em&gt;.
Provisioning a dedicated pool of hundreds of build machines ensures build wait times are short, but it’s ruinously expensive to have so much idle capacity, and no business would do it.
I get my best ideas in the shower, but it wouldn’t work if I spent seven hours a day in the shower, and only one hour at my desk.
The management skill is to balance the competing inefficiencies, and come up with something that just about works.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Is Efficiency A Good Thing? Part I: What is Efficiency, and Are We Any Good At It?]]></title><description><![CDATA[This blog is based on a keynote I presented at Tech.Rocks Summit 2023. I’m grateful to
the organisers for suggesting the topic. Is…]]></description><link>http://hollycummins.com/is-efficiency-a-good-thing-part-i/</link><guid isPermaLink="false">http://hollycummins.com/is-efficiency-a-good-thing-part-i/</guid><pubDate>Fri, 01 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;This blog is based on a keynote I presented at &lt;a href=&quot;https://events.tech.rocks/&quot;&gt;Tech.Rocks&lt;/a&gt; Summit 2023. I’m grateful to
the organisers for suggesting the topic.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Is efficiency a good thing? On the face of it, the question seems absurd.
Of &lt;em&gt;course&lt;/em&gt; efficiency is a good thing. None of aspire to be inefficient.
Most of us strive to be as efficient as possible, and to make our organisations equally efficient.&lt;/p&gt;
&lt;p&gt;And yet. Our obsession with efficiency is actually relatively recent.
If you search “what is efficiency?,” Google will suggest you might also like to search for “when was efficiency
invented?“.&lt;/p&gt;
&lt;h2&gt;Forms of efficiency&lt;/h2&gt;
&lt;p&gt;People first started thinking about efficiency in the 1700s.
At the time, it was in a quite specific context: machines.
Steam engines were machines which could convert heat energy into mechanical energy – that is, movement.
That mechanical energy drove machines which did useful things, such as pumping water or moving a vehicle.
But the conversion was not particularly effective; the vast majority of the heat energy was just … lost.
Scientists and engineers worked hard to make these engines more efficient, so that less coal required for each unit of
useful work.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/ab2e3c99171c9ee41fcee07a1938e3b9/cbcb7/machine.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 40%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsTAAALEwEAmpwYAAABZ0lEQVR42o2R60vCYBTG9/9/CqIigq4SRReJKD8ERuSKNHNKarJp7qK76ZxOt3nb09lgkiXUgcN7eDnv7zzneRmsiPl8Dt/34bouhqMRXM/DZDKBpmq4ukmhUCxRVxD1BkGw9JZZBZRbLdSEOqWAD8rnXA5NWUaN55F/LyOdYSHLygIYCpjNZlHNhIXjOJEa0zShaRoUVcX1bQo9u4+mJGFndx/nl0ncpe+RIXj2rUBD2xgOhwSWYRgGeBrm0SZMuEq324Vt29B1PQK2KfNcEY/sEza2trG2vomziyQ03UDi5BQPLItWW42EiKIYnSE0FLW0cuyHSOsMqEkl8EHiGHuHR8gXOBrC4SWbg2lZaBAIP/xbeBiCYi/C4OsNlKpVaJ0OiuUKXkltlRfAVcqoE6ghyRAan4t3cf76lPjSIW8kRYkUdsiO/sAhP22qLeiGGd17nv//X/4e0+kUdq8Hi9Ycj8d/teML5IxZT7+pKXMAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A simple machine with energy as an input&quot;
        title=&quot;&quot;
        src=&quot;/static/ab2e3c99171c9ee41fcee07a1938e3b9/5a190/machine.png&quot;
        srcset=&quot;/static/ab2e3c99171c9ee41fcee07a1938e3b9/772e8/machine.png 200w,
/static/ab2e3c99171c9ee41fcee07a1938e3b9/e17e5/machine.png 400w,
/static/ab2e3c99171c9ee41fcee07a1938e3b9/5a190/machine.png 800w,
/static/ab2e3c99171c9ee41fcee07a1938e3b9/c1b63/machine.png 1200w,
/static/ab2e3c99171c9ee41fcee07a1938e3b9/29007/machine.png 1600w,
/static/ab2e3c99171c9ee41fcee07a1938e3b9/cbcb7/machine.png 3738w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;As communication and transport technology advanced, the scale of administrative structures increased.
By the late 1800s, the world had large, empire-scale, governments, and large, multi-country corporations.
These large structures had a natural tendency to descend into chaos, if there was too little process,
or bureaucracy, if there was too much process.
Efficiency shifted to become a management concern.
Researchers started exploring how to optimise the interaction of human beings at scale, so that each process
required the minimum amount of time and money to produce meaningful value.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/ad4b25072c0d1825cfa29987dee5a7b9/9774c/processes.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 35%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAAAsTAAALEwEAmpwYAAABMklEQVR42pVRXUvDQBDM/wdBBKGtIIivPhbRB18saNvEfgVs01RKz5akadL0Ynr57nh3kBBQEBcOlp3Z2d055XQ6Yb/3wRhDGaImXhlpmsLxPBxogCLPK7woCokzFsFxHOQcU0RxpL/B3loSjOO4EouiCJZlQx0MMe108KFpWNv2j6Gu60HtDZFlKZQg+MLj8x3miykiFmOz2WC320HXdQy4ULt9j26vj4mq4fb6BqPxBISsYBiG5B2PIVbLNZ4e+tjyLZUwDGEuZqD0AHqg8Php4vwsy2Rzo3mFRqOFs/MLXDZbmJumPE1whBV5kWPv+TCNJdcIoAiQrD4rP+ohmt5nM/T5di+vXVj83Lq3ZS54hBCZSw9935dT66T/RJIk0msp+BdZTHddV/pFKf2VU//xb9ohEqR3pzAOAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A pile of paper with value as an output&quot;
        title=&quot;&quot;
        src=&quot;/static/ad4b25072c0d1825cfa29987dee5a7b9/5a190/processes.png&quot;
        srcset=&quot;/static/ad4b25072c0d1825cfa29987dee5a7b9/772e8/processes.png 200w,
/static/ad4b25072c0d1825cfa29987dee5a7b9/e17e5/processes.png 400w,
/static/ad4b25072c0d1825cfa29987dee5a7b9/5a190/processes.png 800w,
/static/ad4b25072c0d1825cfa29987dee5a7b9/c1b63/processes.png 1200w,
/static/ad4b25072c0d1825cfa29987dee5a7b9/29007/processes.png 1600w,
/static/ad4b25072c0d1825cfa29987dee5a7b9/9774c/processes.png 3719w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Early in the twentieth century, this optimisation effort was extended to factories.
Factories take in things, which have some value, and produce other things, which hopefully have more value.
How should the conversion of things to other things be done, so as to maximise the increase in value? Time-and-motion
studies aimed to eliminate wasted effort in manufacturing processes.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/cbbc95c7fa17e713a8ea65274221ec55/6897f/factory.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 51.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAAsTAAALEwEAmpwYAAABlklEQVR42o2SW2/aQBBG8/9/SZ/6GFWVUilpU0WBNAQTg2184WKDLwSMDdiAfTprhaZKmygjjWak2T27882c8Y7V4lVVsT8cKMuSfLsly3OyzYa1RFV7tiap69o/exNW140fBLbd7dgIbKeiwL5fXREEwZ9zHwK+hh+PxybflwV2r8t6tXobePrN34CTlUVBulwSxzHRZIR+d4vT7TDUHihEhg+3vJfDSRgSuA7RcEDv+pLO5QXaxRd+fv5E6+s5i8WCNE0piuIFqDQK5aL6wVZ0KouScDxm2n8kcm08vcf4oc3M1LE7d1itG7z7FqPHLoHvo2kaSZJUCtwAVXtqgkoj0zSxLIvQ7ONrv4htg6eJyzqYsJyOCB2LxdjFa1034Fwm/U/LCrQSgVXRMAyMwYAsnJG4ctkdsvSGPDkmicBDSycSt398w7lvsxN91XJVz/vTAFWeZVkDVCuRCjyZC3AWkAQ+yXRCPHKZ2SZzzyaU3Grf4PR1Xkb3zlBOEuwPR3koZy76hpFMOE4kRjKAsqkr7fkP8DfCJvtCOvGjYgAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A factory with value as an output&quot;
        title=&quot;&quot;
        src=&quot;/static/cbbc95c7fa17e713a8ea65274221ec55/5a190/factory.png&quot;
        srcset=&quot;/static/cbbc95c7fa17e713a8ea65274221ec55/772e8/factory.png 200w,
/static/cbbc95c7fa17e713a8ea65274221ec55/e17e5/factory.png 400w,
/static/cbbc95c7fa17e713a8ea65274221ec55/5a190/factory.png 800w,
/static/cbbc95c7fa17e713a8ea65274221ec55/c1b63/factory.png 1200w,
/static/cbbc95c7fa17e713a8ea65274221ec55/29007/factory.png 1600w,
/static/cbbc95c7fa17e713a8ea65274221ec55/6897f/factory.png 3780w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;In the nineteen sixties, a new form of efficiency became important: software efficiency.
Given enough hardware, and electricity, and time, software could convert questions into answers.
How do we reduce the amount of resources required, and perform calculations as quickly as possible?&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/7d41a7623ecc6e080382e73c25d403ab/64a71/computer.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 48.50000000000001%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAAsTAAALEwEAmpwYAAABzklEQVR42o2T208aURCH+T996p/gS18o9sGk2vS1PtWCoG+9pYbLloK1FaG0SoqLgOwuWFp1l0VZruWy8PVsgzRaYjrJyTmZnPlmfmfmuLhtkwmm/p1iQSYnZzk8+EL6c1LsaS7ONLotk36/eytkYk+PKde/QBtFjrHp9xIIbOHz+fD7N1l/5kUKvaHfKtOo/7gbaNs24/F4BlRzO3zajZPNyshyjkKhSDQaJ7j9CkZ1mpbhCJkPHA6HGIZBo3FFp9Ol1bSoFD6wEwuTyXyjVCpRqVSQIu8F8CWDnrh7ZYgCJliWJWI6CMYfoCgq5XIuV6tVTNNE0zQUReFcSwh5rwkGJUKhMJL0Dv9GgGQiLuSecln/KVSNyefzqKrqxNrtdpvRaJRyOdXpuo7jmPaEs3Ia5ThBOrVLci/GvrME7PDrnqg8wknx+Frq3U25fkf9XCMqvWXD52Xt6RqeB0u43Q9ZXLzPwsI9Vlee0Ov1ZtAbwKnjRsZ20xBdXmd5eRWPZwmP283jlUdsBZ4T3n7B/seISHo6H8gcG4g5U4sHlJUj1JMMtQtNJNEZ9i1Ggzb2qC/U2P85h1MbDvqzJxiISajVTOr1SyH115y/8Bf4G8EA28blP9zYAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A computer with value as an output&quot;
        title=&quot;&quot;
        src=&quot;/static/7d41a7623ecc6e080382e73c25d403ab/5a190/computer.png&quot;
        srcset=&quot;/static/7d41a7623ecc6e080382e73c25d403ab/772e8/computer.png 200w,
/static/7d41a7623ecc6e080382e73c25d403ab/e17e5/computer.png 400w,
/static/7d41a7623ecc6e080382e73c25d403ab/5a190/computer.png 800w,
/static/7d41a7623ecc6e080382e73c25d403ab/c1b63/computer.png 1200w,
/static/7d41a7623ecc6e080382e73c25d403ab/29007/computer.png 1600w,
/static/7d41a7623ecc6e080382e73c25d403ab/64a71/computer.png 3762w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;We’re good at efficiency&lt;/h2&gt;
&lt;p&gt;After two hundred years of effort, we’re getting pretty good at efficiency.
By the time they were phased out in the 1950s, steam engines were twenty five times more efficient than they’d been at
the start.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/0aa5e0ef0b067344ac234605377b249e/92da7/efficiency-curve.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 47.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA5klEQVR42p2SW0vEMBCF9///LkHBB31VQWXttrm3Cdm0aS7HJEXfVmkHDoQMfDPMOSfcqGVZwBjDOI5FCkqNRQpaT/irTrca8zyDc44YQ4OHuCKl0IaklPYDvfeYpm2bnDOMWvH5avF1ZuXnANAYAyFke9PuivsHjrtHiZe3fj+wbVSA2misc8bTs4K0HjEDvAxJKe4Ham1grcbl7NAR99urJu2+YQVOxU1GBd4/LPwakeIGEUIUo+IRUxaQQSGEbcDPVlLKY0DnXIkIbW7XCFXV+FBKj8WmArvugmEYmggh6Pv+X+A3a2ERPbrZ/7QAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A plot of steam engine efficiency&quot;
        title=&quot;&quot;
        src=&quot;/static/0aa5e0ef0b067344ac234605377b249e/5a190/efficiency-curve.png&quot;
        srcset=&quot;/static/0aa5e0ef0b067344ac234605377b249e/772e8/efficiency-curve.png 200w,
/static/0aa5e0ef0b067344ac234605377b249e/e17e5/efficiency-curve.png 400w,
/static/0aa5e0ef0b067344ac234605377b249e/5a190/efficiency-curve.png 800w,
/static/0aa5e0ef0b067344ac234605377b249e/c1b63/efficiency-curve.png 1200w,
/static/0aa5e0ef0b067344ac234605377b249e/29007/efficiency-curve.png 1600w,
/static/0aa5e0ef0b067344ac234605377b249e/92da7/efficiency-curve.png 3768w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;em&gt;source: &lt;a href=&quot;http://geosci.uchicago.edu/~moyer/GEOS24705/2016/Assignments/PS7.pdf&quot;&gt;http://geosci.uchicago.edu/~moyer/GEOS24705/2016/Assignments/PS7.pdf&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;You’ve probably heard of Moore’s law, which predicts that the number of transistors on a chip doubles every two years.
Koomey’s law is a related observation: the energy efficiency of computers doubles roughly every eighteen months. This is
brilliant. (If it wasn’t for Koomey’s law, we wouldn’t be able to afford Moore’s law!)&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/728677940b6f1a45d1b18633113dabbc/e6161/koomeys-law.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 47.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA50lEQVR42qVSi2rDMAzs//9jGbRsiRM/0tSv+XWVtzSEPNrBDoyMJJ/vhE5YwFqLUgqO8Kw4ayDUiEVrnuL1NDdTtWka5JzxDl/S4NyOyP8ljKmA3zSGu8XKx5awgrEOaSIsC4vGOrDBwoUM5xxijOu/9hV2Xb9RSKJwbXp8dgpaG6SU9sQfWW7pwW9N6IAL18hEEEKkj9KrcWwJa3MlLBQTTfujt+gHg/Dt8QccE4YQwG4e2sfj9Zn2ZbFi+5ZZyyCHcbb9zO8QvFdYwTmHUgpSSAgpIadTc0IIulON7pyLn7z3fkP4AHlqEvEQP3XrAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A plot of CPU efficiency&quot;
        title=&quot;&quot;
        src=&quot;/static/728677940b6f1a45d1b18633113dabbc/5a190/koomeys-law.png&quot;
        srcset=&quot;/static/728677940b6f1a45d1b18633113dabbc/772e8/koomeys-law.png 200w,
/static/728677940b6f1a45d1b18633113dabbc/e17e5/koomeys-law.png 400w,
/static/728677940b6f1a45d1b18633113dabbc/5a190/koomeys-law.png 800w,
/static/728677940b6f1a45d1b18633113dabbc/c1b63/koomeys-law.png 1200w,
/static/728677940b6f1a45d1b18633113dabbc/29007/koomeys-law.png 1600w,
/static/728677940b6f1a45d1b18633113dabbc/e6161/koomeys-law.png 3775w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Software efficiency also continues to improve.
I’m a Java person, and it’s noticeable that each new release of the JVM goes faster than the previous release.
The frameworks we build on top of the JVM have also become astonishingly efficient.
In 2010, if you wanted to launch your code on an application server, you had enough time to make a cup of tea while it
was starting.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/56740df7613e057acbccc267fb432ad1/1ed3b/tea.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 54%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAABc0lEQVR42p2SaU/CQBCG+f8/whgTP5iIjVFERITKoZSrYKvlinIUQUEg0HKU9rEQJH7wQDeZTLLvzrPz7o6HH5Zt2ywWi0223HAc56ujq01XMz3fqcvCJWA2n2/y3LJYuPA/Az+6G40Nuv0+L70ew9GYyXSG/Z8OLWuOotzjP/NzG4uiFWSyKQkpk0UrVZaVONsA7bWdbu+NoO8E1X9I3ruLIuyhBQQSwj6+Y2GlrwFfAz+E/mBAvdGg2dQJXwaRry+RA8ckDnbInnmRw+ecCkfk5DyGYXyGfm85KaVIJG7Rn9uMDZN2u0NL16nXaqRdy+lMDlG8plKt/g50HJtisUShoKDrLYbD4UbrtNrELqKodyrhiMize+EWQIdGo4mUSlMslXnQiuTyBUrlMjehOPfiHZmbLIqqMjEn2/3ybDZF0zSi8TjJpITp2l6Oz1P5kYjvikhIpPPS+eNgu52+vnZX9iuV6irqtTpN9y1N0/xxDt8BgzBEkkSqBjoAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A cup of tea&quot;
        title=&quot;&quot;
        src=&quot;/static/56740df7613e057acbccc267fb432ad1/5a190/tea.png&quot;
        srcset=&quot;/static/56740df7613e057acbccc267fb432ad1/772e8/tea.png 200w,
/static/56740df7613e057acbccc267fb432ad1/e17e5/tea.png 400w,
/static/56740df7613e057acbccc267fb432ad1/5a190/tea.png 800w,
/static/56740df7613e057acbccc267fb432ad1/c1b63/tea.png 1200w,
/static/56740df7613e057acbccc267fb432ad1/29007/tea.png 1600w,
/static/56740df7613e057acbccc267fb432ad1/1ed3b/tea.png 3790w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;By 2022, GraalVM, in combination with Quarkus, could start an application in 15 ms, &lt;em&gt;faster than an LED lightbulb&lt;/em&gt;. (Did
you know LED lightbulbs take some time to start up? I didn’t, until I started comparing their start times to Quarkus
native start times.) Even when running as a vanilla JVM application, without GraalVM’s native compilation, a Quarkus
REST application starts in under a second.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/27dbf84e79586ebaf924722fdf155294/520f2/lightbulb.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 38.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsTAAALEwEAmpwYAAAApElEQVR42qWQSwrDIBRFs/9VNFtw7A76GYiTdtYfBcVPkhLRYG7zAh00UJDkgBPxHe+7FQoZxxE5Z/R9jxQj4nTobklVKkwpwXsPpTSsdXDOzdJVQkoSQoDWGm3rMaQwC+mDpbRYSFAypR54PQWaxqPr3utXJqi/++2Ky/k0JbTbOiSGIUFKif3hCGPMT/pVQppljKGud3OHm4TfQSEEOOd/330A5cR0NDhtMGMAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A light bulb&quot;
        title=&quot;&quot;
        src=&quot;/static/27dbf84e79586ebaf924722fdf155294/5a190/lightbulb.png&quot;
        srcset=&quot;/static/27dbf84e79586ebaf924722fdf155294/772e8/lightbulb.png 200w,
/static/27dbf84e79586ebaf924722fdf155294/e17e5/lightbulb.png 400w,
/static/27dbf84e79586ebaf924722fdf155294/5a190/lightbulb.png 800w,
/static/27dbf84e79586ebaf924722fdf155294/c1b63/lightbulb.png 1200w,
/static/27dbf84e79586ebaf924722fdf155294/29007/lightbulb.png 1600w,
/static/27dbf84e79586ebaf924722fdf155294/520f2/lightbulb.png 3663w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;A lot of this performance improvement has been driven by the move to cloud.
Cloud applications tend to be at least a bit ephemeral, so startup time matters.
Footprint also matters, because there’s a financial incentive to try and pack many cloud applications
onto a single physical machine.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/e6a16bc67fa1be56d5644b65a16e2f35/ca435/cloud.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 35%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAkklEQVR42o2RWQoEMQgF+/6Xzb6n26EEPwZ6hggSibF8mkv+2PM8MueU3ruUUqTWqvHe+2fN9XZ537cWttbEOaewEILGQFNKstY6BwICknNWALEpJAeQ3BGQMb336qgCAAiAgWOM6kxyBKSYkU2RQe20sXlzvEN2hAqUsjtTjBPTlOZHQDN+c4zxpZZfp+EbDOAHCdQmsebPBy4AAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A cloud&quot;
        title=&quot;&quot;
        src=&quot;/static/e6a16bc67fa1be56d5644b65a16e2f35/5a190/cloud.png&quot;
        srcset=&quot;/static/e6a16bc67fa1be56d5644b65a16e2f35/772e8/cloud.png 200w,
/static/e6a16bc67fa1be56d5644b65a16e2f35/e17e5/cloud.png 400w,
/static/e6a16bc67fa1be56d5644b65a16e2f35/5a190/cloud.png 800w,
/static/e6a16bc67fa1be56d5644b65a16e2f35/c1b63/cloud.png 1200w,
/static/e6a16bc67fa1be56d5644b65a16e2f35/29007/cloud.png 1600w,
/static/e6a16bc67fa1be56d5644b65a16e2f35/ca435/cloud.png 3730w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Our systems are getting quicker, and we’ve also greatly reduced toil and repetitive tasks.
Infrastructure-as-code and GitOps has allowed us to automate our infrastructure.
AI tools have automated &lt;em&gt;us&lt;/em&gt;. Dall-E can produce much better kangaroos than I can draw, in just a few seconds.
ChatGPT can write an coherent essay exploring the benefits and risks of efficiency in seconds, when it takes me &lt;em&gt;days&lt;/em&gt;
of effort to write the essay you’re reading now. That’s not even counting the thinking-time.
I started thinking about this topic in March 2023, and it was only in December 2023, nine months later, that I had a
draft essay.
Then it took me a further three months to finish off the draft. That’s an elapsed time of &lt;em&gt;one year&lt;/em&gt;, or 3,153,600 times
slower than ChatGPT’s elapsed time.&lt;/p&gt;
&lt;p&gt;The worst part? ChatGPT came to broadly the same conclusions as me. When I saw that, I was pretty deflated.
ChatGPT even included some of my points that I’d thought were all clever and novel.&lt;/p&gt;
&lt;h2&gt;No, we’re really bad at efficiency&lt;/h2&gt;
&lt;p&gt;So is efficiency a solved problem? Not quite.
In fact, we’re astonishingly terrible at all forms of efficiency.&lt;/p&gt;
&lt;p&gt;Let’s start by considering process efficiency.
Many years ago, pre-cloud, some of my colleagues sold a nifty provisioning system that would
allow people to do self-service requests for virtualised infrastructure.
They promised the client instances could be created in ten minutes, which at the time was impressive.
(Remember, this was pre-cloud.)&lt;/p&gt;
&lt;p&gt;To their dismay, the client came back with a complaint. They weren’t getting new instances in ten minutes.
The spin-up wasn’t an hour, or ten hours. It wasn’t even ten days.
It was taking the system &lt;em&gt;three months&lt;/em&gt; to provision a new instance.
My colleagues were puzzled. How could this be?
On investigation, it turned out the problem wasn’t technology, it was people.
The client had added some guard rails and governance to the system.
And then a few extra guard rails.
What with one guard rail and another, there was an 84-step pre-approval process for each instance.&lt;/p&gt;
&lt;p&gt;So, we all know people can be inefficient. But surely our software is efficient, right?
Well, not necessarily.
In 2017, LinkedIn did a research trip to Nashik, a small city about 100 miles from Mumbai.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/f0d11df0bf5bf8728df288b2462c7ffa/1321a/linked-in-india.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 66.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAAsTAAALEwEAmpwYAAACCklEQVR42o2Sa3OaQBSG+///UT/1SzpNJ02ichcBQZS7CBI0Gnh6ILFtMknbd2bnHJbdZ99zdj/xosenM7tDTdZsieqUaJ8Tyxi/q3QcxUNJ2Vak+4JwF7OpMxLJc5k/nI4j59MFuG1KnMTHjj3cPMDbrnGLkGW5wYwdpqGOmTjYuS/RRVlbmKmLmXmosT0e/AqYlTuCLMOLE5w4IG4yVlUswDV6smAWzdHiBYZANQFM14bE+Zjfbwzydvcb2Pc9vcT2cGTuhdwqJrOFwTIPWRQBSmIzS2201BldqQLXBa4GMud5TF2L6rh/DRxkWhZhIJtMg6vr79yqCneuxr24mUQWqoAVcWRmLvO1R7qtaU89q6ykaQ/PwAusLEsUVefz9FFKP6JpGpu85mp2w/1KRxFXQ9mGwMzIw49TuuetY7zkv4CappNmBXfLJwwnwl+6tOeeWTC4spiE0jPp5TxdYq9CeRU972ksOS8KDNOSU4ZFHbphsts9N9kIfLkAU6DibrgU36d97PhII9BxPRxpbtM0AqpQxe1FaVmjrRZYuYslTypIc/7s+7vATRTz5eorN5MJ1zc/yPPi5XfPWUqz16G8yxWLJCCtGv6mEdh13ehuvnDGcTn9EqOiwhOY4YvLIKb7F/Ct3pZzeuqwgxBtGfJNV8jqh/8DDqDB7Xs6nTuK5oCy9Cj27YfAnxbm2bgClWR1AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A map showing Nashik and a phone with the LinkedIn app&quot;
        title=&quot;&quot;
        src=&quot;/static/f0d11df0bf5bf8728df288b2462c7ffa/5a190/linked-in-india.png&quot;
        srcset=&quot;/static/f0d11df0bf5bf8728df288b2462c7ffa/772e8/linked-in-india.png 200w,
/static/f0d11df0bf5bf8728df288b2462c7ffa/e17e5/linked-in-india.png 400w,
/static/f0d11df0bf5bf8728df288b2462c7ffa/5a190/linked-in-india.png 800w,
/static/f0d11df0bf5bf8728df288b2462c7ffa/c1b63/linked-in-india.png 1200w,
/static/f0d11df0bf5bf8728df288b2462c7ffa/29007/linked-in-india.png 1600w,
/static/f0d11df0bf5bf8728df288b2462c7ffa/1321a/linked-in-india.png 3086w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The team wanted to see how people were using one of their new features.
The answer was, they weren’t. The site failed to load, because even in the city, connectivity was too poor.
Many modern web sites have similar problems. The sites have so much bloat, they’re actually &lt;em&gt;useless&lt;/em&gt; in large parts of
the world.&lt;/p&gt;
&lt;p&gt;Waste and bloat is everywhere. A quarter of our servers are zombies - that is, they haven’t delivered
any computing services for six months. A further quarter are utilised less than five percent of the time.
The average server in our industry has utilisation between 12 and 18%.
That’s just not good enough. It’s financially wasteful and environmentally destructive.
All computer systems have overheads, so even at idle, that server still consumes significant electricity.
And then there’s the physical hardware. Manufacturing hardware takes raw materials, and water, and energy.
There’s only a return on that investment if the hardware is &lt;em&gt;used&lt;/em&gt;.
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/bf61a89abbfd28ce3cf63620bdc41d21/f36fd/zombie.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 70.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAAsTAAALEwEAmpwYAAABXUlEQVR42p2RW0/CQBCF+f8vvvkXiJAgRqNCAhQSSBFR0ChC77TQFuVSaltKaY/tJpCQSKHMy15m55tzdlKICc/z4K293d73fViWFVeC1H+XUaFt2+j2XkB36mh1mqjRFHRdh+M4JJ8IGAQBAj/A0xuNa+oKl+kL5Kksao0q5os5gSYGRjGd/SBXyCBfyeCmlg0Vv0IZKUR9ImAUruuStdltoPxcQJG+AycxUDU1VHgG0DAM8leVegml1iNyVJoANV2FZVunA7d2l+YSA3YQDoRGuV1AvpoBI/TR63+C5Zm9tycBGY6BKIn4YN5RbNzjgbqFJEskN5tND046hSPBciwWxgJDZYiVuzr2PH7Kk28dY3VEzpIshgkctHpUYfTxDNcn1iIAL3KwHSu5wm13YcjDMI3dvflr4ovtnW9ZkHisvfVeE1EWoE3UWNsHLTsrBxt/s1c80hQoYzkW+AepWjx2CZ+W6AAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A zombie&quot;
        title=&quot;&quot;
        src=&quot;/static/bf61a89abbfd28ce3cf63620bdc41d21/5a190/zombie.png&quot;
        srcset=&quot;/static/bf61a89abbfd28ce3cf63620bdc41d21/772e8/zombie.png 200w,
/static/bf61a89abbfd28ce3cf63620bdc41d21/e17e5/zombie.png 400w,
/static/bf61a89abbfd28ce3cf63620bdc41d21/5a190/zombie.png 800w,
/static/bf61a89abbfd28ce3cf63620bdc41d21/c1b63/zombie.png 1200w,
/static/bf61a89abbfd28ce3cf63620bdc41d21/29007/zombie.png 1600w,
/static/bf61a89abbfd28ce3cf63620bdc41d21/f36fd/zombie.png 2488w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;All of this inefficiency is unfortunate, but accidental.
We’d perhaps like to get rid of it, but we haven’t really put our minds to the problem.&lt;/p&gt;
&lt;p&gt;But sometimes, we cling to inefficiency. Deliberate inefficiency is a common organisational anti-pattern.
Team members won’t report an inefficiency, because eliminating the inefficiency might mean eliminating their colleagues.
Inefficiency creates employment. Dysfunctional employment, but employment.&lt;/p&gt;
&lt;p&gt;Several software solution vendors have told me similar stories about the challenges they have selling their product.
Their nifty technologies make teams more efficient, and allow them to do more with less.
But it turns out, the managers of those teams don’t want to do more with less.
They want to do more with &lt;em&gt;more&lt;/em&gt;! We measure the status of leaders by how big their budget is, how big their team is.
Managing a team of hundred is more prestigious than managing a team of twenty-people-plus-some-great-software. So why
would you buy something that potentially reduced your status?&lt;/p&gt;
&lt;p&gt;Are we doomed to inefficiency, then? Well, not necessarily.
We can get rid of inefficiency, and we can do it without hurting people.
In &lt;a href=&quot;/is-efficiency-a-good-thing-part-ii&quot;&gt;part II&lt;/a&gt; I explore some good ways of eliminating inefficiency, and also some
bad-and-wrong ways.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Six things we learned implementing Rockstar on Quarkus]]></title><description><![CDATA[Let’s run Rockstar programs on Quarkus! What could possibly go wrong? Rockstar is an example of an “esoteric language,” designed to be…]]></description><link>http://hollycummins.com/rockstar-jfokus/</link><guid isPermaLink="false">http://hollycummins.com/rockstar-jfokus/</guid><pubDate>Tue, 06 Feb 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Let’s run Rockstar programs on Quarkus! What could possibly go wrong?&lt;/p&gt;
&lt;p&gt;Rockstar is an example of an “esoteric language,” designed to be interesting rather than intuitive, efficient or especially functional. Rockstar’s interesting feature is that its programs use the lyrical conventions of eighties rock ballads. Rockstar has been implemented in many languages, but not as a JVM language. This was clearly (clearly!) a gap that needed fixing, so Holly and Hanno have stepped in to make sure us JVM folks aren’t missing out. As a bonus, because “Bon Jova” is a JVM language, it can take advantage of Quarkus-y goodness. Along the way, a lot was learned about eighties music, classloaders, parsing, bytecode manipulation, and the important relationship between language style, syntax, and semantics.&lt;/p&gt;
&lt;p&gt;There will be live coding, live singing and live guitar!&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The future of development: Are our jobs getting harder or easier?]]></title><description><![CDATA[In the early days of computing, software developers had to encode their programs on punch cards, and carry the bits around by hand. By the…]]></description><link>http://hollycummins.com/jobs-harder-easier-jchampions/</link><guid isPermaLink="false">http://hollycummins.com/jobs-harder-easier-jchampions/</guid><pubDate>Fri, 26 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In the early days of computing, software developers had to encode their programs on punch cards, and carry the bits around by hand. By the 1970s they had the joy of keyboards and displays. Sadly, those oppressed developers had to wear flare trousers, work in C, and manage their own memory. By 2000 the memory thing was sorted out, but the trousers were arguably worse, and developers had to maintain their own hardware. Now, our hardware is someone else’s problem, everything is open source, AI can write our code, and we have a choice whether to work in Java, Kotlin, Javascript, Ruby, Go, Python, Rust, or Typescript. On the other hand, now we have yaml. And many of us find we have to work in ALL of Java, Kotlin, Javascript, Ruby, Go, Python, Rust, or Typescript, all while managing a cloud, becoming security experts, learning CSS, and debugging the code our AI “helper” wrote. And we’re supposed to be full-stack, and shifting left, and building up open source in our free time. Are we living the dream or sinking under cognitive overload? And is open source helping or hurting?&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Tradeoffs, Bad Science, and Polar Bears – The World of Java Optimisation]]></title><description><![CDATA[Welcome to the Java optimisation jungle. Why can’t we “just make it go faster”? It turns out, in most cases, we need to first work out…]]></description><link>http://hollycummins.com/tradeoffs-bad-science-and-polar-bears-the-world-of-java-optimisation-devnation/</link><guid isPermaLink="false">http://hollycummins.com/tradeoffs-bad-science-and-polar-bears-the-world-of-java-optimisation-devnation/</guid><pubDate>Thu, 25 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Welcome to the Java optimisation jungle. Why can’t we “just make it go faster”? It turns out, in most cases, we need to first work out “faster for whom?” and “why do we want to go faster?” and “what even is faster?” This talk introduces the basic principles of optimisation, before bouncing through the pitfalls of optimisation; why the exact same techniques which make Quarkus rocket-fast used to be a terrible idea fifteen years ago, why fast benchmarks make for slow programs, why project loom may not be the speedup you’re hoping for, and why even though it can be easy to get wrong, optimisation really really matters. Along the way we’ll talk about measuring things, bad advice, garbage collection, and climate change.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Is efficiency a good thing?]]></title><description><![CDATA[We live in a golden age of efficiency. Our modern cloud native applications have tiny footprints. Our infrastructure is now code. Everything…]]></description><link>http://hollycummins.com/efficiency-tech-rocks/</link><guid isPermaLink="false">http://hollycummins.com/efficiency-tech-rocks/</guid><pubDate>Fri, 08 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;We live in a golden age of efficiency. Our modern cloud native applications have tiny footprints. Our infrastructure is now code. Everything is automated, even creative endeavours like writing and artwork. And yet. Despite all the optimisation, despite all the automation, many of us feel unproductive - and it’s worse than that. Busywork hasn’t gone away, our systems are stretched so thin any disturbance destabilises them, our people are burning out, and IT consumes more resources than ever before. What’s going on? Was efficiency the wrong goal, or are we just doing it wrong?&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The AI skills gap is becoming incredibly troubling for companies everywhere]]></title><description><![CDATA[The solution isn’t so clear, report claims]]></description><link>http://hollycummins.com/the-ai-skills-gap-is-becoming-incredibly-troubling-for-companies-everywhere/</link><guid isPermaLink="false">http://hollycummins.com/the-ai-skills-gap-is-becoming-incredibly-troubling-for-companies-everywhere/</guid><pubDate>Thu, 07 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The solution isn’t so clear, report claims&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Cloud Native Users Struggle to Achieve Benefits, Report Says]]></title><description><![CDATA[Of those organizations that have “gone cloud native,” 95% said that challenges are keeping them from seeing the full benefits, in a new…]]></description><link>http://hollycummins.com/cloud-native-users-struggle-to-achieve-benefits-report-says/</link><guid isPermaLink="false">http://hollycummins.com/cloud-native-users-struggle-to-achieve-benefits-report-says/</guid><pubDate>Tue, 28 Nov 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Of those organizations that have “gone cloud native,” 95% said that challenges are keeping them from seeing the full benefits, in a new survey by Foundry for UST.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Quarkus Unveiled: Efficiency & Green Impact • Holly Cummins & Charles Humble • GOTO 2023]]></title><description><![CDATA[This interview was recorded at GOTO Aarhus for GOTO Unscripted. #GOTOcon #GOTOunscripted #GOTOaar
http://gotopia.tech
Read the full…]]></description><link>http://hollycummins.com/charles-humble-goto-interview/</link><guid isPermaLink="false">http://hollycummins.com/charles-humble-goto-interview/</guid><pubDate>Tue, 21 Nov 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This interview was recorded at GOTO Aarhus for GOTO Unscripted. #GOTOcon #GOTOunscripted #GOTOaar
&lt;a href=&quot;http://gotopia.tech&quot;&gt;http://gotopia.tech&lt;/a&gt;
Read the full transcription of this inter…&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Spécial Tech.Rocks Summit 2023 - Holly CUMMINS (Red Hat) et Philippe ENSARGUET (Orange) - #S05EP31]]></title><description><![CDATA[🎤  Dans cette nouvelle mini-série dédiée à notre Summit qui se tient les 7 et 8 décembre prochains en hybride, nous avons aujourd’hui le…]]></description><link>http://hollycummins.com/special-tech-rocks-summit-2023-holly-cummins-red-hat-et-philippe-ensarguet-orange--s05ep31/</link><guid isPermaLink="false">http://hollycummins.com/special-tech-rocks-summit-2023-holly-cummins-red-hat-et-philippe-ensarguet-orange--s05ep31/</guid><pubDate>Sun, 12 Nov 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;🎤  Dans cette nouvelle mini-série dédiée à notre Summit qui se tient les 7 et 8 décembre prochains en hybride, nous avons aujourd’hui le plaisir de recevoir une de nos speakers 2023 : Holly CUMMINS, Senior Principal Software Engineer chez Red Hat, au micro de Philippe ENSARGUET, VP of Software Engineering chez Orange.&lt;/p&gt;
&lt;p&gt;Holly revient dans ce podcast sur les enjeux de développer des applications plus vertes, mais également sur ce que Holly appelle le SwitchLightOps, la capacité à éteindre nos applications quand nous ne les utilisons pas.&lt;/p&gt;
&lt;p&gt;Holly établit un lien entre l’efficacité et la consommation de nos solutions. Plus une application est efficace, moins elle consomme. De la même manière, plus elle est efficace, moins elle coûte cher en i&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The necessary death of software systems]]></title><description><![CDATA[Sometimes, death is a feature, not a defect  It’s Hallowe’en! Let’s talk about mortality, death gods, and zombies. I know, I know, you…]]></description><link>http://hollycummins.com/death-and-software/</link><guid isPermaLink="false">http://hollycummins.com/death-and-software/</guid><pubDate>Tue, 31 Oct 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;Sometimes, death is a feature, not a defect&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/279c9091f35c4022dce7c714dbf5bb8c/c6a7a/pumpkin.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 35%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAAAsTAAALEwEAmpwYAAAA/klEQVR42o2RX0vCcBSG94W7COkmwlaRKd32DboQQgl0Ga3VrsqbwpvEDZuz1o9pxlxWrtqfJ9FuRrA8Nwdeznnel3MkMir8nPIdvOM6T4wGw7mWJEnWCtJfabEwNptYtT3skxI99QBxW8a5OyN48zLBaeDvUOAPeaxv81DN0a6u4aq72HoBUy8iWsdkhZTSvHjevfsbBkoeoewg1CLd0y2choyoydhagenESwX4Fzh2OrjKJmZlHaOe5+WqhHMuYx3l6Cn7hGG47A0XjlEU4V4f0i2v0K6sYl3MYI0N+jMDt6WlzJd+ytfHhGejyatxid/R8A2dYNQnjuPML/8AXXwMtPkbkrYAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A carved pumpkin&quot;
        title=&quot;&quot;
        src=&quot;/static/279c9091f35c4022dce7c714dbf5bb8c/5a190/pumpkin.png&quot;
        srcset=&quot;/static/279c9091f35c4022dce7c714dbf5bb8c/772e8/pumpkin.png 200w,
/static/279c9091f35c4022dce7c714dbf5bb8c/e17e5/pumpkin.png 400w,
/static/279c9091f35c4022dce7c714dbf5bb8c/5a190/pumpkin.png 800w,
/static/279c9091f35c4022dce7c714dbf5bb8c/c1b63/pumpkin.png 1200w,
/static/279c9091f35c4022dce7c714dbf5bb8c/29007/pumpkin.png 1600w,
/static/279c9091f35c4022dce7c714dbf5bb8c/c6a7a/pumpkin.png 2719w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;It’s Hallowe’en! Let’s talk about mortality, death gods, and zombies.&lt;/p&gt;
&lt;p&gt;I know, I know, you studied computer science instead of biology precisely so you didn’t have to deal with dead things.
Most of us who work with software spend &lt;em&gt;a lot&lt;/em&gt; of effort trying to keep our applications alive. If you’re an SRE, keeping systems alive is basically your whole job description.&lt;/p&gt;
&lt;h2&gt;Ryuk and the god of death&lt;/h2&gt;
&lt;p&gt;But you know what? Death is a necessary fact of life, &lt;em&gt;especially&lt;/em&gt; in the land of bits and bytes. I realised this when I was trying to sort out some compatibility issues between Quarkus, Podman, and Testcontainers. In order to get Quarkus Dev Services (which use Testcontainers under the covers) to &lt;a href=&quot;https://quarkus.io/guides/podman&quot;&gt;work with Podman&lt;/a&gt; on my Mac, I had to adjust my environment variables to disable something called Ryuk:&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;export TESTCONTAINERS_RYUK_DISABLED=true # this is a bad idea&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;With this, everything more or less worked … but it turned out it wasn’t the right way to solve my problem. Why? What was Ryuk, anyway? This comes back to the question about what Testcontainers is doing, or ‘why would I useTestcontainers rather than just starting containers directly?’ (If you’re using Quarkus, the answer is that you actually don’t use Testcontainers directly, Quarkus uses Testcontainers for you to transparently start all your dependencies before you or your tests need them. But let’s not worry about that for now.)&lt;/p&gt;
&lt;p&gt;Testcontainers does two really useful things; it has libraries in all the popular languages to interact with a container runtime. That means instead of having to fuss with &lt;code class=&quot;language-text&quot;&gt;Runtime.exec&lt;/code&gt; or &lt;code class=&quot;language-text&quot;&gt;exec.Run&lt;/code&gt;, you can just call a nice API to start your container. But the other useful thing Testcontainers does is &lt;em&gt;stop your containers&lt;/em&gt;. No more discovering a container still hogging your RAM days after you last used it, just because you forgot to shut it down.&lt;/p&gt;
&lt;p&gt;How does Testcontainers shut down abandoned containers? This is where Ryuk comes in. The &lt;a href=&quot;https://github.com/testcontainers/moby-ryuk&quot;&gt;Ryuk service&lt;/a&gt; is a specialised container whose job is to clean up other containers. That is, it’s a container-killer. A helpful, appreciated, container-killer. And the name? Ryuk is named after Ryuk in the &lt;em&gt;Death Note&lt;/em&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/Death_Note&quot;&gt;manga series&lt;/a&gt;. Ryuk is a &lt;a href=&quot;https://www.historydefined.net/shinigami/&quot;&gt;&lt;em&gt;shinigami&lt;/em&gt;&lt;/a&gt;, or death god. Although &lt;em&gt;Death Note&lt;/em&gt;’s Ryuk is capricious and self-interested, in Japanese folk culture &lt;em&gt;shinigami&lt;/em&gt; are often presented as helpers that lead people towards the world of the dead, a bit like a friendlier version of the grim reaper.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/77a8bffd96770c80002787f2770194e7/ea580/ryuk.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 60%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAACJUlEQVR42n2Ti1MSYRTF+a8bpodlk5oDNTVMqNRqSCqPUIkxfAALy4qYIlIJCShOGOADYSYeg+CvZWcgFevO7Mzuvd937jn33NVwLa6urvreC4Ui21vb6nN0dMTl5SX/C83tRLlc5jh3TLvdVr+tVhuPB57wfGQUnU6vNuhEt/5PwFarRem8hCyv47B/ZMw4jnnKzOtXBkyCBYPByNDQCNHtnZ6C64p6gN1ksXiC1+tXLw0OPmVs3MRaIExQjhDdzxGKZ/Gvxwj4RaSQzOFh9k75mm63RCKpytNqH6C9p8W1tMq5cn53/ydf4nGimTyxRArnvBu9/gWzM1YymYO+2fckp1JplpY8jI7qePRwgHn3CsUaBDb3EObczLp8RBOH+MQQw8+Glcb3mZ62UK/Xb4DekLy25uWtSWBycgoxKPP1RxY5EmVy9hNub5iDXyX8imS97iXvlfkKwhTpWyx7gBcXZdLpDJuRTcWYMLHYLsufPSw6nWzFkxwUKojSOrGdGGazhQ+WGXw+sc9tzfW9azabhCRZZbGxEcFhsyNMTGCfm8PhcGJ8M4ao1IIBST0jSaE+p2/sYWceHs8KwaBE/Nt3Fhx2zMI77MoaWa12bDaHyjybzZLL5Tg9PVPWrX23y52o1WosL68iigGS+ynOz85I7u2xuOBS2WyEI+TzearVKqXSRZ/DfQw7xXK5woliUPV39W9OmW+j3qBSqSgqGnf+ql3AP/IOWaya+qR/AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Ryuk writing in the death note book&quot;
        title=&quot;&quot;
        src=&quot;/static/77a8bffd96770c80002787f2770194e7/5a190/ryuk.png&quot;
        srcset=&quot;/static/77a8bffd96770c80002787f2770194e7/772e8/ryuk.png 200w,
/static/77a8bffd96770c80002787f2770194e7/e17e5/ryuk.png 400w,
/static/77a8bffd96770c80002787f2770194e7/5a190/ryuk.png 800w,
/static/77a8bffd96770c80002787f2770194e7/c1b63/ryuk.png 1200w,
/static/77a8bffd96770c80002787f2770194e7/29007/ryuk.png 1600w,
/static/77a8bffd96770c80002787f2770194e7/ea580/ryuk.png 2193w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;So Ryuk definitely isn’t something we want to disable. It’s garbage collection at the process level. No one wants stray containers living forever.
The right way to configure Testcontainers for Podman, on Mac, is to edit ~/.testcontainers.properties and add the following line:&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;ryuk.container.privileged=true&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;What’s this doing? It’s making Ryuk, the death god, a bit more god-like. You will also need to run Podman in rootful mode, so that it has privileges to pass on to Ryuk:&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;podman machine set --rootful&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Do we have evidence how useful stopping things actually is? We do.&lt;/p&gt;
&lt;h2&gt;The zombie menace&lt;/h2&gt;
&lt;p&gt;If a Testcontainers container doesn’t stop, it’s a minor irritation. It might consume a little bit of CPU and memory until your laptop is next rebooted, or in the worst cases, it might cause interference and weird results in subsequent test runs. But when “not stopping things” is multiplied across an entire industry, the consequences can be serious.&lt;/p&gt;
&lt;p&gt;The Anthesis institute have done a series of studies to work out how widespread zombie servers are. They found that &lt;a href=&quot;https://www.nrdc.org/sites/default/files/data-center-efficiency-assessment-IB.pdf&quot;&gt;25-30%&lt;/a&gt; of servers are “comatose” – that is, they haven’t done any useful work for six months. Here, “useful work” doesn’t mean “they weren’t just serving cat videos,” it means they haven’t delivered any information or computing services for six months or more. That’s a shockingly low bar, and yet 25% of systems still didn’t meet it.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/70c02e713ff328fe29e1180aa4385739/f41ed/zombie.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 47%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAz0lEQVR42p2SywrCMBBF/f9fcOfajQoquqggiJQspIq4EF+oqRabxrS2TR/XVlAQtNHezQTCnJwhU0FBpJSYL2cYkgGIoYNzjiRJilpQ+XaRpumj5sBaq4qGVsduv4OMZDlgnjiOIcQV/XEbGumBniiiOCoP9P0b1ptVBuygO2pis12DOfbbBH8BPc8FNSnIVIexmCAIAwSBX94wj8MdMJvBZsVmPwHdzPBsnR5nah4RylD1/mfg08K6WK8RhStwNA9KS+UvP5ujbF0YZ0rDO9vMv/w3dqY4AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A green zombie&quot;
        title=&quot;&quot;
        src=&quot;/static/70c02e713ff328fe29e1180aa4385739/5a190/zombie.png&quot;
        srcset=&quot;/static/70c02e713ff328fe29e1180aa4385739/772e8/zombie.png 200w,
/static/70c02e713ff328fe29e1180aa4385739/e17e5/zombie.png 400w,
/static/70c02e713ff328fe29e1180aa4385739/5a190/zombie.png 800w,
/static/70c02e713ff328fe29e1180aa4385739/c1b63/zombie.png 1200w,
/static/70c02e713ff328fe29e1180aa4385739/29007/zombie.png 1600w,
/static/70c02e713ff328fe29e1180aa4385739/f41ed/zombie.png 3820w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;What if we raise the bar slightly and look at servers where the utilisation was under 5% (which is still a pretty atrociously low bar)? These ‘under-utilised’ servers made up another 29% of the pool.  If you combine the totally-comatose and mostly-comatose servers, that makes up &lt;em&gt;two thirds&lt;/em&gt; of the servers.&lt;/p&gt;
&lt;p&gt;Even systems that are in regular use are often only used for part of the time. In 2021, &lt;a href=&quot;https://web.archive.org/web/20230321092337/https://www.business2community.com/cloud-computing/overprovisioning-always-on-resources-lead-to-26-6-billion-in-public-cloud-waste-expected-in-2021-02381033&quot;&gt;$26.9 billion&lt;/a&gt; was wasted on always-on cloud instances.&lt;/p&gt;
&lt;p&gt;In other words, we’re paying for hardware, and electricity, for systems that do … nothing. Sustainable, it is not. What our industry needs is a nice friendly &lt;em&gt;shinigami&lt;/em&gt; to take down these systems.&lt;/p&gt;
&lt;p&gt;We’re starting to see &lt;em&gt;shinigami&lt;/em&gt; which can shut systems down out of hours. For example,  the &lt;a href=&quot;https://github.com/AxaFrance/dailyclean&quot;&gt;DailyClean tool&lt;/a&gt; provides a friendly interface for scheduling ‘alive times’ for Kubernetes workloads.&lt;/p&gt;
&lt;h2&gt;Randomised rebirth&lt;/h2&gt;
&lt;p&gt;However, zombie-destruction is a harder problem to solve. If something is &lt;em&gt;never&lt;/em&gt; being used, why did no one just turn it off? Often, these systems have been lost out of institutional memory, because a process changed and the old process was never properly retired, or a team was disbanded or a project stopped. Forgotten systems are, by definition, invisible.&lt;/p&gt;
&lt;p&gt;Sometimes, people &lt;em&gt;know&lt;/em&gt; the system is useless, but it’s too much trouble to shut the systems down. This is a particular problem in regulated industries, which are (understandably) averse to casually shutting down parts of their infrastructure. I heard a story of an outsourcing provider that shut down what they thought was an unused server. Shortly after, the phone rang with a very very angry client on the other end. The ‘unused system’ turned out to be the backbone of the client’s network infrastructure, just mislabelled. Avoiding this kind of awkward scenario is why some companies enforce heavy bureaucracy before letting any of their employees go anywhere near a power switch. In these organisations, the paperwork to &lt;em&gt;prove&lt;/em&gt; a system is unused can take many months.&lt;/p&gt;
&lt;p&gt;There is a better way. I mentioned that SRE is the business of keeping systems alive.  One of the tools SREs use to do this is regularly killing systems. What? Really. Damaging infrastructure creates resiliency, and killing infrastructure creates immortality. It’s a bonkers paradox, but it works. Chaos engineering is the practice of arbitrarily shutting down parts of a system to exercise recovery processes. This is known as deploying chaos monkeys. In the ideal case, the system copes with the loss of a member by failing over or routing around the casualty. In the bad case, there is learning!&lt;/p&gt;
&lt;p&gt;We can extend this to zombie-hunting. One way of detecting zombies is known as a “scream test” (very Halloween-y!). The system gets shut down, and then the team wait for screams. If there were none, it wasn’t being used. This methodology can be formalised as an eco-monkey. As long as everyone is confident a system can be brought back up (‘LightSwitchOps’), it can be subjected to a test-shut-down with relatively low risk. If that sounds a bit too scream-y for comfort, AIOps can identify under-utilised systems by monitoring traffic and hardware load levels.&lt;/p&gt;
&lt;p&gt;Killing systems is important. It’s important to extend their life, paradoxically. It’s important to save resources, and save the planet. And it’s important so that our laptops don’t grind to a halt under the weight of two dozen unused databases. So this Halloween, let’s give some thanks to our techno-&lt;em&gt;shinigami&lt;/em&gt;, and see if we can write some more.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;I’m grateful to Ixchel Ruiz for telling me about the origin of the Ryuk name, and for the conversation that inspired this blog.&lt;/em&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The Vroom Model, or Why Naming is The Hardest Problem In Computer Science]]></title><description><![CDATA[TL;DR If you’re looking for the talk where I describe the Vroom Model, the best source is
this GOTO Aarhus talk. You might also like to…]]></description><link>http://hollycummins.com/the-vroom-model-naming/</link><guid isPermaLink="false">http://hollycummins.com/the-vroom-model-naming/</guid><pubDate>Mon, 30 Oct 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;TL;DR&lt;/h1&gt;
&lt;p&gt;If you’re looking for the talk where I describe the Vroom Model, the best source is
this &lt;a href=&quot;/five-tricks-making-your-applications-greener-goto-aarhus&quot;&gt;GOTO Aarhus talk&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You might also like to browse everything I have about &lt;a href=&quot;/category/sustainability&quot;&gt;sustainability&lt;/a&gt;.&lt;/p&gt;
&lt;h1&gt;Background&lt;/h1&gt;
&lt;p&gt;I use &lt;a href=&quot;https://www.algolia.com/&quot;&gt;Algolia&lt;/a&gt; in my &lt;a href=&quot;/tech-stack&quot;&gt;site stack&lt;/a&gt;.
It’s one of the more pointless parts of the site, because it doesn’t get used much.
Every week Algolia mails me to tell me that no one has searched for anything.&lt;/p&gt;
&lt;p&gt;Every now and then, someone actually does search for something, and I get all excited.
Sometimes someone did a search but Algolia had no results to return, which is a shame.
If someone took the time to search, I want to make sure my site helps them find what they need.&lt;/p&gt;
&lt;p&gt;Twice, the failed search has been ‘vroom model.’ Since there’s not many searches, this
makes ‘vroom model’ both the most popular search on my site, &lt;em&gt;and&lt;/em&gt; the least successful search on my site.
Oops.
Why is ‘vroom model’ not finding anything? Two reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I index the titles of externally hosted content such as talks, but not the contents. I should sort that out, but it’s
a bit involved.&lt;/li&gt;
&lt;li&gt;I am an idiot, and gave my model a un-searchable name. I didn’t actually call my model ‘vroom model,’ I called it ’
vrrrooooom model’. Or perhaps it was ‘vrooooom’ model. Or maybe ‘vrrooom model’? The number of ‘r’s and ‘o’s in ’
vrrrooooooom’ is totally non-deterministic. That looks cute on a slide, but is hopeless for trying to find it by text
search. When I looked, I discovered that I’ve used several different spellings, even in my own writing. More evidence,
if any were needed, that naming is the hardest problem in computer science.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;How hard is naming? Well, it turns out there already &lt;em&gt;is&lt;/em&gt; something called the Vroom Model (one ‘r’, two ‘o’s). It was
invented in 1973 by Victor Vroom, working alongside Phillip Yetton and Arthur Jago.
The original Vroom Model, or, to be more
complete, &lt;a href=&quot;https://en.wikipedia.org/wiki/Vroom%E2%80%93Yetton_decision_model&quot;&gt;Vroom-Yetton-Jago Normative Decision Model&lt;/a&gt; is
about decision making, not about sustainability.&lt;/p&gt;
&lt;p&gt;If you use Google search for “vrrroooom model,” it will search instead for “vroom model,” and show you Dr. Vroom’s
model.
If you force it to search for the original spelling, with all the r’s and o’s, it will show you a set of images which
are barely safe for work. They involve cars. And bikinis.&lt;/p&gt;
&lt;h1&gt;Ok but what is Holly’s Vrrroooooooooom Model?&lt;/h1&gt;
&lt;p&gt;Let’s assume you’re interested in green software rather than sexy vehicles. What’s the vrrrooooom model, in that
context?
While we’re here, I’ll explain. Calculating carbon emissions is important, but hard.
Sometimes it’s important to be accurate, but if you’re optimising, you don’t need a
perfectly precise absolute number, you just need to be consistent in your measurements
so that you know you’re going in the right direction.
Sarah Bergman made this point when discussing the Green Software
Foundation’s &lt;a href=&quot;https://learn.greensoftware.foundation/measurement/#the-sci-equation&quot;&gt;Software Carbon Intensity&lt;/a&gt;
specification.
Sometimes you’ll need to guess about the exact values of some constants when doing SCI calculations, but as long as the
external value does stay the same, that’s enough to allow you to do data-driven optimisation.&lt;/p&gt;
&lt;p&gt;But sometimes even that level of measurement is too much work.
We all have competing priorities and too much to do.
Does that mean we should just give up on carbon efficiency if we don’t have time for rigorous measurements?
No way!&lt;/p&gt;
&lt;p&gt;In some of my talks, I describe two useful heuristics for reducing carbon footprint.
I should emphasise that these are heuristics, and they will never be as good as proper measurements.
Remember, all models are wrong, but some are useful.&lt;/p&gt;
&lt;h2&gt;The Economic Model&lt;/h2&gt;
&lt;p&gt;The first model is the economic model, which I learned
from &lt;a href=&quot;https://www.infoq.com/presentations/devsusops/&quot;&gt;Adrian Cockcroft&lt;/a&gt;.
The proper name is “economic input-output life cycle assessment.”
That’s a bit of a mouthful, which is why Adrian calls it the economic model.
In the simplest terms, if you reduce your company’s cloud bill, or data centre bill, or electricity bill,
you’re probably reducing your cloud footprint.
This only works if you keep everything else the same; you can’t just shift consumption from one account to another and
claim a win, or move to a cheap-but-polluting supplier and claim a win.&lt;/p&gt;
&lt;h2&gt;The Vrrrrrroooom Model&lt;/h2&gt;
&lt;p&gt;The second model is the vrrooom model.
I made the name of this one up, which is where the failed-search-problem started!
The vroom model says that energy consumption is (sort of, mostly) proportional to execution time.
Again, this only works if you keep other things the same; it’s cheating to upgrade hardware or move to a massively
parallel cloud execution model and then claim a win because your code is running faster.
There will also be some workloads that break this model.
For example, memory contributes to carbon footprint, so an increase in memory consumption could drive execution time
down but energy consumption up.&lt;/p&gt;
&lt;p&gt;For a quick visual to see how well the heuristic stacks up against reality, have a look at the results table in the
internet-famous &lt;a href=&quot;https://greenlab.di.uminho.pt/wp-content/uploads/2017/10/sleFinal.pdf&quot;&gt;“Energy Efficiency Across Programming Languages”&lt;/a&gt;
paper.
There are some quite legitimate critiques of this paper.
The measurements here were based on a series of micro-benchmarks, and should be taken with some salt.
Nonetheless, I find the correlation between time and energy pretty striking.
I’ve plotted the authors’ results, and you can see the line is pretty close to straight.
C is fastest and uses the lowest-energy, Rust is very very close to matching C, and
Java does pretty well in both execution speed and energy use. JavaScript is middle of the pack,
but notice how TypeScript is &lt;em&gt;far&lt;/em&gt; slower and more energy-hungry. PHP, Perl, and Python bring up the rear.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/a2878a120c0cf48844f4749e5f661bc7/5fc9a/execution-time-vs-energy.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 62%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAABEUlEQVR42pWT25KEIAxE/f8v3QenVG7hnqWxYqGjsztUIRHx0J3A5L3nbdtYa81KqdNojOlxrZX/2yY8Yoycc+ZSytEBQUcs7QrGe0qJUy5MvmBiB4YQOvDpJwGPG2F9aEI2TVzbPKAhlR14B7rOC0iaD4ljA8SmEOC+BpZhV3b+BihRzqWDjxwuy8LW2pOdsUsOMXof2vj+fRTUgUT0WDUocOR3mzHz1chV+YSCjLZrLZxbrI1jpW3P1aL8oebOwUmh7AIraNoQGxf5Zzb82qgrvFPyqFDyk1LuybWUGGnL+7F6LMpHYGwwS/FQOtpBOnB4kRoUD+dvtIx33DaB/3kOAUPh1nXleZ7ZOfemcLxNvwoDtVUzWi+yAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A plot of execution energy and time for a series of languages. The line is close to straight.&quot;
        title=&quot;&quot;
        src=&quot;/static/a2878a120c0cf48844f4749e5f661bc7/5a190/execution-time-vs-energy.png&quot;
        srcset=&quot;/static/a2878a120c0cf48844f4749e5f661bc7/772e8/execution-time-vs-energy.png 200w,
/static/a2878a120c0cf48844f4749e5f661bc7/e17e5/execution-time-vs-energy.png 400w,
/static/a2878a120c0cf48844f4749e5f661bc7/5a190/execution-time-vs-energy.png 800w,
/static/a2878a120c0cf48844f4749e5f661bc7/c1b63/execution-time-vs-energy.png 1200w,
/static/a2878a120c0cf48844f4749e5f661bc7/29007/execution-time-vs-energy.png 1600w,
/static/a2878a120c0cf48844f4749e5f661bc7/5fc9a/execution-time-vs-energy.png 1648w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;em&gt;The relationship between energy and execution time for a series of benchmarks. Values are normalised against the
results for C. Data source: &lt;a href=&quot;https://greenlab.di.uminho.pt/wp-content/uploads/2017/10/sleFinal.pdf&quot;&gt;Pereira et. al&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Going beyond languages to frameworks, we see a similar pattern with Quarkus.
Applications built on top of Quarkus tend to have
a &lt;a href=&quot;https://www.redhat.com/rhdc/managed-files/mi-idc-quarkus-lab-validation-analyst-paper-f23914-202006-en.pdf&quot;&gt;higher throughput&lt;/a&gt;,
and they also
have a &lt;a href=&quot;https://quarkus.io/assets/pdf/mi-greener-java-applications-en.pdf&quot;&gt;lower energy consumption&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I think we can take a lot of encouragement from both the vroom model and the economic model.
Everybody likes low bills and fast software.
Cheap and speedy IT is its own reward, but the economic and vroom models tell us that it is also &lt;em&gt;green&lt;/em&gt;. Result.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Expert Talk: The Current State of Software Engineering • Jez Humble & Holly Cummins • GOTO 2023]]></title><description><![CDATA[This interview was recorded at GOTO Aarhus for GOTO Unscripted. #GOTOcon #GOTOunscripted #GOTOaarhttp://gotopia.techRead the full…]]></description><link>http://hollycummins.com/jez-humble-interview/</link><guid isPermaLink="false">http://hollycummins.com/jez-humble-interview/</guid><pubDate>Tue, 24 Oct 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This interview was recorded at GOTO Aarhus for GOTO Unscripted. #GOTOcon #GOTOunscripted #GOTOaarhttp://gotopia.techRead the full transcription of this inter…&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The future of development: Are our jobs getting harder or easier?]]></title><description><![CDATA[In the early days of computing, software developers had to encode their programs on punch cards, and carry the bits around by hand. By the…]]></description><link>http://hollycummins.com/jobs-harder-easier-fosscomm/</link><guid isPermaLink="false">http://hollycummins.com/jobs-harder-easier-fosscomm/</guid><pubDate>Sat, 21 Oct 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In the early days of computing, software developers had to encode their programs on punch cards, and carry the bits around by hand. By the 1970s they had the joy of keyboards and displays. Sadly, those oppressed developers had to wear flare trousers, work in C, and manage their own memory. By 2000 the memory thing was sorted out, but the trousers were arguably worse, and developers had to maintain their own hardware. Now, our hardware is someone else’s problem, everything is open source, AI can write our code, and we have a choice whether to work in Java, Kotlin, Javascript, Ruby, Go, Python, Rust, or Typescript. On the other hand, now we have yaml. And many of us find we have to work in ALL of Java, Kotlin, Javascript, Ruby, Go, Python, Rust, or Typescript, all while managing a cloud, becoming security experts, learning CSS, and debugging the code our AI “helper” wrote. And we’re supposed to be full-stack, and shifting left, and building up open source in our free time. Are we living the dream or sinking under cognitive overload? And is open source helping or hurting?&lt;/p&gt;</content:encoded></item><item><title><![CDATA[8 Talk Title Mistakes We've All Made]]></title><description><![CDATA[Why crafting a good presentation title is annoyingly important, and annoyingly hard I hate choosing titles for my talks. Titles have to be…]]></description><link>http://hollycummins.com/presentation-titles/</link><guid isPermaLink="false">http://hollycummins.com/presentation-titles/</guid><pubDate>Thu, 12 Oct 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/a1f854f49b9dbf7632406ac9a48a5746/edd6a/speaker-your-formula.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 62%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAAB8UlEQVR42p1S247aQAzN//9BVamvldrysKr2gaqriiqsKlgFFaLlkpDLZHIDkrBcQghJTsezRaKUp7VkzYzHPvaxraxWK1iWhSTLwP0AHvfBg/BV6S2U7mT3GANnLphjI0kTkDRNg0tRCIwLZ5JT/gIcMpwSD9XSRZNw1Ikv7/WKoUk9NJmPIo0EuHsb0DBNMOMZG2OA2fdP4N0W0t5XPN99QPDzDuzhC6JOC+a3j3C690jGfdTrCNxjtwFt24ahddF4OlwRuOjfo3QGyEaP2M007Cc95EI30yds2BTVNkF12MHzvNuAy+US46EGEL14DuxW8qMUQYHPkSxjZKJfh0OB+XwOx3FAEIvFAnVd41qU/X4PUzjWRY76eED9N+M+z9Hr9aB2H6GqXWiaJt+dTge5+IvjEGEY4Hg8/lOlQgbTNFBVlTRQVnIgpQ0IwxBlWaIoClmVKXpOdNs/nvCr/xu2NQcVdaavnE4nDIdD6Loups1lwHVfznK2uzzGu88jtNojVGUhiriokCoaDAaClorJZCKBaVCuK/ZN7B0p9Y1Oy7JFUobxjOF9a4q2ar+yuqRMWbfbLdbrNdI0lbTiOEYURQiCQCpR9H1fJgnEuX7Z4kHVYVj8v0kreINQv23bksneBHge0jmQBkkrREO7BvwDILCJnFmTHe8AAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A speaker in front of a formulaic title slide&quot;
        title=&quot;&quot;
        src=&quot;/static/a1f854f49b9dbf7632406ac9a48a5746/5a190/speaker-your-formula.png&quot;
        srcset=&quot;/static/a1f854f49b9dbf7632406ac9a48a5746/772e8/speaker-your-formula.png 200w,
/static/a1f854f49b9dbf7632406ac9a48a5746/e17e5/speaker-your-formula.png 400w,
/static/a1f854f49b9dbf7632406ac9a48a5746/5a190/speaker-your-formula.png 800w,
/static/a1f854f49b9dbf7632406ac9a48a5746/c1b63/speaker-your-formula.png 1200w,
/static/a1f854f49b9dbf7632406ac9a48a5746/edd6a/speaker-your-formula.png 1479w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;Why crafting a good presentation title is annoyingly important, and annoyingly hard&lt;/h2&gt;
&lt;p&gt;I hate choosing titles for my talks. Titles have to be good. They have to be &lt;em&gt;really&lt;/em&gt; good. Titles are the difference between a full room and you speaking to a room containing two colleagues and someone who got lost looking for Venkat’s session. That’s a lot of pressure for six (or so) words.&lt;/p&gt;
&lt;p&gt;Not only do titles need to be good, we have choose them at the time when we’re &lt;em&gt;least&lt;/em&gt; equipped to do so. By definition, conferences and meetups need to publish talk titles early.
But because it’s only sensible to hold off writing my talk until after it’s been accepted by a conference, I don’t entirely know what the talk will be about when I choose the title.
Even in the good case, I only know what the talk’s about once I’ve finished all the slides.
In the bad case, I have to deliver a talk a few times before I properly figure out what my point even is, but that’s a topic for another post.&lt;/p&gt;
&lt;p&gt;Just because I’m bad at talk titles myself doesn’t mean I don’t notice other people’s mistakes. So here’s my “do as I say, not as I do” guide to choosing a good title.&lt;/p&gt;
&lt;h2&gt;Your title has to work hard, because people will select a talk based only on the title&lt;/h2&gt;
&lt;p&gt;You know what your talk is about, and you wrote up a beautiful abstract to explain it to prospective audiences. Sadly, most conference attendees will never read that abstract. Reading an abstract is an extra click and an extra twenty seconds of reading, when people are standing in a busy corridor and they only have ten minutes in the break between sessions and they also need to find a loo and barge their way through to the pastry table and some coffee would also be welcome. Some conference apps are so clunky they actively discourage abstract-reading, even for people who already have their pastry: once you’ve paged away you can’t get back to the right point in the schedule. I love conference apps that have a tooltip hover for abstracts, but they’re in a minority.&lt;/p&gt;
&lt;h2&gt;Avoid ambiguous terms&lt;/h2&gt;
&lt;p&gt;A while ago, I went to a talk called “Take a walk on the client side.” I went because a good friend of mine was presenting it.
Because I just shuffled along without thinking much about where I was going, I was expecting a talk about front-end UI development.
It took me quite a while to work out what was going on in the talk, because I kept waiting for the UI to appear, and it never did.
Eventually, after about twenty minutes of live demo, I worked out that in this context “client” meant “cli,” not “ui”.
It’s the same word, both meanings are valid, but they’re pretty much opposites.
It was an excellent talk, but it would have been even better if I’d actually known what it was about while I was watching it.&lt;/p&gt;
&lt;p&gt;Yes, if I’d read the abstract, I probably would have understood, but I didn’t. Remember, many people won’t read an abstract. To the speaker, who was immersed in the topic, “client” was unambiguous, but for everyone else, “cli” would have carried more meaning.&lt;/p&gt;
&lt;h2&gt;Avoid cute plays on words&lt;/h2&gt;
&lt;p&gt;The other problem with “Take a walk on the client side” as a talk title is that, after going to the talk, I had the &lt;a href=&quot;https://www.youtube.com/watch?v=oG6fayQBm9w&quot;&gt;Lou Reed song&lt;/a&gt; stuck in my head the whole day. In fact, now that I’m writing about the talk, the song is back again. I do not want to be humming Lou Reed right now, and I blame the speaker.&lt;/p&gt;
&lt;p&gt;A talk title’s most important job is to tell the audience what they’re going to get out of the session, and it doesn’t have many words to do it in.
If all but one or two words of the title are just recycling something from J K Rowling or Tolkien or Lou Reed or whoever, it leaves very few words to explain what the talk is about.
For example, in “Does my bus look big in this?” (&lt;a href=&quot;https://www.infoq.com/presentations/soa-without-esb/&quot;&gt;true talk title&lt;/a&gt;), there’s only one word in the whole title doing real work. That’s just not enough information density.&lt;/p&gt;
&lt;p&gt;I get why people write this type of light-hearted title. When we choose a witty riff on a well-known phrase, we &lt;em&gt;are&lt;/em&gt; trying to communicate what people will get out of the session, but in an indirect way. We’re saying “what you’ll get out of this talk is &lt;mumble&gt; something vague about [topic], and also a lot of entertainment, because I am Witty and Fun.”
That’s a &lt;em&gt;totally&lt;/em&gt; legitimate objective for a conference talk. However, it’s a high bar. I get frustrated if I go to a talk with a fun title, and the talk turns out not to be a-laugh-a-minute.
It was a bait and switch – you promised me a joke-fest, but then gave me something dry and technical.
As with everything, it is much better to under-promise and over-deliver. Choose a talk title that makes the topic clear, and then have the entertainment be a lovely surprise.&lt;/p&gt;
&lt;h2&gt;Avoid cute plays on politically-loaded words&lt;/h2&gt;
&lt;p&gt;For a while, we had a rash of “Make [whatever] great again” talk titles. I’m relieved to see that they’ve mostly passed. I’m sure when speakers chose those titles, no harm was meant, and it just seemed like an amusing play on words. Nonetheless, those words came with a lot of baggage, and this kind of title will cause problems for part of your audience. Do you really want the audience to be distracted trying to figure out if you deliberately chose a title with racist overtones or just did it by accident?
No, you don’t.&lt;/p&gt;
&lt;h2&gt;Avoid flab&lt;/h2&gt;
&lt;p&gt;Many years ago I had a talk called “OSGi and Java EE: a match made in a … box?”. The information density is kind of ok(ish), because three of four words (“OSGi”, “Java EE,” and “match”) are all doing work. However, “made in a box” isn’t contributing any meaning at all. It was supposed to be adding humour, but in hindsight I think it only added confusion. If I’m honest, I got a bit stuck for a title and filled in the gap with words that seemed to fit, instead of really thinking about what point I was trying to make.&lt;/p&gt;
&lt;p&gt;Recently, I spotted (but did not go to) a talk called “Take your shot of Vitamin!” Vitamin is not a well-known tool (I had to look it up, as would most people). “Take your shot of” isn’t doing anything to help explain what Vitamin is. Something like “How Decathlon Improve Productivity with the Vitamin Design System” is wordy, and a bit clunky, and deeply boring, but at least it would allow people to understand what the talk is about without having to read an abstract. Alternatively, “How Decathlon Improve Vitality with the Vitamin Design System” is a bit less generic, and it retains the original’s playing with the double meaning of ‘vitamin.’&lt;/p&gt;
&lt;h2&gt;Avoid cliché&lt;/h2&gt;
&lt;p&gt;There are some phrases that tend to turn up over and over again in titles. There are a 960 talks on YouTube that start with “the developer’s guide to.” There are 36 “the busy developer’s guide to.” Another common variant is “a hitchhikers guide to.” It’s kind of friendly and nice, but ultimately it’s adding words without adding meaning.&lt;/p&gt;
&lt;h2&gt;Don’t disguise product pitches&lt;/h2&gt;
&lt;p&gt;Sometimes speakers don’t just forget to include the topic of their talk, they actively omit the real topic. If your whole talk is about a product, make that clear in the title. Yes, you want to explain the benefits of the product to your audience, but don’t try and draw people in with the promise of a universal topic, and then talk about your wonder-product for forty minutes. It does not win fans.&lt;/p&gt;
&lt;h2&gt;Don’t have the same talk titles as everyone else&lt;/h2&gt;
&lt;p&gt;Now we get to the part where I contradict all of my previous advice. That’s why writing talk titles is hard! Because titles are trying to do a lot in a small number of characters, many of them pretty bland. After all, if you’re not allowed to have plays on words, or words which aren’t working hard, and you want to avoid treading in dark political undercurrents, you’re not left with much space for colour.
So then conference programmes end up with columns of “Lessons learned doing [process]”, “Lessons learned: [other process]”, “[Technology]: [claimed benefit]”, “[Other technology]: [other claimed benefit]”.
I have written many of those utilitarian titles myself.&lt;/p&gt;
&lt;p&gt;It’s hard, but it &lt;em&gt;is&lt;/em&gt; possible to do better. Devoxx recently had a talk called “Understanding Probabilistic Data Structures with 112,092 UFO Sightings”. This is a great title. There’s a clear topic and objective: how to work with probabilistic data structures. Even the ‘understanding’ part is doing work; it suggests this talk is aimed at a beginner audience, who don’t already understand probabilistic data structures. And then we move on to the colour. Including a concrete number makes the title memorable: if the it had been  “Understanding Probabilistic Data Structures with UFO Sightings” it would not have been as strong. Finally, the title surfaces the fact that there will be a demo (good), and the demo domain is likely to be flying-saucer-entertaining (excellent) and pop-psychology-informative (unexpected bonus!). It would have been a shame to keep such a great demo topic buried in the abstract. But the most important thing about the title is that every single word in the title is adding something to our understanding of what to expect from the talk.&lt;/p&gt;
&lt;p&gt;Information theory can help us understand what’s wrong with many titles. The entropy of “Lessons learned doing [process]” is slightly higher than that of “Does my bus look big in this?”, but both have a pretty low &lt;a href=&quot;https://www.quantamagazine.org/how-claude-shannons-concept-of-entropy-quantifies-information-20220906/&quot;&gt;entropy&lt;/a&gt;. That is, if you wrote a clever compressor-for-talk-titles that had access to a pop-culture-database, they’d both compress down pretty easily. There’s a pretty obvious formula going on in both cases. On the other hand, any title including the phrase “112,092 UFO Sightings” will have a high entropy, because no other talk will have the number “112,092” in its title. (I checked on YouTube. There really are no others.)&lt;/p&gt;
&lt;p&gt;Aim for high entropy -  find a way to add personality and surprise readers while &lt;em&gt;also&lt;/em&gt; adding meaning and without descending into cliché. If you find a way to do that, it’s a total win. Share your tips with me?&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/af63fe51488dc68217c6d1a042756b4c/cd536/ones-zeros.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 17%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAYAAACTWi8uAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAi0lEQVR42n2OywqFMAxE/f/P8g9cWanaRaHYB12oi750LlNwewPJCZMhyfC+L1prIL8spaDWipxzz/u+cV1XJ2fsz/OE9x4hBEgpYYxBSgkDyziO2LYNWmvM8wylFI7jwLIsEEJgmibs+44YI5xzWNcV1to+J+mh3hc+z9PNvMhvKFL7vmZPMj7+ix8dQ+TWjAbL/wAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A series of ones and zeros&quot;
        title=&quot;&quot;
        src=&quot;/static/af63fe51488dc68217c6d1a042756b4c/5a190/ones-zeros.png&quot;
        srcset=&quot;/static/af63fe51488dc68217c6d1a042756b4c/772e8/ones-zeros.png 200w,
/static/af63fe51488dc68217c6d1a042756b4c/e17e5/ones-zeros.png 400w,
/static/af63fe51488dc68217c6d1a042756b4c/5a190/ones-zeros.png 800w,
/static/af63fe51488dc68217c6d1a042756b4c/cd536/ones-zeros.png 1114w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;Afterthoughts: can you rename talks the second time round?&lt;/h1&gt;
&lt;p&gt;If a title doesn’t work, is it cool to change the title but keep the talk the same?
I don’t know, and it’s something I puzzle over myself. Sometimes, after I’ve written a talk, I realise the title doesn’t accurately reflect what the talk turned out to be about. Or sometimes I give a talk I think is good, but audiences stay away in droves. Maybe I just chose a bad topic, but maybe the title wasn’t as compelling as it could be?&lt;/p&gt;
&lt;p&gt;An obvious solution is to try again with a better title, but I try not to do this too often. It feels like cheating to deliver the same talk under a different title. What if program committees get confused about what they’re getting? What if someone goes to the talk thinking it’s new, and then ends up bored?&lt;/p&gt;
&lt;p&gt;However, I do make exceptions. I wrote a talk that promised to be about testing in general, but because of time constraints, the final slides mostly focussed on contract testing. I’ve updated the title to be more specific and set expectations better. One of my favourite current talks was originally called “Writing Greener Java Applications.” It was a good talk, but every time I gave it, I was speaking to a depressingly small number of people.  So I reworked the structure slightly, and called it “These Five Tricks Can Make Your Apps Greener, Cheaper, and Nicer.” It’s a total click-bait title, but I’m hoping it’s so blatant that it makes people smile. I think the title also does a better job of actually conveying what people will get out of the talk - there will be practical, actionable, advice, and the actions will be &lt;em&gt;easy&lt;/em&gt;.
It’s also a bit more informative about what’s in the talk because it introduces the idea of co-benefits (what I call “the double win”).
Even if people don’t care about saving the world, there are other reasons to be green, like saving money. I talk about that a lot in the talk, so it makes sense to include it in the title.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;I was prompted to write this after reading QCon’s excellent guidance for speakers about talk titles. Much of their advice is similar to what I’ve doled out myself over the years, but I re-used “Does my Bus look big in this?” from their document. Thanks, QCon!&lt;/em&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Creating Custom QR Codes]]></title><description><![CDATA[Last week, I was at Devoxx Belgium. It was great, and I learned loads.
I also have a big list of talks to go look up later.
Some talks I…]]></description><link>http://hollycummins.com/creating-QR-codes/</link><guid isPermaLink="false">http://hollycummins.com/creating-QR-codes/</guid><pubDate>Mon, 09 Oct 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Last week, I was at Devoxx Belgium. It was great, and I learned loads.
I also have a big list of talks to go look up later.
Some talks I couldn’t attend because of schedule clashes, and some I actually &lt;em&gt;did&lt;/em&gt;
attend, but I did the over-optimistic multitasking thing and realised too late that I’d missed good stuff.
(Yes, I know that you too think you can multitask. No, like me, you really can’t.)&lt;/p&gt;
&lt;p&gt;One of the talks I half-missed put up a QR code for the slides at the end, so I could catch up (hurray! thank you!).
So I scanned the code, and got … this.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/b4ce270fa27d077673e02d30e203897c/d123d/cookie-notice.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 53.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAABR0lEQVR42qWTTU/CQBCG+fl68uBvUA8aORhPHlD5KELSTwJIMCFLC63t0oUCbcPC67RqUmI4gJtMZmfmnWc3+1Ha7XayaNvtVgKQzWZTttttqWl67nVdl6qq5vmsXuyhOCUDzSslHBiWZcHzPEwmEzDG4DgOOOfodDpZ4572B5qN14NA3TDxyecIggBT10VAMCFEvtDJQNudYTYLEYYhomiJ1Wp1OtA0TQLNsY5jSClBZ4skSfL8ycCxPYXnc7ieD9cXmC+W/9vhQnDINEK6FtgkC8RxBPNY4K9W1QxclIc4L49x+Wjj7J78wwiqbmSq44EaNd4qHNd1gZuqh6uaQLkV5vkjgd9iRWlAqVagtmqoPT+Rr+Ot/gKl0djT/QFSwIpGt8mowHzfZ91ujw2GH4x+C+u/D1iv32f0LvN6piv0jcg45e++AE/KReEK48nFAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A page with a cookie notice&quot;
        title=&quot;&quot;
        src=&quot;/static/b4ce270fa27d077673e02d30e203897c/5a190/cookie-notice.png&quot;
        srcset=&quot;/static/b4ce270fa27d077673e02d30e203897c/772e8/cookie-notice.png 200w,
/static/b4ce270fa27d077673e02d30e203897c/e17e5/cookie-notice.png 400w,
/static/b4ce270fa27d077673e02d30e203897c/5a190/cookie-notice.png 800w,
/static/b4ce270fa27d077673e02d30e203897c/c1b63/cookie-notice.png 1200w,
/static/b4ce270fa27d077673e02d30e203897c/29007/cookie-notice.png 1600w,
/static/b4ce270fa27d077673e02d30e203897c/d123d/cookie-notice.png 3040w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;There was a cookie consent, for the full creepy-tracking and personalised ads level of cookie.
So I noped out, and didn’t get the slides for that talk. Now I’ll never know what I missed.&lt;/p&gt;
&lt;p&gt;I’m judgey now, but I used to use similar cookie-tastic websites to make QR codes for my slides.
The reason I don’t use them anymore is that now I have my site generate
its own QR codes as part of the build.
(It’s kind of cool; append &lt;a href=&quot;qr&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;/qr&lt;/code&gt;&lt;/a&gt; to the URL of this page, and you’ll get a page with a QR code that points back to the parent page).&lt;/p&gt;
&lt;p&gt;But what if, unlike me, you didn’t spend your Christmas holidays writing a big Gatsby infrastructure so that you can run custom Javascript every time you upload a talk?
What if you want something in Java, not Javascript? It turns out, making QR codes is still really easy.
If you can program even a little bit there’s just no need to be using web-based QR code generators.
The ones you generate locally are privacy preserving, generating them is fewer clicks than fussing around in a GUI, and you can even embed your own picture into the code.&lt;/p&gt;
&lt;p&gt;I needed to generate QR codes for the Quarkus workshops, and I was surprised how easy it was.
I used JBang to make invocation easy, and used the &lt;code class=&quot;language-text&quot;&gt;zxing&lt;/code&gt; API for generation.
If you’re not interested in how it works, you can jump ahead to &lt;a href=&quot;/5c25661ae4594167a9c41570824f955d/QrCode.java&quot;&gt;the full source code&lt;/a&gt;. Download it,
make it executable, install jbang if you don’t have it already, and then run&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;shell&quot;&gt;&lt;pre class=&quot;language-shell&quot;&gt;&lt;code class=&quot;language-shell&quot;&gt;./QrCode.java &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;your-url&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;path-to-a-tiny-image-to-embed&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;output-file&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;If you want an even easier execution experience, have a look at how Max Anderson &lt;a href=&quot;https://xam.dk/blog/qrcode-rabbit-hole-with-monkeys/&quot;&gt;uses JBang aliases to invoke the script.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;What’s under the covers?&lt;/p&gt;
&lt;p&gt;This code at the top of the class file declares the dependencies (with no build file, because of the magic of jbang), and also handles launching:&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;java&quot;&gt;&lt;pre class=&quot;language-java&quot;&gt;&lt;code class=&quot;language-java&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;///usr/bin/env jbang &quot;$0&quot; &quot;$@&quot; ; exit $?&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;//DEPS com.google.zxing:core:3.4.0&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;//DEPS com.google.zxing:javase:3.4.0&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This is the meat of the method.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;java&quot;&gt;&lt;pre class=&quot;language-java&quot;&gt;&lt;code class=&quot;language-java&quot;&gt; &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;writeQrCode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;String&lt;/span&gt; text&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;String&lt;/span&gt; imagePath&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;String&lt;/span&gt; outPath&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; width&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;throws&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Exception&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

        &lt;span class=&quot;token class-name&quot;&gt;Map&lt;/span&gt;&lt;span class=&quot;token generics&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;EncodeHintType&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;ErrorCorrectionLevel&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt; hints &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;HashMap&lt;/span&gt;&lt;span class=&quot;token generics&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token comment&quot;&gt;// Specify the error correction, to allow the QR code to tolerate errors, such as&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;// a great big picture plunked in the middle&lt;/span&gt;
        hints&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;put&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;EncodeHintType&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;ERROR_CORRECTION&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;ErrorCorrectionLevel&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;H&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token comment&quot;&gt;// QR codes are square&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; height &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; width&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token class-name&quot;&gt;QRCodeWriter&lt;/span&gt; qrCodeWriter &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;QRCodeWriter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token class-name&quot;&gt;BitMatrix&lt;/span&gt; bitMatrix &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; qrCodeWriter&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;encode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;text&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;BarcodeFormat&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;QR_CODE&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; width&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
                height&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; hints&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;// Load QR image&lt;/span&gt;
        &lt;span class=&quot;token class-name&quot;&gt;BufferedImage&lt;/span&gt; qrImage &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;MatrixToImageWriter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toBufferedImage&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;bitMatrix&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;MatrixToImageConfig&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
                        &lt;span class=&quot;token number&quot;&gt;0xFF000000&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
                        &lt;span class=&quot;token number&quot;&gt;0xFFFFFFFF&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token comment&quot;&gt;// Initialize combined image&lt;/span&gt;
        &lt;span class=&quot;token class-name&quot;&gt;BufferedImage&lt;/span&gt; combined &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;BufferedImage&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;qrImage&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getHeight&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; qrImage&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getWidth&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;token class-name&quot;&gt;BufferedImage&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;TYPE_INT_ARGB&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token class-name&quot;&gt;Graphics2D&lt;/span&gt; g &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Graphics2D&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; combined&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getGraphics&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token comment&quot;&gt;// Write QR code to new image at position 0/0&lt;/span&gt;
        g&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;drawImage&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;qrImage&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        g&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setComposite&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;AlphaComposite&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getInstance&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;AlphaComposite&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;SRC_OVER&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1f&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token function&quot;&gt;addOverlayImage&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;g&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; qrImage&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; imagePath&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token class-name&quot;&gt;ImageIO&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;write&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;combined&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;png&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;File&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;outPath&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token class-name&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;out&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Created QR code at &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; outPath&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The reason we can put pictures in QR codes is that the QR code processor treats the image as an ‘error’,
and smooths it out with error correction.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;java&quot;&gt;&lt;pre class=&quot;language-java&quot;&gt;&lt;code class=&quot;language-java&quot;&gt;        hints&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;put&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;EncodeHintType&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;ERROR_CORRECTION&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;ErrorCorrectionLevel&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;H&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;(It turns out that &lt;a href=&quot;https://gooey.ai/qr-code/?run_id=w6dm6cdc&amp;#x26;uid=A62l7GdqwTfTVtL7vKNcfhpo5sI2&quot;&gt;‘making the whole QR code a beautiful piece of AI-generated digital art’&lt;/a&gt; can also be smoothed out as an error,
but that kind of awesomeness is beyond the scope of this little utility. But go look at some of &lt;a href=&quot;https://www.creativebloq.com/news/ai-qr-codes&quot;&gt;what can be produced&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;The picture you embed can be anything - a (tiny) photo, a colour drawing, or black and white vector art.
Most people go for something black and white.
From my own experimentation, I think that’s partly because it fits better with the rest of the QR code, visually.
It also means the error correction has less to do, so your image can be bigger and still work.
If your image is only black and white blocks, and the ‘correct’ content is black and white blocks, every block
the QR code scanner reads has a 50% chance of being the same as what was supposed to be there anyway.
If the image is colour, almost none of the overlaid blocks will be ‘correct’.&lt;/p&gt;
&lt;p&gt;This is the code that overlays the image into the center of the QR code.
If you didn’t want your own picture, you could skip this whole section.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;java&quot;&gt;&lt;pre class=&quot;language-java&quot;&gt;&lt;code class=&quot;language-java&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;BufferedImage&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;addOverlayImage&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Graphics2D&lt;/span&gt; g&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;BufferedImage&lt;/span&gt; qrImage&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
                                                 &lt;span class=&quot;token class-name&quot;&gt;String&lt;/span&gt; imagePath&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;throws&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;IOException&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;// Load logo image&lt;/span&gt;
        &lt;span class=&quot;token class-name&quot;&gt;BufferedImage&lt;/span&gt; overlay &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;ImageIO&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;read&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;File&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;imagePath&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token comment&quot;&gt;// Calculate the delta height and width between QR code and the logo&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;// Note that we don&apos;t do any scaling, so the sizes need to kind of&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;// work together without obscuring too much logo&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; deltaHeight &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; qrImage&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getHeight&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; overlay&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getHeight&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; deltaWidth &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; qrImage&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getWidth&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; overlay&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getWidth&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; woffset &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;round&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;deltaWidth &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; hoffset &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;round&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;deltaHeight &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token comment&quot;&gt;// Write the logo into the combined image at position (deltaWidth / 2) and&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;// (deltaHeight / 2), so that it&apos;s centered&lt;/span&gt;
        g&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;drawImage&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;overlay&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; woffset&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; hoffset&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; overlay&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Note that this code doesn’t scale the image down, so if you pass in a huge image, you wouldn’t see any QR code under it.
I did that the first time I was testing, and got confused!
If the image is medium-sized you’ll see a QR code, but it won’t work properly. You can play around with finding the right size for the image. How big you can go before hitting errors will depend a bit on the exact url you’re encoding and also on the image you’re embedding.
You can also play around with transparency, so that your image has a shape and not all parts are opaque.
That can looks cool, and lets you go bigger.&lt;/p&gt;
&lt;p&gt;(My code doesn’t work with SVGs, but Max Anderson has &lt;a href=&quot;https://xam.dk/blog/qrcode-rabbit-hole-with-monkeys/&quot;&gt;extended it&lt;/a&gt; to support SVGs, and also to adjust the image size in the code itself. Go have a look, it’s nice!)&lt;/p&gt;
&lt;p&gt;Finally, the last piece of code takes care of reading command-line arguments and kicking off the image creation.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;java&quot;&gt;&lt;pre class=&quot;language-java&quot;&gt;&lt;code class=&quot;language-java&quot;&gt;    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; args&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;throws&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Exception&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;args&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token class-name&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;err&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
                    &lt;span class=&quot;token string&quot;&gt;&quot;Wrong number of arguments - should be text to encode, image path, output file&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt;
                            &lt;span class=&quot;token string&quot;&gt;&quot; path&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token class-name&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;exit&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token class-name&quot;&gt;String&lt;/span&gt; text &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; args&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token class-name&quot;&gt;String&lt;/span&gt; imagePath &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; args&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token class-name&quot;&gt;String&lt;/span&gt; outPath &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; args&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; width &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;640&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token function&quot;&gt;writeQrCode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;text&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; imagePath&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; outPath&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; width&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Save everything into a &lt;code class=&quot;language-text&quot;&gt;QrCode.java&lt;/code&gt; file, and invoke your new generator like this:&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;shell&quot;&gt;&lt;pre class=&quot;language-shell&quot;&gt;&lt;code class=&quot;language-shell&quot;&gt;./QrCode.java http://hollycummins.com ~/Downloads/small-waving-person.png ~/Downloads/myqr.png&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;(This assumes you have jbang installed to handle the launch, and you’ll need to set the java file to be executable. You can also just invoke jbang explicitly with &lt;code class=&quot;language-text&quot;&gt;jbang QrCode.java &amp;lt;args&gt;&lt;/code&gt;.)&lt;/p&gt;
&lt;p&gt;Here’s what you’ll get:&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 640px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/547325248258cece6ac0a3d6a559233d/6af66/myqr.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAADTUlEQVR42q2UySv9fxTGrexs/AU2ko2FJENSKJSFkjJkipB5noeQKZF5Hsq4k1DmKZSUsqGkJBkzLFiYPd+epz7363a/v93vU7c7vM/73Oe8znOOFf7nx8r48PPzg/f3d7y+vuLr68si8OPjA5+fnzr7/v7WO2N5h3ctEra1taG2thZdXV3IyclRcEdHB4KCglBXV4fy8nLs7u4iLy8P8/Pz+s7YmpoadHZ2mkRZGf/e2NiItLQ0REREKEFLSwscHR3h4OCA0tJSpKenY3R0FG5ubigsLERzczPCwsL0e1NTk1SbFFJ2a2srwsPDdaG+vh4zMzPIyspCVFQUlpaW0N7ejsHBQVXS29ureFdXVwngGXGYlcwy8/Pz0dPTg4SEBOzt7amsgYEBnRUUFKi02dlZrKysIDIyUiVXV1ejqKjIkiGZHR0dKUl/fz+6u7sVTEXR0dHY2dlBZWUlMjMzcXl5iYeHB50x5uXl5S9Do0N3d3dYXV1FRkYGysrKkJubKwTT09PY2NjA09MTRkZGdLa1tSWu7u7uevHMlNCAyRKdnJyQmpqKw8NDjI+Po6KiAjc3N/p+fHyM6+trVFVVwdvbW2rJjg1ZXFz8W7KhkGWkpKQgICBA0NfX15GUlITh4WE8Pz8Lyfn5Ofr6+oQgOTkZQ0NDYkm1FiWzq4GBgYiPj5cKLy8vdXJtbQ23t7d4e3tT+TY2NvDw8MDm5qY48w5jLBLSg35+fjpkt2loqqGqx8dHgd/f34etra08enZ2Bl9fXyQmJuLi4sIyoY+Pj/x3enqKmJgYTE1NybRsCNnd398LC5mFhIRoiliyv7+/bGXBkNzYBAaSCf1GU8fFxWF7e1ss5+bmxI5J2BR7e3vxPDk5MZ8UPuTGWaZ5s7OzMTk5KcNyzMbGxjQ1PHN2dpZ1ONfBwcHyLe1mNsvG6IWGhsLFxUWMOM98cRHQk0RCW1lbW8POzk7JaC3+2cTEhBJSpWk5NDQ0iFlsbCxKSkpwcHAgpmxWcXGxOLF8Kvb09NR8c/NwUqjSTCEflsMEtAITXl1dCcPy8rKWAkdvYWHBpJiciYhNZKzRC7MFy41BtQZgvvN3LlPjwu8la9z754L9r+d38O/P/0rGhH8A2qTfZeH30H0AAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;a qr code with a hand-drawn picture of a waving person&quot;
        title=&quot;&quot;
        src=&quot;/static/547325248258cece6ac0a3d6a559233d/6af66/myqr.png&quot;
        srcset=&quot;/static/547325248258cece6ac0a3d6a559233d/772e8/myqr.png 200w,
/static/547325248258cece6ac0a3d6a559233d/e17e5/myqr.png 400w,
/static/547325248258cece6ac0a3d6a559233d/6af66/myqr.png 640w&quot;
        sizes=&quot;(max-width: 640px) 100vw, 640px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Tradeoffs, Bad Science, and Polar Bears – The World of Java Optimisation]]></title><description><![CDATA[Welcome to the Java optimisation jungle. Why can’t we “just make it go faster”? It turns out, in most cases, we need to first work out…]]></description><link>http://hollycummins.com/tradeoffs-bad-science-and-polar-bears-the-world-of-java-optimisation-devoxx-be/</link><guid isPermaLink="false">http://hollycummins.com/tradeoffs-bad-science-and-polar-bears-the-world-of-java-optimisation-devoxx-be/</guid><pubDate>Thu, 05 Oct 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Welcome to the Java optimisation jungle. Why can’t we “just make it go faster”? It turns out, in most cases, we need to first work out “faster for whom?” and “why do we want to go faster?” and “what even is faster?” This talk introduces the basic principles of optimisation, before bouncing through the pitfalls of optimisation; why the exact same techniques which make Quarkus rocket-fast used to be a terrible idea fifteen years ago, why fast benchmarks make for slow programs, why project loom may not be the speedup you’re hoping for, and why even though it can be easy to get wrong, optimisation really really matters. Along the way we’ll talk about measuring things, bad advice, garbage collection, and climate change.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[So, you want to speak at conferences]]></title><description><![CDATA[Colleagues who’ve noticed that I occasionally abandon my day-job duties and gallivant around at conferences sometimes ask me for conference…]]></description><link>http://hollycummins.com/so-you-want-to-speak-at-conferences/</link><guid isPermaLink="false">http://hollycummins.com/so-you-want-to-speak-at-conferences/</guid><pubDate>Fri, 22 Sep 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Colleagues who’ve noticed that I occasionally abandon my day-job duties and gallivant around at conferences sometimes ask me for conference tips. How can they too ditch the day job for trains, planes, and an adoring audience? I understand why they’re asking - speaking at conferences is fun, the better conferences serve dessert four times a day, and hotel breakfast buffets almost always include bacon. Speaking at conferences is also the cheapest way to &lt;em&gt;attend&lt;/em&gt; conferences and learn.&lt;/p&gt;
&lt;p&gt;For a long time, I was a bit unsure about what to advise colleagues. I speak at conferences, because I speak at conferences. In 2007 I submitted to JavaZone, got accepted, and since then, more speaking just … followed. Speaking at a conference created a feedback loop which made me more likely to be accepted in CFPs and more likely to be straight-out invited to conferences.&lt;/p&gt;
&lt;p&gt;But when I thought about it a bit more, I realised my first conference talk didn’t come out of nowhere. Before I gave &lt;a href=&quot;/getting-the-most-out-of-gc-javazone&quot;&gt;that talk&lt;/a&gt;, I’d given lunch and learns, and written articles for IBM’s developerWorks. And it turns out that when I review talks for programme committees, I look for similar kinds of experience. If I see a name I don’t know first-hand, I’ll do a search for videos of them speaking and slide decks. If I can’t find those, I’ll look for blogs. Do they have something new to say? Is this useful teaching material? Is it clearly expressed?&lt;/p&gt;
&lt;h3&gt;The speaker ladder&lt;/h3&gt;
&lt;p&gt;So although there definitely is a feedback cycle for public speaking, there &lt;em&gt;are&lt;/em&gt; ways to get started which are accessible to all of us. These lower rungs will lead to higher levels, and, eventually, to bacon-for-breakfast and multiple-desserts.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Internal lunch and learns or tech days&lt;/li&gt;
&lt;li&gt;Speaker coaching events (many local user groups and conferences run these to help develop new speakers)&lt;/li&gt;
&lt;li&gt;Local user groups&lt;/li&gt;
&lt;li&gt;Regional conferences&lt;/li&gt;
&lt;li&gt;International conferences.&lt;/li&gt;
&lt;li&gt;Invited conferences&lt;/li&gt;
&lt;li&gt;Keynotes&lt;/li&gt;
&lt;li&gt;TED talks (I guess? I haven’t got past “keynote” yet, and suspect I never will)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/0726248cc47c9c59f0deb08619ba0f5f/c658e/ladder.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 58.00000000000001%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAAA3UlEQVR42qWSSQ+CMBSE/f//yShKqqRClcXlIBVxuVDXg0taxkKiiZeK8A5d0ryvM5PXgqHyPC/3NEnwfDwgsgxKSVMLWgZcuSqlYHfbiEIf1Bl8Pvkb+G68Xs6gxEa64giY+/VWC7jbpGDUgWNbWK/i5kB/7GEaBpi4FKfjoT6wKCklPDpEEi9BhwTm9AzAT37XC0ivW1qeRf5PdT+BCY/hMw+Btl2cGwPnUYjFbApidXAQoj7wPX+kb4GNHK2QQeo76mZY1P1+A+cc++1W23Yrqas0NkJbFSKrDHwBDfSpNnF9AMIAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A hand-drawn ladder&quot;
        title=&quot;&quot;
        src=&quot;/static/0726248cc47c9c59f0deb08619ba0f5f/5a190/ladder.png&quot;
        srcset=&quot;/static/0726248cc47c9c59f0deb08619ba0f5f/772e8/ladder.png 200w,
/static/0726248cc47c9c59f0deb08619ba0f5f/e17e5/ladder.png 400w,
/static/0726248cc47c9c59f0deb08619ba0f5f/5a190/ladder.png 800w,
/static/0726248cc47c9c59f0deb08619ba0f5f/c1b63/ladder.png 1200w,
/static/0726248cc47c9c59f0deb08619ba0f5f/29007/ladder.png 1600w,
/static/0726248cc47c9c59f0deb08619ba0f5f/c658e/ladder.png 2202w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;The pre-speaker ladder&lt;/h3&gt;
&lt;p&gt;Even &lt;em&gt;before&lt;/em&gt; speaking, you should have something to say, and make it public. Blog, or, if you’re ok dealing with video, make those.
This has two benefits; it helps you wrangle your thoughts, and it gives programme committees evidence that you know what you’re talking about. Here are some ways of sharing; as with the speaker ladder, the bottom rungs are open to everyone, and invites to the higher rungs tend to follow.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Social media threads&lt;/li&gt;
&lt;li&gt;Self-published blogs&lt;/li&gt;
&lt;li&gt;Articles in industry publications&lt;/li&gt;
&lt;li&gt;Self-published books&lt;/li&gt;
&lt;li&gt;Books with prestige publishers such as Manning and O’Reilly&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/8edea019a2bcbfeedad0ee6d3d347616/4a10c/oreilly-java.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 52.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAABVUlEQVR42pWT207CQBCGef8HIUqIUUOMChhADuHCBBHkYA8YWra0UEq7LdgDv1NCiV5Aylxtdma/+eewGZww3w8wV1Qs5zpM3YDO5phMvunexznLnHKY5gou5+AOh6Hr8DcbZLNXuLu9x263uwwYPzCMxf4cq2o0W+h+9DGdKsjl8rBt+xh3FpgEcFJmWWsEQYDe5wCtVhuv9QZUVYW1stIDE9OpZ1EUYW1ZGAyHECUJgijCo7Jd14XjOOmB2+0Wi0O53V4f1/kblF+qqFSqCElxDLPtFMDEuY6HIImQHx/QKRTQKRbRLpVQq9TgeR48Upiq5MQ3mzGYiyUcTQOXJVj9HlizgUm5BPn5CbPREJzAqRUqioJ6vYm3zju0pQlOLfih3Qupf5yUG7KcDvgXHIbRfgcZqRW+BIxGY4wFcZ+A0U56R+AFi/0vyWFYjDFo1IpzP+UXPOFOsPWo4XQAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Hand-drawn O&amp;#39;Reilly Java in a Nutshell&quot;
        title=&quot;&quot;
        src=&quot;/static/8edea019a2bcbfeedad0ee6d3d347616/5a190/oreilly-java.png&quot;
        srcset=&quot;/static/8edea019a2bcbfeedad0ee6d3d347616/772e8/oreilly-java.png 200w,
/static/8edea019a2bcbfeedad0ee6d3d347616/e17e5/oreilly-java.png 400w,
/static/8edea019a2bcbfeedad0ee6d3d347616/5a190/oreilly-java.png 800w,
/static/8edea019a2bcbfeedad0ee6d3d347616/c1b63/oreilly-java.png 1200w,
/static/8edea019a2bcbfeedad0ee6d3d347616/29007/oreilly-java.png 1600w,
/static/8edea019a2bcbfeedad0ee6d3d347616/4a10c/oreilly-java.png 2219w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;What should I talk about?&lt;/h2&gt;
&lt;p&gt;One of the biggest barriers for new speakers is the idea that they don’t have anything to talk about, or that they’re not experienced enough. It’s not true!
I mentioned that programme committees look for evidence you know what you’re talking about. I use the criteria “know what you’re talking about” very loosely. There are all kinds of talks, and only some involve experts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I created [technology x], here’s what influenced the design and how to use it&lt;/li&gt;
&lt;li&gt;I have years of experience in using [technology x] in the real world, here are the best practices&lt;/li&gt;
&lt;li&gt;Ten ways I personally have failed at [technology x] (and how you can avoid the same failures)&lt;/li&gt;
&lt;li&gt;I’ve just started using [technology x] and here’s all the things I had to learn for myself because the documentation assumes we’re all experts&lt;/li&gt;
&lt;li&gt;Our industry is going about [technology x] all wrong and here’s why [technology y] is a better choice&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Talks from creators and experts are great, but talks from people who’re just learning a technology are also valuable. In my experience, some experts are actually lousy teachers. They have so much knowledge that &lt;em&gt;everything&lt;/em&gt; is obvious to them. For the rest of us, it’s useful to have things spelled out. It’s even more useful to have the pitfalls pointed out. I sometimes joke about pain-driven development, but it’s an even better model for conference speaking. Did you just have a nightmarish project? Did you just do something that was way harder than it should be? When the bad things happen, make a note, and then when you’ve recovered, come back and turn it into a conference talk. “I made this mistake so you don’t have to”, is one of my favourite genres of talk. Have you made mistakes at work? Yes? Then you’re qualified!&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/2a1a5bc9c296da35fefa5a442bbaaf5f/49853/explosion.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 75%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAACXBIWXMAABYlAAAWJQFJUiTwAAACIklEQVR42oVU2Y7aQBDc//+XRHmNUJCQSPJEwn0YG2yu4APMYYO5XOlq1paBjdLSyMfMVFdV98wbniJNUx2M2+2mz8vlgtPpdJ+XwXf+y9YV4y3b+DyZ3lJ4rqvvk5EF789C3wlm9roIw/VD0hyQC7arAOf3rKvVSgfDHo9hWRZ+/vgOx7ERRTHC9RpDY4DZbAbDMOB5Xq5MATdhiKk5hLtcYjqdIggCrGUTN4wFME1v6HTaAmxiNBqhWq0Ku/DOfDLRNQ+Ah8MBrmT5Vi4LCyeXQZaci6IIvV4P5/MZm81GWdXrdZVOEDK8irJccobMrJVKRdlst1sFGg4NZUFmrVZL5jpqy31umDPVGhSLwjgcYpRKJcnoKhA37Pd7taHb7Qq7UMFpBcP3fUlkYbvbwTZN7OX5AEjqtVpNZZiygEwIthRvM0/jOBZQB/PFAtfrFVP55/seBq0mjsfjIyA9ms/nefaZgLV+/xLPBlgIgCFJmlLtiVS9KfIzgKP4vBMlL5KLPRUEPr58/oS++BlIS9FDziUC0mg08m+ybzTqqgbPgFlxklMCSzzryeAmMmD12+02DPHVtm3xtKNg7E1alZ2iF4YM9hUlJ0miFhC0L23DluFGW8CZzBGW9PblpDxLpvGuHDkyoLR+v4+ytJMjFWYhWPmFJGKSzPPisX376HIoRiySB6WviN57jvM8TWT8z8vho9umeOvs3CViaeb/JSfgX+8QeCKZSnesAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Hand-drawn explosion&quot;
        title=&quot;&quot;
        src=&quot;/static/2a1a5bc9c296da35fefa5a442bbaaf5f/5a190/explosion.png&quot;
        srcset=&quot;/static/2a1a5bc9c296da35fefa5a442bbaaf5f/772e8/explosion.png 200w,
/static/2a1a5bc9c296da35fefa5a442bbaaf5f/e17e5/explosion.png 400w,
/static/2a1a5bc9c296da35fefa5a442bbaaf5f/5a190/explosion.png 800w,
/static/2a1a5bc9c296da35fefa5a442bbaaf5f/c1b63/explosion.png 1200w,
/static/2a1a5bc9c296da35fefa5a442bbaaf5f/29007/explosion.png 1600w,
/static/2a1a5bc9c296da35fefa5a442bbaaf5f/49853/explosion.png 2224w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;Where should I publish?&lt;/h3&gt;
&lt;p&gt;Before you turn all your painful projects and awful mistakes into informative conference talks, you should turn them into informative blogs. But where should you write? The best answer for this changes over time. Four years ago, I would have said &lt;a href=&quot;http://medium.com&quot;&gt;Medium&lt;/a&gt;, but Medium’s paywall is too intrusive these days. A lot of momentum these days seems to be around newsletter platforms such as &lt;a href=&quot;https://substack.com/&quot;&gt;substack&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Alternatively, since you’re probably using LinkedIn already, &lt;a href=&quot;https://www.linkedin.com/help/linkedin/answer/a522427&quot;&gt;LinkedIn articles&lt;/a&gt; can be a convenient place to host writing. I have a suspicion that the LinkedIn algorithm prefers links to articles over links to other platforms, so if your main audience is on LinkedIn, that can be another advantage of Articles. For me personally, I get relatively little engagement on LinkedIn no matter what platform I use to write, so I wouldn’t want to put my writing into the LinkedIn walled garden. Your mileage may vary.&lt;/p&gt;
&lt;p&gt;If you have time, the best blogging platform is one where &lt;a href=&quot;https://trishagee.com/2014/03/20/atom-to-hugo/&quot;&gt;you own the content&lt;/a&gt;. Specifically, you need a copy of your writing that’s on your own machine, not on a cloud server somewhere, and the writing needs to be in a portable format. It’s happened more than once that I’ve invested far too many time carefully crafting content for a platform, only for the platform to become irrelevant or non-existent. Remember blogspot? No? Exactly. (A quick search tells me that blogspot was been bought by Google some time ago and, to everyone’s surprise, has not yet been &lt;a href=&quot;https://killedbygoogle.com/&quot;&gt;killed&lt;/a&gt;. But it’s safe to say it’s not where the cool kids are.)&lt;/p&gt;
&lt;p&gt;If you want to own your own content, that pretty much means setting up a Wordpress site, or using a statically generated site with Github Pages. I didn’t fancy paying for Wordpress hosting and I just couldn’t with all the php, so &lt;a href=&quot;https://hollycummins.com/tech-stack/&quot;&gt;I’ve gone for GitHub Pages + Gatsby&lt;/a&gt;. I couldn’t find a Gatsby template that did what I needed, so I’ve written my own. Getting my custom platform set up was fun, but it did take up most of a Christmas holiday. Crafting your own platform is not the time-saving option.&lt;/p&gt;
&lt;h2&gt;Submitting to a CFP&lt;/h2&gt;
&lt;h3&gt;How do I find out about conferences I should submit to?&lt;/h3&gt;
&lt;p&gt;Once you’ve got a topic and have started getting things written down, the next step is to get to an event. The great part about this is that, unlike writing platforms, you definitely &lt;em&gt;do not&lt;/em&gt; want to self-host your own conference. Let someone else deal with the challenges of catering and venues and tickets and logistics.&lt;/p&gt;
&lt;p&gt;But what event should you submit to?
When getting started, this will probably be determined by your geography; look up the local user groups, and start attending sessions. Once you’ve got the feel for the event, reach out to the organising team and propose a talk. Most user groups will have some kind of structure for this, but it may just be an email address or named contact.&lt;/p&gt;
&lt;p&gt;At the next level up, discovery can be harder. How do you know what the conferences are, if you’re not going to them? And how do you know when call for papers close? (In my experience, it’s usually “just before you decide to submit”.)&lt;/p&gt;
&lt;p&gt;Every now and then, someone creates a site which gathers all of the tech CFPs in one place, but I have to say I don’t use them myself. This is partly out of laziness, and partly because I’m sceptical about accuracy. For example, &lt;a href=&quot;https://confs.tech/cfp&quot;&gt;confs.tech&lt;/a&gt; is sometimes recommended, but it’s missing both Kubecon and Devoxx, as well as Jfokus, JavaLand, JavaZone. In fact, I struggled to find a conference I’ve actually been to in the feed. The &lt;a href=&quot;https://twitter.com/techdailycfp&quot;&gt;techdailycfp xitter feed&lt;/a&gt; has the same gap. That doesn’t mean these resources don’t have value, especially for some communities and regions, but treat them with caution.&lt;/p&gt;
&lt;p&gt;So if there’s no one-stop website, what next? Once you have built a network of speakers, word of mouth is great for discovering good events. In the interim, follow interesting people on social media, and make a note of where they’re speaking. When you discover interesting videos, make a note of what conference they’re coming from.&lt;/p&gt;
&lt;h3&gt;How do I get accepted to a CFP?&lt;/h3&gt;
&lt;p&gt;Helen Scott has written some great tips on doing &lt;a href=&quot;https://www.helenjoscott.com/2021/06/30/responding-to-a-developer-conference-cfp/&quot;&gt;a good CFP submission&lt;/a&gt;. I don’t have much to add to what she wrote, apart from a plea for empathy with the programme committee. Remember that the programme committee are human, and are trying to juggle reviewing talks with their day job. Make their life easier. Don’t submit six proposals. Don’t submit proposals that are six variations on the same theme – the reviewers don’t want to be flipping back and forth between the tabs trying to figure out what the differences are. Do give them links to videos of the same talk, if you have it, or videos of other talks. If you don’t have videos, share links to writing, and if you don’t have that, explain what speaking experience you have.&lt;/p&gt;
&lt;p&gt;(Actually, I do have one thing to add to Helen’s excellent advice - here’s some advice on &lt;a href=&quot;/presentation-titles&quot;&gt;crafting a good title&lt;/a&gt;.)&lt;/p&gt;
&lt;h2&gt;How do I get invited to invite-only conferences?&lt;/h2&gt;
&lt;p&gt;If I’m honest, I have wondered this myself many times. I’m in the lucky position that I &lt;em&gt;do&lt;/em&gt; often get invited to conferences, and I’ve even curated invite-only tracks. Despite this, the mechanism still isn’t entirely transparent to me. There’s definitely an element of luck, along with having the right network. It’s also - as it should be - about having something interesting to say.&lt;/p&gt;
&lt;p&gt;I often speak at GOTO. Every time they invite me it’s a pleasant surprise, and I do a little squeak of delight. But why do they invite me? At least part of the reason the GOTO team invite me is because I’ve spoken at previous GOTO events, and received good speaker ratings. So they know me, and trust that their attendees will get something out of my talks.&lt;/p&gt;
&lt;p&gt;But if GOTO now invite me because I’ve spoken there before, how did I get invited to my &lt;em&gt;first&lt;/em&gt; GOTO? I’d been aware of GOTO for many years, but never had an invite. Sniff. So I deployed some empathetic thinking, and some bravery. When I’ve organised speaker selection, it often happens that one or two speakers will cancel at the last minute (even before covid!). Even though speaker cancellations are inevitable, they’re horrible, and they cause panic for the organising committee. We have to scramble to find a not-terrible speaker who’s willing to step in on no notice at all. So two weeks before GOTO Copenhagen, I emailed them and said “if you happen to have a cancellation, I’d, you know, be willing to travel to Denmark even though it’s no notice at all.” I was in luck, and my timing was good. They &lt;em&gt;had&lt;/em&gt; had a cancellation, and they hadn’t managed to organise a replacement. So I was in.&lt;/p&gt;
&lt;p&gt;Of course, it helped that I had something to say. When I mailed GOTO, I sent them a little package with links to videos of my previous talks, and suggested a talk with an interesting-sounding title.&lt;/p&gt;
&lt;h3&gt;Geography&lt;/h3&gt;
&lt;p&gt;I’ve spoken at GOTO Berlin, Aarhus, Copenhagen, and Amsterdam. But I’ve never made it to GOTO Chicago. Similarly, I speak regularly at QCon London, but never at QCon San Francisco.  What’s going on? Do I become less capable as a speaker if I cross the Atlantic? Do all Americans hate me? Well, I don’t think so. I mean, I hope not! But I suspect fewer Americans know me. And that applies to selection committees, too. I speak less in the USA, so I’m less visible, so I don’t get invited to the USA, so I’m less visible, so … it’s that same feedback loop.&lt;/p&gt;
&lt;p&gt;Another factor is cost. Some conferences pay speaker expenses (and have higher ticket prices), and some don’t (but have lower ticket prices). If a conference pays  for speakers’ travel, they’ll usually have a cap on the number of international speakers they’ll invite, and quite a small cap for the number of transatlantic speakers they can invite.  Otherwise it’s just too expensive for them.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/e5f4676255296364397e2bc2bab1955a/b6a88/plane.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 41%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA+klEQVR42oVSbUvDMBjM//85gjiZUqfo0NpPom3XLUmbjqwf2kJn6RvtmUYmczRb4Eh4yHO5y3MEhjUMw2S9qipEYWhqAzklOcBUq+sajwsLXddNPkymVDFGQRlD27ZHDb+7lDG8r4/LCsdGzjnyPEdR7HH/sIT9tsRuJxELoREqq479ipXvYhsLrIMVsiwzE0opUZalJllYc/CNC6awFRQRDxBSDzT4VOe1xuzmCo5j/3NATiX3fQ9KN/jeF2iaRimL8PL8BOtuhvntNXzfQ5qmWtl49+IfHpAkibb0riyKiCNTJIxS7eBcCogpLuNgfM/9m+a5JBwT/gBrSGfLv2sJQAAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Hand-drawn plane&quot;
        title=&quot;&quot;
        src=&quot;/static/e5f4676255296364397e2bc2bab1955a/5a190/plane.png&quot;
        srcset=&quot;/static/e5f4676255296364397e2bc2bab1955a/772e8/plane.png 200w,
/static/e5f4676255296364397e2bc2bab1955a/e17e5/plane.png 400w,
/static/e5f4676255296364397e2bc2bab1955a/5a190/plane.png 800w,
/static/e5f4676255296364397e2bc2bab1955a/c1b63/plane.png 1200w,
/static/e5f4676255296364397e2bc2bab1955a/29007/plane.png 1600w,
/static/e5f4676255296364397e2bc2bab1955a/b6a88/plane.png 2213w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;Reputation vs novelty&lt;/h3&gt;
&lt;p&gt;Familiarity  clearly makes a difference to program committees. But freshness is &lt;em&gt;also&lt;/em&gt; important. For many these events, it’s actually not about being a big-name speaker or having dozens of events under your belt. Often what they’re looking for is someone their attendees aren’t bored of! Real-life industry experience is super-valuable, even though people working at the coal faces don’t have the polished speaker skills of people for whom conferences are a day-job. GOTO and QCon do a great job of finding speakers with interesting stories or skills, who I’ve never seen before. It’s really cool.&lt;/p&gt;
&lt;h3&gt;How speakers are discovered&lt;/h3&gt;
&lt;p&gt;How do the invite-only conferences find these speakers? I’ve often wondered this. I’m sad to say that when I was doing speaker selection for one of these conferences, I &lt;em&gt;really&lt;/em&gt; wondered it. It’s hard! I curated the Java track for QCon, and I wanted to make sure that I mixed up experienced, big-name, speakers with people who regular QCon attendees wouldn’t have seen before. So where did I look? The first thing I did was make a list of topics I was interested in; for example, I felt we’d had a lot of “how to do reactive” talks, and I wanted a speaker with some battle scars from implementing reactive in the field, who could do a deeper discussion of when reactive made sense, and when it &lt;em&gt;didn’t&lt;/em&gt; make sense. Once I had my topic list, I started trawling for people who met the brief. Here’s where I looked:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Videos on YouTube, usually from other conferences, but sometimes just … videos&lt;/li&gt;
&lt;li&gt;Published slide decks&lt;/li&gt;
&lt;li&gt;Articles on publications like InfoQ and TheNewStack&lt;/li&gt;
&lt;li&gt;Blogs&lt;/li&gt;
&lt;li&gt;Programmes of other conferences&lt;/li&gt;
&lt;li&gt;Social media threads&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Yes, this is basically a lightly-edited combination of the speaker ladder and the pre-speaker ladder. Having content in those places increases your chance of a programme committee stumbling over your awesome stuff. For me, when I was selecting, I didn’t look on TikTok, because I’m too old. You may find that other selectors suffer from the same affliction, so know your audience when deciding where to build up eminence. At the other end of the old-school-media spectrum, if you have a recently published book, odds are conferences will reach out and invite you. On the other hand, if you have just written a book, congratulations! I don’t think you need to be reading this.&lt;/p&gt;
&lt;p&gt;A bit like the pre-speaker ladder, even if a programme committee never finds you, having good content out there is its own reward.&lt;/p&gt;
&lt;p&gt;Oh, and my top tip? I don’t actually have the bacon for breakfast. It’s too rich, and I need to leave room for all the desserts.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/a2fb57ed4101276239706270bff98f99/49853/bacon.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 52%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB6UlEQVR42n2Sa28SQRSG+evG+MGkiVY/mGpTaYzS2lBbLbZaJDTFCqRUgZZLrRXYG8vCLl26wC6Xx9lNbMCmTjKZmd2Z55z3vCfEzJhOp8HqeR59x+HKtmmZJt1rB1XX0Q2DgeviDofcNUKzh9FoRKfTwRTT6fcxmhrVDxvIh/s0YhGOlhcoF3N0ew5tAXcF/E6g/9PwL4ns/DwH/QH1j1GGiddIe6/ILC9SjTynE9+kXvyON56I4Gag5BbQl2oKaa7r0Wlc8iu5i36wQ+8kjtoooeQOkXcF+PMqx08fUM6maf+uYBsaRrvDeDyeB3qei94yuDxK8jO6QiX8iNyLhzTPC2iZBM7XdwyLMbI7a6S2ozS+JalvPKZ4ksYW9bXtqxsPQn9rpyoKXVUmv/2W033xKB7mIvKE5pd1KrGXHK+vUHizhLJ6j/O1ReRCKpDdarXodrvzwMlkEnz0BFgqlShlDqiltqgmNsXjBRHkGfW9JRrh+0L+JyRhlitg/b5DPp+fM+fGFEcU14/mCui1M0BSRZtcnGGk33P6I4tUO6NeK6MZJo6QaVkWJRHcX2db7lbb+C1jWSbtdhtLZK3qLSRZRlE0NE1HVVVkWRJn5f9tMxvFv9jr9QLn/aybzWaw96dfmllX/wX+Ac+S5MMOJz78AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Hand-drawn bacon&quot;
        title=&quot;&quot;
        src=&quot;/static/a2fb57ed4101276239706270bff98f99/5a190/bacon.png&quot;
        srcset=&quot;/static/a2fb57ed4101276239706270bff98f99/772e8/bacon.png 200w,
/static/a2fb57ed4101276239706270bff98f99/e17e5/bacon.png 400w,
/static/a2fb57ed4101276239706270bff98f99/5a190/bacon.png 800w,
/static/a2fb57ed4101276239706270bff98f99/c1b63/bacon.png 1200w,
/static/a2fb57ed4101276239706270bff98f99/29007/bacon.png 1600w,
/static/a2fb57ed4101276239706270bff98f99/49853/bacon.png 2224w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Where Can I Get Pictures for Talks?]]></title><description><![CDATA[Should your talk have images? Yes! Lots! Before going further, stop reading this and go
read the Noun Project primer on visual design for…]]></description><link>http://hollycummins.com/illustrating-talks/</link><guid isPermaLink="false">http://hollycummins.com/illustrating-talks/</guid><pubDate>Tue, 29 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Should your talk have images? Yes! Lots!&lt;/p&gt;
&lt;p&gt;Before going further, stop reading this and go
read &lt;a href=&quot;https://blog.thenounproject.com/the-golden-rules-of-presentation-design/&quot;&gt;the Noun Project primer on visual design for presentations&lt;/a&gt;.
It’s got great general advice about how to make presentations look good, and also some great ‘before and after’ examples
showing how to replace bullet points with images.
Design matters! Presentations with good visual design aren’t just prettier; they’re also more effective.&lt;/p&gt;
&lt;h2&gt;What is the purpose of images?&lt;/h2&gt;
&lt;p&gt;Images in presentations are valuable in several different ways, and the best part is they can &lt;em&gt;bring all the value all
at once&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/ff3a433399e8208e1b38040c9ef1e63b/971d1/illustrated-talk.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 60.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAABjUlEQVR42pVSyU7DUAzs/38PJyQECNqUCNFAFwplCYeuWRqy74PtLKT0ADzJ8vPkeTy208MvpygKsbIsJc7zHHEcI0kS8on46h7Lt95PgiYxyzLstjvs9/vK7Mrbti3ecRw4tW/eRFF8TFhUfPQxgmGYyAmISElECtiaggV5No7KTn5NWEGB7+JlPkAUetRGKlWLskBMLaWkOKOWpG0aQVRjSZoKzoXYet02t+sl7kdDWJYlCheLBXRdF0JWwwStQiIN6E3Iqo8VVudd/8DFVR/T+ROUGxWbzVYS+YSU7AaBqKviGCmpa5bWEjYVfT+ANpthNHuENplS7MN13XZRrDKsZ5gXuajjO2N8b9S3hIZhoK+qGD8/41bTENMjnmFzUppTXs+Qk/OOqu7Y2pb5X3oYTzB9fcOlMqQF+TRLW+bJv4pJfkdFbcJM0xS8Mo4twbn1g6WslmsMVAXnyhkCmhfjXIhn1TXBxL5jtqMtr2jLg7tTXI9O4HneQSt/PQdbjpIQ9ucGXuD8m6gh/AKmfqPnPs1WvgAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A man pointing to an illustrated slide&quot;
        title=&quot;&quot;
        src=&quot;/static/ff3a433399e8208e1b38040c9ef1e63b/5a190/illustrated-talk.png&quot;
        srcset=&quot;/static/ff3a433399e8208e1b38040c9ef1e63b/772e8/illustrated-talk.png 200w,
/static/ff3a433399e8208e1b38040c9ef1e63b/e17e5/illustrated-talk.png 400w,
/static/ff3a433399e8208e1b38040c9ef1e63b/5a190/illustrated-talk.png 800w,
/static/ff3a433399e8208e1b38040c9ef1e63b/c1b63/illustrated-talk.png 1200w,
/static/ff3a433399e8208e1b38040c9ef1e63b/29007/illustrated-talk.png 1600w,
/static/ff3a433399e8208e1b38040c9ef1e63b/971d1/illustrated-talk.png 1987w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;em&gt;Pictures make talks better. Fact.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Here are some of the different functions of images:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Aesthetic pleasure for the audience&lt;/li&gt;
&lt;li&gt;Reinforce your message via visual channel&lt;/li&gt;
&lt;li&gt;Improve audience retention, because of
the &lt;a href=&quot;https://en.wikipedia.org/wiki/Picture_superiority_effect&quot;&gt;picture superiority effect&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Hold an audience’s attention by having something change on screen&lt;/li&gt;
&lt;li&gt;Cue for the presenter (me) about what I should be saying&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The last one is important, because I try and keep the number of words on my slides low. Without words, how do I remember
what I’m supposed to be saying?
I’m not one of those people who can talk coherently without notes or prompts.
What works for me is to build out my story with pictures, and then change slides rapidly.
As a rule of thumb, I aim for two or three slides a minute, with only a couple of words per slide.
The images give the talk (and me) structure.&lt;/p&gt;
&lt;h2&gt;Sourcing images&lt;/h2&gt;
&lt;p&gt;Images are great, but there’s a problem. For most of us, making new words is easy, but making new pictures is hard.
Like, really hard.&lt;/p&gt;
&lt;p&gt;The good news is, this doesn’t need to stop you having lots of pictures in your talks. No matter how un-artistic you
are, you have three kinds of visual content available to you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Icons&lt;/li&gt;
&lt;li&gt;Drawings&lt;/li&gt;
&lt;li&gt;Photos&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here’s how I source them, along with some of their advantages and disadvantages.&lt;/p&gt;
&lt;h3&gt;Icons&lt;/h3&gt;
&lt;p&gt;Don’t underestimate the effectiveness of a single over-sized icon or emoji on a slide. Here are some places to find
them:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Your operating system’s built-in emojis (free, but limited)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://thenounproject.com/&quot;&gt;The Noun Project&lt;/a&gt; (icons need to be paid for, or attributed in really big text; but a
subscription can be worth it, because there’s a huge selection)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://fontawesome.com/search?m=free&amp;#x26;o=r&quot;&gt;FontAwesome&lt;/a&gt; (free, if you stick to the free set)&lt;/li&gt;
&lt;li&gt;IBM’s &lt;a href=&quot;https://carbondesignsystem.com/elements/icons/library/&quot;&gt;Carbon design icons&lt;/a&gt; (free, but limited selection)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/85d7549a8b575c44cf6938da52b9b7a6/936ee/desk-and-stories-slide.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 64.99999999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAAsTAAALEwEAmpwYAAADtUlEQVR42h2ReVDUBRzF99+mEhUQMBCWa2GXQw4XUUCR+xDYdZFzCQQBSY5hOeJygRxIx0FWlysOuSFAaEYobDIdJ40CMiAYYqacnKQmHGsMx5zAT7/8zrz5/vd5894TlfaPcEanJ6a0HGV5FaqKc5ys1BJXpeVEURFptdU0jnRTN9RL/fgoLbdu0jc3w9DSEgOLS/TML3Du4xu4hMdy6UoDopKBMc5cbSVCU0ZwbiEBmTkEZGTjfyoTn4RkQk5nUlOtQVNbQa6ugbrBbrru3WFoYYHRlRUBvEJ5/zjOwTH0DV5DVNR/XQC2E5Jfijw5A9eYOMSe3uy1c2CvvRRziRQTc0vEDjLs3TyQecpx9jpIQIyS0cUFxn5cQ9MxiEeogunpTxDltPZytrWHwNwSpDFJWB+LxMRWisEuI3YYmbLTyIzdJuYYmlpgbLYPqfN+3NwPcPhYENdXlhldXRMqa+eoIo6F7+4hSrmgJ09wCMorRhqdiNg/AjNHVwxNzDC3tsNcbIetxAkjAZaRnsn5mlqyMrNQJakZEXocXFwmtU5HRKKa9V9WEakq68kVgKF5GmTR8Yj9QjB1dHkNFAuxLQSojYOUPe9YEqNQUaPVknc2l1j1u/TNz9F+/1tiyz5AnZXF5l/riCILyshpGyKyoBhXRTyS4Egs3eS8bbCbN3fs4i3hGxiZsNNYiG+4BysrayQ2dhxXqeiemUH3xW3C3yumtKqM538+RhSQnkN2yzCq9yvwik/CU5WIS1gUth5yrFzccZQfxMJegmS/G76Rx/FXxeKvVJJSpKF+apq6qc/xTT5No+4Cz5/8jMhLmUBkcT1eUUpsZE6EKaNRZ6dxJDyIpFPx7JM68YYwkImlFZbCIIXaEkYnuxma6KCtv4mo1DTcA0Lo7tTx9+8/ILL3DcTCyQNDI2MsrcR4H/ajt6uZ0Z5rDHRcJidTTUZqHNnpiagTFYx0fsjmo7s8Wp6kU6/FR+5Oc2M1s7dH+HX5DiLHQ/54Cw7yQz4Eh0WQn5vP8vff8GB2jq62qzTr6mlvusBH+nq6Wi7S2XwRfcN5JoZb0VYW8tnkGFtbL9h6sSGYCMATcXEEhYYREBJITn4hc3Nf8fDhCrNzd/HxO4K1nQQHmTMyFzdc3Q68TuDtc5SCwnzKyyt5+vQZ/9/2K3i1/S+iBPVJFLFRKJThJKXEc+WSlpsjTXw6rOdGfwNfjjfz9VQnD271s3p/jLWZCR4vTvPPb/O8fLLEy82f2N7+Q9AzNjbW+Q/2wF35VsiATwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A home office desk, with a computer showing a slide with a large icon of a person next to an aquarium&quot;
        title=&quot;&quot;
        src=&quot;/static/85d7549a8b575c44cf6938da52b9b7a6/5a190/desk-and-stories-slide.png&quot;
        srcset=&quot;/static/85d7549a8b575c44cf6938da52b9b7a6/772e8/desk-and-stories-slide.png 200w,
/static/85d7549a8b575c44cf6938da52b9b7a6/e17e5/desk-and-stories-slide.png 400w,
/static/85d7549a8b575c44cf6938da52b9b7a6/5a190/desk-and-stories-slide.png 800w,
/static/85d7549a8b575c44cf6938da52b9b7a6/c1b63/desk-and-stories-slide.png 1200w,
/static/85d7549a8b575c44cf6938da52b9b7a6/29007/desk-and-stories-slide.png 1600w,
/static/85d7549a8b575c44cf6938da52b9b7a6/936ee/desk-and-stories-slide.png 3828w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;em&gt;The Noun Project have icons for everything, including aquariums. For this slide, I combined two oversized icons. The
aquarium comes in because I was talking about a project where we used AI to count pet fish.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Note that icons are &lt;em&gt;not&lt;/em&gt; the same as clip art. Tastes change; at the moment, icons look stylish, and clip art
looks &lt;a href=&quot;https://www.duarte.com/cliche-of-the-week-clip-art/&quot;&gt;unacceptably dated&lt;/a&gt;.
Hopefully this is obvious, but just don’t go there with anything that looks like it might possibly have once been clip
art.&lt;/p&gt;
&lt;h3&gt;Drawings&lt;/h3&gt;
&lt;p&gt;Drawing it yourself is a great way of generating images for a presentation. “But I can’t draw,” I hear you wail. I can’t
draw either, but &lt;a href=&quot;https://hollycummins.com/how-to-draw-part-i/&quot;&gt;practice&lt;/a&gt; and
a &lt;a href=&quot;https://hollycummins.com/how-to-draw-part-ii/&quot;&gt;series of cheat’s techniques&lt;/a&gt; have helped me a lot. I’ve written up my
tips for getting started with drawing
in &lt;a href=&quot;https://hollycummins.com/how-to-draw-part-i/&quot;&gt;“How to Draw When You Can’t Draw”.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/4720615474e93e58e93f72cc3b80c726/1d7f7/horse.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 55.99999999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAABzElEQVR42oWSbW/SUBTH+32N8YXGN9MZjYmZH8HEN7qROc2cmKk4tikYpGWjBRdY6RgFB7SU4UBppTz8bK9iSBx4b07Oveee+z9Pf4lL1mQyYdFa9C5ZloWqqny7uGA0GgmZ93kS7NBvOBzOB9RUjZUHDymVTjCOiyTiMXrd7l8Hfzii0/2OPxhQMKo8XduhkD+ZD6goGZZv3aFY1NGPcryKPOasZv4GG3gk8iaRaIZkLE90Q+bT/hfaTmdu2QLw3t376LqBdiCzt71Jy2qI0n/0Xbbey8TfZHm9oRB9JqMXzIV9lDQtx+2lZQ4PVfLZDPsBYGxrneTuO+GQTqukEhrxt5/5uCvjut4fQOYD3rh+k1QqjWkEPdx+TuzFE3LpD9h2i714gpbtoB+XqJxenl14n9okNRjK1SvXkOUMR1mFl6uP2Nlc5SAZ5+fAp9/vC+dBMBTXdf9LHUnXS0TW1jErJnazwVezzFn1FMe2xCfHcWg0GrTbbUKKNZvNIHNb2EOp1+tBW9IoioLneUi9bo/z8w7j8fifqL7vY5om1WqVSqUitGEYQtdqNWErl8sBQ4oiYDhIabb+2X5MJQQNJSx5eg6JHd6ntlmi/wI8ojIqTCFXEAAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A purple horse running away from a barn door&quot;
        title=&quot;&quot;
        src=&quot;/static/4720615474e93e58e93f72cc3b80c726/5a190/horse.png&quot;
        srcset=&quot;/static/4720615474e93e58e93f72cc3b80c726/772e8/horse.png 200w,
/static/4720615474e93e58e93f72cc3b80c726/e17e5/horse.png 400w,
/static/4720615474e93e58e93f72cc3b80c726/5a190/horse.png 800w,
/static/4720615474e93e58e93f72cc3b80c726/c1b63/horse.png 1200w,
/static/4720615474e93e58e93f72cc3b80c726/29007/horse.png 1600w,
/static/4720615474e93e58e93f72cc3b80c726/1d7f7/horse.png 2038w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;em&gt;A 2022 slide about the impact of heavy governance on IT
provisioning behaviour, illustrated by me. Being able to draw something was useful, because it would have been pretty
hard to find a photo of a horse running away from an open barn door. The fact that I could sneakily make the escaping
horse look a bit like a Charity-Majors-approved My Little Pony was a bonus.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;But honestly, drawing skill isn’t necessary. Some of the most effective presentations I’ve seen are Felienne Hermans’s.
I don’t think she’d mind me saying that her drawings are not especially skilled, but they work very very well to convey
her message.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/c0e1e8d697a7d3a5dc2c230e8751c7e4/410b4/felienne-hedy.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 43%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsTAAALEwEAmpwYAAACZUlEQVR42kWR20vTYRjHf5SVkoWmM2fa3Obm1B08dBBnFyFh1FVoEkRYigRJoFdFYmQHNKUiqQvNzfNMnekUgnSGmbSTO28aWPanfHpnhBcfvu/7PM/3C8/7SkatEYOgWK1HqyxGI1ArdHuoBBplEYWqEnSiX6wxUCxm9YUmDLpSSoQadSaUciU643nOnTEj2WftfFtfY2lxCbv9EzbbNGOjE1ito1iGRrAOjTI4YBE6zIh1jNHhcaYmP2KfnWNhYZGVLyvUN9whv6SSluZWJIfDQWwrSjAYIBwKEYtGicVixOP7RCJhwuEQIdEPCY1EI6IWEZ4gu79/0fHkJZXmWoq0pUgzM3bC0RA+nw+fx4PP62Fzc3MfUXe73Xi9Xjyinzgn6nvzgu2tOL19/dQ1NJGvNiJNTE6JwCCBgJ9gKCI0gF8YEgGbAr/fv2dMBP0PSQS7XC7xVN/Z2t6i9f4DDGUXSMtUINmmponv/GTZ6WRy7L0YWhUrx/nhcuOYtuDeWCMs1ovF/q0YDgcJBf2sr68TEHf3xg8qy2tISs7k0FEZUkfbQxbnHUzZJ1iYq8c534/z81dhCjCzNEvzrWbaW9p48+4DyyurWIZtdLx4y86f3b0PetbVS0X5RVLTcjiYkoHUee06nZdredz1CNv4WRqvVnPFaGaw7xWvn/bQliKjO0PBDZOZxpZ2ntfVMVBdwap9jqbb9zCZqqnSV3AsVcaB5HSkmwVqyrPkGBQq9Npc5Oly9Nl5lCm11JxU0pOVT7dczSV5AcdlSqpOKbirzMWUpyEjW0WOLJ/TslySUk5w+EgafwFIXshVDLo9IwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Some hand drawn text and simple people&quot;
        title=&quot;&quot;
        src=&quot;/static/c0e1e8d697a7d3a5dc2c230e8751c7e4/5a190/felienne-hedy.png&quot;
        srcset=&quot;/static/c0e1e8d697a7d3a5dc2c230e8751c7e4/772e8/felienne-hedy.png 200w,
/static/c0e1e8d697a7d3a5dc2c230e8751c7e4/e17e5/felienne-hedy.png 400w,
/static/c0e1e8d697a7d3a5dc2c230e8751c7e4/5a190/felienne-hedy.png 800w,
/static/c0e1e8d697a7d3a5dc2c230e8751c7e4/c1b63/felienne-hedy.png 1200w,
/static/c0e1e8d697a7d3a5dc2c230e8751c7e4/29007/felienne-hedy.png 1600w,
/static/c0e1e8d697a7d3a5dc2c230e8751c7e4/410b4/felienne-hedy.png 2102w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;em&gt;Felienne Hermans at GOTO Amsterdam, June 2022&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;Other people’s drawings&lt;/h4&gt;
&lt;p&gt;When it comes to drawings, your own are always best, even if they’re, technically speaking, the worst. However, if you
really don’t want to go there, &lt;a href=&quot;https://cocomaterial.com/&quot;&gt;Coco Material&lt;/a&gt; is a sweet little library of open source
illustrations. Some of them do look a bit clip-art-y, so choose carefully. Because the drawings are simple, the Coco
Material site is also a great learning resource. Study the drawings: how did they make that bottle of soya sauce so
unmistakable with just a few coloured areas? How did they give that cat so much expression with just a few lines? The
Coco Material license would also allow tracing, if you wanted to split the difference between drawing your own and
re-using someone else’s.&lt;/p&gt;
&lt;h3&gt;Photos&lt;/h3&gt;
&lt;p&gt;I used to use a lot of photos in my presentations, but I’m now slightly cautious with them, for three reasons. The first
is fashion; around ten years ago the best speakers discovered what a good idea images are, and then the rest of us
started copying them. At this point in the trend cycle, photo-heavy slide decks risk looking a little dated.&lt;/p&gt;
&lt;p&gt;The second reason is that photos have a lot of detail, and detail can distract the audience. A purer, more abstracted,
visual communication can make the message clearer (Scott
McCloud &lt;a href=&quot;https://en.wikipedia.org/wiki/Understanding_Comics&quot;&gt;explains this really well&lt;/a&gt;, if you want to read up on it.)
Photos with white backgrounds avoid some of the detail problem. Unfortunately, they’re expensive to produce, and so it’s
hard to find people giving away this kinds of photo.&lt;/p&gt;
&lt;p&gt;The final argument against photos is that they’re pretty static. I like to use lots of animations and builds in my
decks. You can’t build up layers or use animations to tell a story with photos. Well, you can’t do that unless you’re a
photoshop wizard, which I am not.&lt;/p&gt;
&lt;p&gt;Those cautions aside, photos are still good! Remember, &lt;a href=&quot;https://hollycummins.com/how-to-draw-part-i/&quot;&gt;I can’t draw&lt;/a&gt;, so
some things are just too hard to represent in a drawing. Icons lack &lt;em&gt;all&lt;/em&gt; detail (by design), so they’re no good for
representing complex things.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/8c7cdb58401a037277d22714d34cc25d/bfe41/piano-stairs.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 55.99999999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAADHElEQVR42hWSXU+bBQCF3yWSGedQCYwWutJCgbdraS2ltMgKdKwU6AcF2kLbTaGUAq1AKdACqyzC0LHoomxjHwZIjGwacZkSsFk0MU5nSIwZcd74Zx7rxbl9kvOcIxQXn6S0uBBFeRHqGgkGbQV2q5kafRMqQzNmmweD1UOD8R26be0EfX1c8nvx93RQp1ZQUnGC6ro3kMpOIpWfQuhoF9nbiLOaihAc8PHD413++v1vsktzxCa8LGTHWboyyUeL17h+ZZnjo185fvaCX757xsKYh87LCubXk8yth0mknQhVyjN42utRKeTIy5W0WVvodQZwt3UR9nYzEZlkJDRMNpPl+toNZifn6XeF8LmCNOpVyMUCypQFtLoNjET9COYmJbJyDRrRQpOpFYPGQk2FSJnkLdS1etz2EONDGRrebmIh9TEri7fo7xym3xGkzaxBZTxNqVJgcOg8/aNDCP0DIqLGRFtLO90XO+mwOhjweDEYatGpW/hg9gEba98yPJhkb/s5uYf/sH3jkM+y90iPeXGOS7F5XmX3IM3+0VMEV48Ok1mHQVeJWC0jdmkwL7wH4cQrJKZW2D884uef/mB76zHPf3vBy+N/+fPoJY929liYCJJZHyc6fYGN3TTb3+8h2O0iZmMtWrUMh81CJNiLVivy2qnTOF1uJqfj3P3iJnfufcrm/c+5s3mTD7OzzMbCvD9k43xYwP1uCbd2kjx6eB+hwSilSilBK8qJhgLMzC3T5fJhabYTT6+yufMNB4cH/JjLkcs95fAgx5Mn++x99TVLUyESV32ksm5W1yfY2lpD0IiFFL35OhZDDfaLFkbzNRxdVoKXXaQWY2RXZsgsTTOfSbKQv1IylWAuPcPc7Ay+Xhsdfi02p0g07uX2l8sIZZICaqtKaTRUUl0tRVcnp95YialRhcmkYiB0gfhkmNh4iEg0wHvDfQQGO+npycMcVupby2ixV5FIerh2O4kgOVOIUS9HdrYE9bmz6HRK9Pr/o8iPVUNk1ElqPsxUMkA05mZ4pBtvXzPdrgbOaSqoVBfhD5vyrt1c/WSM/wCK3r8R8AjlWgAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Stairs painted to look like a piano in Tokyo&quot;
        title=&quot;&quot;
        src=&quot;/static/8c7cdb58401a037277d22714d34cc25d/5a190/piano-stairs.png&quot;
        srcset=&quot;/static/8c7cdb58401a037277d22714d34cc25d/772e8/piano-stairs.png 200w,
/static/8c7cdb58401a037277d22714d34cc25d/e17e5/piano-stairs.png 400w,
/static/8c7cdb58401a037277d22714d34cc25d/5a190/piano-stairs.png 800w,
/static/8c7cdb58401a037277d22714d34cc25d/c1b63/piano-stairs.png 1200w,
/static/8c7cdb58401a037277d22714d34cc25d/29007/piano-stairs.png 1600w,
/static/8c7cdb58401a037277d22714d34cc25d/bfe41/piano-stairs.png 2082w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;em&gt;A slide explaining how piano stairs can encourage
people to take the stairs instead of escalators. But what on earth are piano stairs? It would be almost impossible to
communicate what they look like without a photo.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I usually get my photos from &lt;a href=&quot;http://unsplash.com&quot;&gt;Unsplash&lt;/a&gt;. It’s also worth considering stock images, which can be
pretty affordable. Be cautious with other sources, which are vulnerable
to &lt;a href=&quot;https://pluralistic.net/2023/04/01/pixsynnussija/#pilkunnussija&quot;&gt;copyright predators&lt;/a&gt; or the opposite, image theft.
Also be cautious of Unsplash images with identifiable people in them (
where &lt;a href=&quot;https://help.unsplash.com/en/articles/2646379-what-if-there-s-a-brand-or-identifiable-person-depicted-in-a-photo-that-i-download&quot;&gt;a model release might be needed&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;I sometimes also use &lt;a href=&quot;https://www.flickr.com/search/?license=4%2C5%2C6%2C9%2C10&quot;&gt;Flickr&lt;/a&gt;, but check the license
carefully. It’s best to search by license, and then search by “Commercial Use Allowed”. That should bring up images with
Creative Commons Attributions licenses; but be careful to attribute correctly. I usually avoid Creative Commons Share
Alike for my presentations, since I don’t necessarily want to release them under a creative commons license.&lt;/p&gt;
&lt;p&gt;Two sources of public domain images I’ve recently discovered are &lt;a href=&quot;https://public.work&quot;&gt;public.work&lt;/a&gt; (a beautiful
aggregator) &lt;a href=&quot;https://www.loc.gov/free-to-use/&quot;&gt;The Library of Congress free-to-use archive&lt;/a&gt;.
The images tend to have a vintage feel (because they’re older and thus out of copyright), but there are also some new
ones.
There’s a range
of &lt;a href=&quot;https://www.cosmos.so/public-work/bridges&quot;&gt;bridges&lt;/a&gt;, &lt;a href=&quot;https://www.loc.gov/free-to-use/wpa-posters/&quot;&gt;public service posters&lt;/a&gt;, &lt;a href=&quot;https://www.loc.gov/free-to-use/historical-travel-pictures/&quot;&gt;landmarks&lt;/a&gt;,
and all sorts of other potentially useful images.&lt;/p&gt;
&lt;p&gt;For example, these are two of my favourites, and I can imagine using either in a talk:&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/c2f6ddbafb0bac497214930b0d3880f4/9cac8/vengeance-drill.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 58.00000000000001%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAACTklEQVR42q3TQU8TQRgG4EY9aLu7M9vZneluqdti6bZAWyRFSJu2WAmtigpEpELCRSExMXgwRr0YY/TgiZPxZMLBv+JFG6/+Em2i3XmdpZ6QenKS2dmZZJ+833zZSCQSOaNmxBWiy20LzDJ/ioQdFIu5wLbjAaV6oBmxIKpFA02PBtQ01DkbcG4hOSa+e56XjwzHqT/rEBTC6hpEg27EBq7LcWmuhPLsFHKFcVxuVlGrzaFSKWO+UsRkflxybiLnZ/vN5eYoUHQJNUCINjCoDsM0sLfUwt1qDaVSEZ1OB/t7u3j57CneHbyVHz+8x8b6zb6maf9IqCBC9QGNE4Rp3yx3cPh4H3HLxjkisN1uY6XewHy9JZ88f4HN26t99enJYHiHRyBRoFqjOkHjYgmvHu5gZmYW1blZ3NtcxdqNW5iu1OX6nS1cbV8ZDXpjblddOFQDBmE6whwY9gXkJqZwePAa9zdXsLTYwM7WNhaqi7K1fB2L9epo0LLMo4QhqBqjup1AwS9jb/0adjdWMDM9hfLkNPxCCbWFqmw1mijks6NB0zS6ukoWgjEF2ozi0doSHqy1wUQG2UwG51NpcDeDlDch874Paup9xtjJYCx2thsmU+AvVbJUuEwJJhlzpGm7kjJLGkxIxl2ZcFKB7+fgJPgPZxQYdpmEJevDknWicMpgxB3VZQFiUuim2qtJ45bMZjNwk4m+5zl/gafDh59OtwW3v1kW/Wxzs2dzq+e4Ts9xRI8Lrvbxo7Pw3XGTX8ZSya/JZOKT+lPSx8H/On4DMuXYDbAkek4AAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;a woman who looks a bit like Rosie the Riveter, operating a drill&quot;
        title=&quot;&quot;
        src=&quot;/static/c2f6ddbafb0bac497214930b0d3880f4/5a190/vengeance-drill.png&quot;
        srcset=&quot;/static/c2f6ddbafb0bac497214930b0d3880f4/772e8/vengeance-drill.png 200w,
/static/c2f6ddbafb0bac497214930b0d3880f4/e17e5/vengeance-drill.png 400w,
/static/c2f6ddbafb0bac497214930b0d3880f4/5a190/vengeance-drill.png 800w,
/static/c2f6ddbafb0bac497214930b0d3880f4/c1b63/vengeance-drill.png 1200w,
/static/c2f6ddbafb0bac497214930b0d3880f4/29007/vengeance-drill.png 1600w,
/static/c2f6ddbafb0bac497214930b0d3880f4/9cac8/vengeance-drill.png 2288w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;em&gt;A woman operating a hand drill
at Vultee-Nashville, 1943. With the red head scarf, it gives the impression of a real-life Rosie the riveter. I love the
contrast between the impeccable manicure and heavy industrial context.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Many of the images in the Library of Congress archive would give a slide a dignified or inspiring mood, but not all.
There’s a whole category for &lt;a href=&quot;https://www.loc.gov/free-to-use/cats/&quot;&gt;cats&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/6ed10b28cf1f522a2ca854f9d43f7dca/9cac8/brunnhilde.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 58.00000000000001%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAABsklEQVR42q3SXUsiUQDGcduv1AoblElt9uKWFW2uJWUva2+urBGY1CpqozNaolNTpow5bg2WG+hZL/ZC2EuhT1B4303gB6iDTxMU7FV0YJ+bc3P48edwdLp/BqDt6QwFg+qRJN0n4vG7xO5uU4jyTX6Ha3Lh8J2cydxv+3zl5/vvdK/tBczLMlFyJ/BubFD79DS+f3PD7XJh+auTln9d4lRRakygJIoVOZOFe831YDAYWvMOR2t+1tGa+mJ7UH+eQqtkAw9EkaQSCSzMzdF+kwl9H/tgs1oxZrHQE1lGLiuzgfvJJAls/4BzYZHO2O3o+NCB8dFRDJvNNC0dQnsSNnAvJpA4L8C1ukrXVlYwYOpHb08PLMMjVKuHksuxgTGeJ3wkgqA/QIVIFE+osduIrs5Oup9KsYN7sRjhQmHYbVPU5/WidH6OyYnP0Ov1NMpFUMjnGQsFgWxt+vBpyEyXnE4cHUgwDw5C3/6eRnc4rZAR1P4Z+VurIZs+ploNimdnSEsSxGSSXtXrUAsFNjDk9x+Tcvm2VCxeX15cNIqq2qgS0vhTrd78rlRu1z2ewpvA/7FHEWYwNBM1mb0AAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;a cat in a winged helmet&quot;
        title=&quot;&quot;
        src=&quot;/static/6ed10b28cf1f522a2ca854f9d43f7dca/5a190/brunnhilde.png&quot;
        srcset=&quot;/static/6ed10b28cf1f522a2ca854f9d43f7dca/772e8/brunnhilde.png 200w,
/static/6ed10b28cf1f522a2ca854f9d43f7dca/e17e5/brunnhilde.png 400w,
/static/6ed10b28cf1f522a2ca854f9d43f7dca/5a190/brunnhilde.png 800w,
/static/6ed10b28cf1f522a2ca854f9d43f7dca/c1b63/brunnhilde.png 1200w,
/static/6ed10b28cf1f522a2ca854f9d43f7dca/29007/brunnhilde.png 1600w,
/static/6ed10b28cf1f522a2ca854f9d43f7dca/9cac8/brunnhilde.png 2288w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;em&gt;A cat, improbably wearing a winged helmet and breastplate armor in the role
of the valkyrie Brünnhilde from the opera Der Ring des Niebelungen, 1936. I wonder if the cat also sang?&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Visual consistency&lt;/h2&gt;
&lt;p&gt;Aim for consistent visual style, or a limited mix. Having icons on one slide and drawings on another can look sloppy and
unpolished.
One of the first things I think about when starting a talk is whether a topic is best suited to icons, or drawings, or
photos.
That ensures I don’t spend time making drawings which I later have to rip out and replace with photos, or the other way
around.&lt;/p&gt;
&lt;h3&gt;AI Image Generation&lt;/h3&gt;
&lt;p&gt;What happens if you’re trying to stick to a style, but you can’t find what you need? I’ve started experimenting with
tools such as &lt;a href=&quot;https://openai.com/index/dall-e/&quot;&gt;DALL-E&lt;/a&gt; or Stable Diffusion for generating images. Sometimes the
results are astonishingly great, and sometimes they’re entertainingly awful.&lt;/p&gt;
&lt;p&gt;I think we can all agree this is &lt;em&gt;not&lt;/em&gt; the &lt;a href=&quot;https://wiki.openjdk.org/display/duke/Gallery&quot;&gt;Duke, the Java mascot&lt;/a&gt;, with
grey hair and a beard:&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/8ef6bc6a0c5fd6329692d9d0a161a4bf/2bef9/dalle-java.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAACXBIWXMAAAsTAAALEwEAmpwYAAAD0ElEQVR42l1U7U9bVRjvX+AAe9t7z9u9596+99621kKLzJZ2g7FRNoExsAwMxCEMjUNjSJHRKXNiKhUs23AMzbJAhsaJZiXLssW4DF3YFgaLGhPjS8QP++QH/eA3PbelwkyenJyX53ee33me53cMPAACAPw205cQ8LzAC/mJ8P/Tgj/E2IAwwXlDhKDCCDDiEaIikURsRghhfR/jTSOkYCKlBljcZRNIMAIIaBJp8UjNXlPcDuocDAkB0o8KPpvOiEjSI2AEMXSKru7Q/kRTOFYd3PmUXKOhVo2xoCZ2zhBFZ5QHb/ERMTZB4KFie7nX4bU4nYFg0Of0GTXobNPKahyAECygAp6Bddr/gdkGIJi2qMEKerDxmfNTmczY6O74Ph8kt6GSiai4VQWyhIGOZ2BJlotgljIecc3aWb8yVVm9vPLVh9PZ3KfzI6lkW1vLVWr/B6gLTzhQq4p0+tsjEyzyqCRk7Yl7/nzc+mI0PD6ZHh4enJmeXJz/6NiJ4eN1dRui7W+ojsRcJTG7aNbztwlmlUJs3ej+0qP+xNFMT/fs3OzNpcWN71eXr+cGUkPvhCN/ic6HFs+a1WVrVlmJWfmKYEZZImqj+3e79iuyDre3D/Y8n0odz322sHbremU0vJ/Sq9jyUNH+oFq0wcU59JeLMgOz1wLEiSQQd61K1sM2W/LNE3NjoxMT4++9P5FOv616NCBTSaZxCNewvbleK3NLSID5hAkIazI87Pf2+RM+D1U9fUd6v7575979e51dnVXV1YFghUxlj8tdAqVak8nfZDfbKAJQUmQ9Munw+WMhFHG4eyO2ROCxSnQ6k+3tPmIsNXI7OGBkFRTNVmSOUHt3VeRki1BOWUiqKAahSvEldg70DwT85bsO1GYvzdQlD1naAqVBwtVY0AE3t0sRGpyxZNNzJ4+urz94OZvcEYSEx5RFLqsi7SM9p4ZG9+7Zd+vazdwXS9+tfhtNHewae+nc5Qv96dfSc9nPr11ZWV55cHd9/fb90/Mz4FkNmvK0gYzdfU87GgIVHbGuyWOpqVMr39z54PzMlcXcLz/8fGPpxsaPv7HrFi5/8sr4651vHY0ONeJaJ6OdfzMTg4WgsB2ELMaQqCSejA02DZwb6Xij/8yl2YmLZyc+nn7h3VfrxzqMh+wwYjXLkAmWVVrPNusVvUt4zJpegiLisWDFpV4AdttRvZM0qFxU4YIi7yIUSSITBxGZhFh3UFkxwKJK4ZakMRHy/wH7CcyQCExM7Oq8HknBh5g4AUBo2PoJHjXdj2yOkGy/nQABBmr90b17/gU6jR8jPL/zbwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;An unrecognisable logo&quot;
        title=&quot;&quot;
        src=&quot;/static/8ef6bc6a0c5fd6329692d9d0a161a4bf/5a190/dalle-java.png&quot;
        srcset=&quot;/static/8ef6bc6a0c5fd6329692d9d0a161a4bf/772e8/dalle-java.png 200w,
/static/8ef6bc6a0c5fd6329692d9d0a161a4bf/e17e5/dalle-java.png 400w,
/static/8ef6bc6a0c5fd6329692d9d0a161a4bf/5a190/dalle-java.png 800w,
/static/8ef6bc6a0c5fd6329692d9d0a161a4bf/2bef9/dalle-java.png 1024w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;em&gt;DALL-E output for “A version of the Java Duke Mascot, but with grey hair and a
beard”. Yes, the text appears to say JAJAAVVE.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;On the other hand, if you need a photo of a duck wearing a fedora, you won’t do better than this unless you’re a skilled
photographer with access to well-trained ducks:&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/5fd4636b94c516f8f7496e304bfed6db/2bef9/dalle-duck.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEVElEQVR42kWTfVAUZRzHV/unBkkpBBUiOcHj4vXugDuBOwgssRdnzAiSNAkMGlM7u3gZAlGwANEZJmfAqWSgQCunlOLVtFGKIkFwzDxOebu7vb19vRfudu9l97Znzxl65vvb2dl5Ps/3+/s9s5DHw3g8tJtxud00x7ETf/85NDLce7HvVHNz8+mW4ZEhN0O7nE4rRdqslBWIIigSfyxIgN0Mw9A87+/4slOhVkmVSolUKk5KityyOUoseu+DMseyw2GzWUmSokiKJCgCByIJTIBdLifP8z8P9CekyjLz8tJUWVm5eQq1OilNlqKQh2xcf+KzkzzH4RhGEQQJhGOABE/I7QaxPcB5775iRWZGllqtUmWrVTnbMrKkcrkkPi5ZlpyqTNXP6hx2B4ZiBIYDjAgICgTmdbM6WXamRJ0Rl6OKUW2LzJBHpKdskiaESmJCxaKgqPCuvm/djBsgpJAXJ3CcwDAItAPgX0YHpfGSQomsMjr9TGR2z4YdX69Lb3larF0TeXBtRP5Tazurq8E2HMVQC0rghMAD2M+y4Kux94r+iQRmVYofSuNX5fOr3/FBuY8g8TVo44XVG1qDNlUqMg+Ul+buyJuamnLYHCiKghFA2urKqpMNdXsPVIe/0BCWeC5M2bt556WEou8le7qi1U3RKRWixLyI5yPWBQeFBLW0tdptdtA5HhB06Njh4LBnngwPCY597lmJKFIam5wWl5wcGxovWhMnWi+JjZJs0dRWtZ/vGPtj3OPxgbZRC4ahuACDzDduXj+qPVpQsCtNKdutSGpQyNoylD0JsqqIrcGhwWVb48yLS36Ot1sdZtgCyAAsCHK5XD6fDxzx4+W+kv0Fmt35v+W9eC/nJb18OyzfM6B8uSsmsbOtFcVIw5IRMVssiACjKzBF2aw2x/lzZ+o15ZqK4mOlb3UVF5peexd9pcLV+NX114vL9heaYAtsNMMmBDGjFgTMS+Ah5/Ky00kvLS4erzl8XFve+ElFY+2Rs2++cXdLKq0qWmi+QHxYP/Rx5RyKGxdNMPAGyQEcCA8BlnYxD/W6Wm15raakXrOvqaas9u1Xh7fvZHe97y+r40o+9Va2uB7Mo4RNcIYtlhUYxHY4lu12e0d700cHCyqK8784pZ2+9dONHzqvtZ3ADtXxg3fhydkjRSV3ui9hCGY2IwFY4CGaZux2B8tyS/O6m6P9s//cWXgwcX+i/5v2ms/rSmfGx1yT/05f/E4sEQ90dVMYCf8PowIMkvu8Xr/fz68sv4/GDBNXe650n9XpdbCZeKR/aMFJGEYCAwcXhmIAZhh34La8LCivBxQrvLs5n8uGzE/9enlssHduVm80wIaFJdhkRlacEQT8kgCmOZbjgTXHrYhjPV6aQuZmpm5dvf37iMFgMhqMJiNsBuaIBTfjVpICzgzLsjPT91CEAHk50P1jmPNxXqeTNBh0t2f+GtXr7gPSZDABcxS2zJH68cnJ/wDqHDij06RtGwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A duck in a fedora&quot;
        title=&quot;&quot;
        src=&quot;/static/5fd4636b94c516f8f7496e304bfed6db/5a190/dalle-duck.png&quot;
        srcset=&quot;/static/5fd4636b94c516f8f7496e304bfed6db/772e8/dalle-duck.png 200w,
/static/5fd4636b94c516f8f7496e304bfed6db/e17e5/dalle-duck.png 400w,
/static/5fd4636b94c516f8f7496e304bfed6db/5a190/dalle-duck.png 800w,
/static/5fd4636b94c516f8f7496e304bfed6db/2bef9/dalle-duck.png 1024w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;em&gt;DALL-E output for “photo of a duck wearing a red fedora white background”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Although image generation is cool, be aware that generating images is energy intensive, and most generators were trained
by scraping copyrighted artists’ work without compensation. That’s less cool.&lt;/p&gt;
&lt;h3&gt;Hybrid styles&lt;/h3&gt;
&lt;p&gt;Sometimes it just doesn’t work to stick to only-photos or only-drawings. It can be quite effective to layer line
drawings or icons over photos. It can also look fresher and more modern than plain photos.
For an example, take a look
at &lt;a href=&quot;https://blog.thenounproject.com/explore-the-unusual-april-fools/&quot;&gt;the first image in this Noun Project article&lt;/a&gt;, or
this slide, where the fire icon reinforces the meaning of the fire photo:&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/0628856daab287ae844bfb5e397ff0f9/87629/fires.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 56.49999999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAADA0lEQVR42h3SW0ybdRjH8bfvsW/fnuiBnktPtFDKKDR0Y3UyYEvGPNRsNZgoQS/sDlmHm2BmnbrpyEDcELyYbpplGcQFJ4oxJiZGYrwxRl3cjfd6Y7zyytuvf7z6Xz2f53n+v0c6G5a5EJd5OylzPSXzYU7mZl7h416N97p1LncZNH0Gz7tNXot1MNfpYTEb4NtDQdopD4+73VRNOylFJSgrSHNRmdcTMle7FN5Pq9wpKNwvaWwWTT4q7CIGl+J20czJUpeHW+UAN4bDLAyJd0+Ixd4ojaCPcZ+XvKYhvRKzcWUXy6iiyOBWVue7AZWH++3s7LVzI2fx2yMGP1XtfF918XktyHzJR9XyUu90M2KoTIQ8XDxQYLaaQXo5tjudyu28ymrK5F63xb8Nhb+OOfi0bLGadrBd0vl11OSPKTuL/WFWJ7s5WYxwJOon7/XT3dFBUFXw62LCV+Mqa2LVzR6VL/stHhxw8eeUwVrRQbvT5B3RZL1k8sWwj7+v7WNlNMWk10lFALVojMajo0wMDuESf2hIEtJKSmUpobHVZ3AtZTEfNbie1lhO6HwgQrnbZ7JdsbiTcfLLmX2cS3o4aLl4amAPtZ4exioVBjJZxkf2M1TsQ3orptP0a5wPa5wKaJwI6Lyb0/mkT2F7UOObvRZrORc/vtDLxkSENx97guWTL3KkWGRsqEKlv5/xWo2RgTIe00Sa9qi0IgqzIu3TQZWLCYPljMGmwL4atnPC76QZ9LLTqjIfsrMwPcPWxgaX5uaIebzEA0HK+QJdkSjy7spNv8L5mMp8QqEVVriSNjjlF+eSMPlMrNr2u7g7WeT24SzNRJKFsy2mn6wzMzVFPp3GJhDdZvsf02QZ6XRI4YLA2kmFlwR8OaXTjjq4WXLxoKbye8PJz2+MUXdoHC8Pcn99nR92dlhZWiIbi6EIyBAHrQhUkWxI5wSyVVG5N6hyRuBXxR22IiazIYuHM3H++foYzxTDeEVhwefjuXqdp48e5dnjDRwCyImks8kkiXAEt8PiP2RqdROInVDkAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A fire icon layered on a fire photo&quot;
        title=&quot;&quot;
        src=&quot;/static/0628856daab287ae844bfb5e397ff0f9/5a190/fires.png&quot;
        srcset=&quot;/static/0628856daab287ae844bfb5e397ff0f9/772e8/fires.png 200w,
/static/0628856daab287ae844bfb5e397ff0f9/e17e5/fires.png 400w,
/static/0628856daab287ae844bfb5e397ff0f9/5a190/fires.png 800w,
/static/0628856daab287ae844bfb5e397ff0f9/c1b63/fires.png 1200w,
/static/0628856daab287ae844bfb5e397ff0f9/29007/fires.png 1600w,
/static/0628856daab287ae844bfb5e397ff0f9/87629/fires.png 2076w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;em&gt;A slide from a 2019 talk. The icon and image reinforce each other.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;On the other hand, in this slide the photo and icon are complementary. The photo contributes one piece of information (
what a Bramble Cay melomys looks like, because people are unlikely to know), and
the icon adds extra context (uh oh, it’s extinct).&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/b707bbf91163f5d4d2b35c237611297d/aae30/extinction.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 55.99999999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAACN0lEQVR42o2S30uTURzG99PNFcVgF27mIBgEogm57R0NUzd1iRqJF5IVlcSoJhmUhmSxEqZQ2mbmr6WkoayMGmQa1lbZtrDAqxK6kLzpqiDqH/j07gWjYWQXD+cceM7D53yfI3s/4+dt+ACxm2VM9zgYabczcUHg4kkLBxuricfiuNzlyGQyFAqFtP5TnxOjJENVxEIuZnrEsE4bd9tL8Tbu4Pyls/z4/hOf74xkViqVmwd+W7pF9KqNhSEXE13FRLvsTLZZCbSUUd9QweDQMIJgFenkEmFacrlc0vo5I3Al0kz0uoNUuJaFoIdot0C8v5EPU15G2upo9voo2l0omdMhmxI+nWwgdcfDu/E6Fm/XMHvDyaNAJWsPmoi07WHbdg1arVYitFgsOJ1ObDabJEEQKCgoyKScC7r4NH2IpbEaEoPiLIP7GLtsZ/VZK6HTVpQqBVlZaonOYDBgNpsxGo3k5eVJSu8zyF8NVPFlrplkWGy0z83LYCmRQDlfk1foaLKLJjkaTdb/NZzW2uxxVqINxEbdLIY8JIfd3O/cS2rqHB0nqiWTWqX6HbhOs17MhrmuPjnC63EP8clqPj4+zPK9eqb8DjpOlVCUvxOFSkl2tha1Wv3Xb7MhODFey4teD8sRMTi8nzd9VfR3FnPMu4utGgUmU65UhGC3U1RYuHnTD3udRK4JzA9UMh+s4Hl3Ca0t+TT5i6k4akFv3IJGrRWb1qASn/7n5TSxXq8n12TCmJODTqfjF1pBc64lqKWXAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A small furry animal with a skull icon layered over top&quot;
        title=&quot;&quot;
        src=&quot;/static/b707bbf91163f5d4d2b35c237611297d/5a190/extinction.png&quot;
        srcset=&quot;/static/b707bbf91163f5d4d2b35c237611297d/772e8/extinction.png 200w,
/static/b707bbf91163f5d4d2b35c237611297d/e17e5/extinction.png 400w,
/static/b707bbf91163f5d4d2b35c237611297d/5a190/extinction.png 800w,
/static/b707bbf91163f5d4d2b35c237611297d/c1b63/extinction.png 1200w,
/static/b707bbf91163f5d4d2b35c237611297d/29007/extinction.png 1600w,
/static/b707bbf91163f5d4d2b35c237611297d/aae30/extinction.png 2080w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;em&gt;Another slide from the same talk. The icon
and image each tell a different part of the story.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Image selection&lt;/h2&gt;
&lt;p&gt;We’ve talked a lot about how stuff looks. But what about the actual &lt;em&gt;content&lt;/em&gt; of the pictures?&lt;/p&gt;
&lt;p&gt;Figuring out what image goes with what concept is hard! Sometimes I have a good idea when drafting out the talk, but
more often I draw a blank (do you see what I did there?!). When I’m stuck, I just leave a ‘TODO graphic here’ and
then &lt;a href=&quot;https://blog.container-solutions.com/why-your-desk-is-the-worst-place-to-work-and-other-life-lessons-from-a-lazy-developer&quot;&gt;alternate runs and showers&lt;/a&gt;
until inspiration hits. When choosing an image, think about the purposes of the image; does it need to convey extra
meaning, or is it just there to entertain the audience?&lt;/p&gt;
&lt;p&gt;Some topic-and-image associations have become clichéed. Instead of choosing a predictable image, can you find something
unexpected which will add an extra layer of meaning, or make people laugh with an incongruous association? For example,
if the topic is “working at home”, the obvious image might be a desk with a computer on it, but maybe you could show an
unmade bed, or a pair of comically fluffy slippers. When I talk about under-utilized servers, I don’t show pictures of
data centres or load meters; instead, I take the opportunity to draw cute zombies.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/b073cce3b23d5cd317b6e7ebde78e635/cd138/line-zombies.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 55.49999999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAABBElEQVR42qWSy4qDUBBEfb8VXYiKgi9EBAVxkSAoiDv//4Mq9g2GhJlBxiwaL+31dFW1HMdxOIrnefZUFAWiKOL93T/qJ6xpGgRB8B1QlmU4jgPf99H3PVzXvQ4UBQFZnrMipV3XQdO0l3IaEkURyrJEkiTnQNM0Mc0zs0rntm3heR67IEkShmHANE2Y9zvjOJ7l+zzQZFJCym73O/JdLfXjOMa6rliWhcG2bWNq33P/FUjLSLMMaZqiKArYe57UF/Y4aAhlrKoqdF3/C/QJpI/quma2D3VfbZmshWHI7FRVxRRfBpKdYyGklJZiGMY1IOVi2/ZLEeVDvZOcPoq2blkW+yMeNOLw4xeegWQAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;An icon-style zombie&quot;
        title=&quot;&quot;
        src=&quot;/static/b073cce3b23d5cd317b6e7ebde78e635/5a190/line-zombies.png&quot;
        srcset=&quot;/static/b073cce3b23d5cd317b6e7ebde78e635/772e8/line-zombies.png 200w,
/static/b073cce3b23d5cd317b6e7ebde78e635/e17e5/line-zombies.png 400w,
/static/b073cce3b23d5cd317b6e7ebde78e635/5a190/line-zombies.png 800w,
/static/b073cce3b23d5cd317b6e7ebde78e635/c1b63/line-zombies.png 1200w,
/static/b073cce3b23d5cd317b6e7ebde78e635/cd138/line-zombies.png 1220w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;em&gt;A slide from 2020, with a hand-drawn zombie. Notice that the visual style
combines the shape of icons and a rough hand-drawn finish. I traced icons to get some of the proportions right.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Here’s a later zombie illustration, conveying the same idea in a different style.
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/508faec3fb1e015c52cf210a8ea87606/1d7f7/green-zombies.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 55.99999999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAABeklEQVR42pVTa2uDQBD0//+OUuiDQj4ktPRBS0hbQl9fgk3RqDFG8ZVqjFETnd5e8appKHRl4TzvZmdmVwn/jKqqsEyWSNMV1us18jxHURTiu1QvaNPzPDiOww/SRcpdsKqs8Pg2QOfmFMe9Q4yVd2TrDGVZtgG32y2rmvIk8F2wGpBiahk4Oj9Ap3+C19EzJ/KLIbEKggC2bUNVVRiGwdebzaYFSu8rJvdueIXLpx4+tDF83/8uyB6prhpFEQeaaBpkWeZgSZIIKXVkWQbbsXE7vEb34QyyMsJEnwj2gmHKGHquC2duY27N+MV9chefC1ZUxf1LHxeDLvSpBs/3xPmWh7SZs8wYOFnQ7F4zklXCQFyedK4ZQnIcx1AUBTrzjqSTbNM09zSmhGlN+bg4roMsz1oKfiSz7pJvlmVxk6lBze7VF4LQY+kLppYzazOsF1QxDEPeiHoG942OH3iCFYUx0xEvY1FUIp/Iu93x+OtPaRaK4gh5kQuGX0pzUR90S7u3AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;An icon-style zombie&quot;
        title=&quot;&quot;
        src=&quot;/static/508faec3fb1e015c52cf210a8ea87606/5a190/green-zombies.png&quot;
        srcset=&quot;/static/508faec3fb1e015c52cf210a8ea87606/772e8/green-zombies.png 200w,
/static/508faec3fb1e015c52cf210a8ea87606/e17e5/green-zombies.png 400w,
/static/508faec3fb1e015c52cf210a8ea87606/5a190/green-zombies.png 800w,
/static/508faec3fb1e015c52cf210a8ea87606/c1b63/green-zombies.png 1200w,
/static/508faec3fb1e015c52cf210a8ea87606/29007/green-zombies.png 1600w,
/static/508faec3fb1e015c52cf210a8ea87606/1d7f7/green-zombies.png 2038w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;em&gt;Another zombie slide, from 2023. The zombie looks a little bit like a grinch,
which wasn’t my intention, but at least it makes people smile.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Have I mentioned already that I’m not an expert on this? I attempt to draw a zombie and end up with a grinch.
I’ve shared the patterns that work for me, but styles evolve, so I expect in a few years time I’d have a different set
of recommendations.
I aim to keep experimenting, and when I see a visually effective talk, I try and figure out what makes it work.
There’s no right answer, but we can always learn from others.
As a final reference, &lt;em&gt;Understanding Comics&lt;/em&gt; by Scott McCloud is notionally about comic books, but it’s actually a great
deep dive into drawing and visual communication. I loved it.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Pact Contract Testing for Quarkus]]></title><description><![CDATA[Every time you change one microservice, others break. But you had unit tests! What’s going on? Unfortunately, unit tests aren’t enough to…]]></description><link>http://hollycummins.com/intellij-livestream/</link><guid isPermaLink="false">http://hollycummins.com/intellij-livestream/</guid><pubDate>Wed, 26 Jul 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Every time you change one microservice, others break. But you had unit tests! What’s going on? Unfortunately, unit tests aren’t enough to give system-level c…&lt;/p&gt;</content:encoded></item><item><title><![CDATA[How to avoid common pitfalls with modern microservices testing]]></title><description><![CDATA[Have you ever wondered why your microservices break in production after all the tests have passed during CI/CD? Have you ever wondered if…]]></description><link>http://hollycummins.com/modern-microservices-testing-pitfalls-devbcn/</link><guid isPermaLink="false">http://hollycummins.com/modern-microservices-testing-pitfalls-devbcn/</guid><pubDate>Tue, 04 Jul 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Have you ever wondered why your microservices break in production after all the tests have passed during CI/CD? Have you ever wondered if you’re testing too much or too little? If you want to learn about common pitfalls and how to catch them at build time rather than at runtime, this session is for you!&lt;/p&gt;
&lt;p&gt;In this session we’ll share some common battle scars from our experiences in the field. Additionally, we will introduce the testing pyramid and explain why it is important in helping to continuously deploy microservices independently without fear. We will demonstrate, through a test-driven development approach, how the combination of Pact contract testing combined with Quarkus developer joy can help prevent your microservices from breaking in production.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Quarkus and Contract Tests with Holly Cummins]]></title><description><![CDATA[Our guest today is Holly Cummins, a Java Champion, developer, author, and a Senior Principal Software Engineer at Red Hat working on Quarkus…]]></description><link>http://hollycummins.com/testcontainers-live/</link><guid isPermaLink="false">http://hollycummins.com/testcontainers-live/</guid><pubDate>Thu, 08 Jun 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Our guest today is Holly Cummins, a Java Champion, developer, author, and a Senior Principal Software Engineer at Red Hat working on Quarkus. Today we’ll tal…&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Redis, Quarkus, OpenShift From Cache to Modern Apps at Scale]]></title><description><![CDATA[Redis, Kubernetes OpenShift, and the Quarkus Java stack is a powerful combo for deploying highly available, clustered databases at scale.]]></description><link>http://hollycummins.com/redis-quarkus-openshift-from-cache-to-modern-apps-at-scale/</link><guid isPermaLink="false">http://hollycummins.com/redis-quarkus-openshift-from-cache-to-modern-apps-at-scale/</guid><pubDate>Tue, 06 Jun 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Redis, Kubernetes OpenShift, and the Quarkus Java stack is a powerful combo for deploying highly available, clustered databases at scale.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Quarkus 3 Technical Spotlight: Pact contract testing with Holly Cummins]]></title><link>http://hollycummins.com/pact-spotlight/</link><guid isPermaLink="false">http://hollycummins.com/pact-spotlight/</guid><pubDate>Tue, 23 May 2023 00:00:00 GMT</pubDate><content:encoded></content:encoded></item><item><title><![CDATA[Using Pact and Quarkus to Tame Microservices Testing]]></title><description><![CDATA[In a microservices architecture, making sure each microservices works is (relatively) easy. The microservices are usually small, and easy to…]]></description><link>http://hollycummins.com/pact-and-quarkus-3/</link><guid isPermaLink="false">http://hollycummins.com/pact-and-quarkus-3/</guid><pubDate>Mon, 15 May 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In a microservices architecture, making sure each microservices works is (relatively) easy. The microservices are usually small, and easy to test. But how do you make sure the microservices work together? How do you know if the system as a whole works?&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Holly Cummins at Devoxx UK: How Would the Business Benefit from Your Greener Java Application? ]]></title><description><![CDATA[At her Devoxx UK presentation, Holly Cummins, senior software principal engineer at Redhat, presented approaches that could make Java…]]></description><link>http://hollycummins.com/green-java/</link><guid isPermaLink="false">http://hollycummins.com/green-java/</guid><pubDate>Sat, 13 May 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;At her Devoxx UK presentation, Holly Cummins, senior software principal engineer at Redhat, presented approaches that could make Java applications more cost and energy efficient. Moreover, the busines&lt;/p&gt;</content:encoded></item><item><title><![CDATA[How to avoid common pitfalls with modern microservices testing]]></title><description><![CDATA[Have you ever wondered why your microservices break in production after all the tests have passed during CI/CD? Have you ever wondered if…]]></description><link>http://hollycummins.com/modern-microservices-testing-pitfalls-devoxxuk/</link><guid isPermaLink="false">http://hollycummins.com/modern-microservices-testing-pitfalls-devoxxuk/</guid><pubDate>Thu, 11 May 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Have you ever wondered why your microservices break in production after all the tests have passed during CI/CD? Have you ever wondered if you’re testing too much or too little? If you want to learn about common pitfalls and how to catch them at build time rather than at runtime, this session is for you!&lt;/p&gt;
&lt;p&gt;In this session we’ll share some common battle scars from our experiences in the field. Additionally, we will introduce the testing pyramid and explain why it is important in helping to continuously deploy microservices independently without fear. We will demonstrate, through a test-driven development approach, how the combination of Pact contract testing combined with Quarkus developer joy can help prevent your microservices from breaking in production.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Wicked Good Development Episode 32: Java Queens at Devnexus 2023]]></title><description><![CDATA[Kadi Grigg and Theresa Mammarella sit down for a conversation with Erin Schnabel, Emily Jiang, Mary Gygleski, and Holly Cummins at Devnexus…]]></description><link>http://hollycummins.com/wicked-good-development-java-queens-at-devnexus-2023/</link><guid isPermaLink="false">http://hollycummins.com/wicked-good-development-java-queens-at-devnexus-2023/</guid><pubDate>Fri, 28 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Kadi Grigg and Theresa Mammarella sit down for a conversation with Erin Schnabel, Emily Jiang, Mary Gygleski, and Holly Cummins at Devnexus 2023.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Resources for Writing Quarkus Extensions]]></title><description><![CDATA[I’m sometimes asked for a list of resources for writing Quarkus extensions.
It’s a topic I’ve been meaning to write more about, but I haven…]]></description><link>http://hollycummins.com/quarkus-extensions-resources/</link><guid isPermaLink="false">http://hollycummins.com/quarkus-extensions-resources/</guid><pubDate>Thu, 20 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/c958423b11caa0421462f1ecf243cec6/7d204/writing-quarkiverse.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 58.50000000000001%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAABfklEQVR42pVSbUvCYBT1dxf9k6AP1geRIDDUqAgjjTLMmLjVwrlX9+peFNuc87Q7WyCV5gOXwXPPc+45566ALWexWMBWFJgcB5PnEUXRRnzhz85ymX3ETge94jG4eh39Ugkjlv1qL/9PmIMVw8ZDsYjhbQOeOwZTLsNX1bWB/1YYzWOcN1m07hnwAwns2xB8+ymNIN7NcpKsJrtBgMu2gEf5A8+jGU5bQyhOsBK3a4b0QNYtNLoazpqvuOEslBo8+oKC+XyeLSaO4+2ESZLAcRxomoqBpOGOkVCp1HB4dIIeL2EwFGHoOiRJgmEYCMPwx3LWCGn6eDyGZVnwPBe2beGifo2DvX10a1U4+ghm2iMyKtu2szcbCX3fT8k8uGn5aY6GLOGqUsUL845wNoOqat+Ek8lks0LKJkhJ8iL7pJiO5wfQU7umaWYOiJAw9ONvVZiTaZoGQRCyzERRhCzL2QDqUU2n082WaSkEoLAJnJOTtVlql+6pTxsm7G9b/gS9W5g748/bXgAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;a woman drawing a quarkiverse logo&quot;
        title=&quot;&quot;
        src=&quot;/static/c958423b11caa0421462f1ecf243cec6/5a190/writing-quarkiverse.png&quot;
        srcset=&quot;/static/c958423b11caa0421462f1ecf243cec6/772e8/writing-quarkiverse.png 200w,
/static/c958423b11caa0421462f1ecf243cec6/e17e5/writing-quarkiverse.png 400w,
/static/c958423b11caa0421462f1ecf243cec6/5a190/writing-quarkiverse.png 800w,
/static/c958423b11caa0421462f1ecf243cec6/c1b63/writing-quarkiverse.png 1200w,
/static/c958423b11caa0421462f1ecf243cec6/29007/writing-quarkiverse.png 1600w,
/static/c958423b11caa0421462f1ecf243cec6/7d204/writing-quarkiverse.png 2217w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;I’m sometimes asked for a list of resources for writing Quarkus extensions.
It’s a topic I’ve been meaning to write more about, but I haven’t yet, because as Emmanuel Bernard says, the todo list
is infinite.
Every time someone asks me, I re-assemble my list of favourite links. To save redoing that step each time, I’m writing
the list down in a permanent place.&lt;/p&gt;
&lt;p&gt;The Quarkus Team have two guides about writing extensions, a simple one, and a deeper one.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://quarkus.io/guides/building-my-first-extension&quot;&gt;My first extension&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://quarkus.io/guides/writing-extensions&quot;&gt;Deeper guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The deeper guide is now linked from the top menu bar of &lt;a href=&quot;http://quarkus.io&quot;&gt;quarkus.io&lt;/a&gt; as “Create Extensions” to make
it easier to find.&lt;/p&gt;
&lt;p&gt;As of autumn 2024, there are also now two companion guides:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://quarkus.io/guides/extension-maturity-matrix&quot;&gt;A maturity matrix for extensions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://quarkus.io/guides/extension-faq&quot;&gt;Extension FAQs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I wrote them, so I think they’re useful. :)&lt;/p&gt;
&lt;p&gt;I sometimes think we could also use a “my second extension” guide, but we haven’t written one yet. (Remember, the todo
list is infinite.) However, there are some great community blogs/instructions that fill in that gap:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://quarkus.io/blog/quarkus-aws-cloudwatch_extension/&quot;&gt;A walkthrough of writing an extension to log to Amazon cloud watch&lt;/a&gt;,
which is an excellent general tutorial about writing an extension. This is the tutorial I followed when writing my
first extension.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/onepoint/quarkus-greener-better-faster-stronger-55ea&quot;&gt;A thorough walk through of writing an extension, including a dev service&lt;/a&gt;.
This is relatively recent, and it’s great.&lt;/li&gt;
&lt;li&gt;If you prefer video, Sebastian Daschner has
a &lt;a href=&quot;https://blog.sebastian-daschner.com/entries/creating-a-quarkus-extension&quot;&gt;nice walkthrough of creating a simple extension&lt;/a&gt;
which integrates to a LED light to show application health&lt;/li&gt;
&lt;li&gt;How extensions can help with byte-code rewriting and other similar use cases:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://quarkus.io/blog/solving-problems-with-extensions/&quot;&gt;Stripping out methods which have a problematic annotation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://quarkus.io/blog/solving-problems-with-extensions-2/&quot;&gt;Resolving an annotation conflict by transforming breaking annotations into happy ones&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hollycummins.com/why-youre-missing-out-quarkus-extensions/&quot;&gt;My and Georgios Andrianakis’s talk about writing extensions&lt;/a&gt;
with an introduction to writing extensions. The demo is using minecraft for logging. I’m hoping to keep
the &lt;a href=&quot;https://github.com/holly-cummins/quarkus-observability-minecraft&quot;&gt;source code&lt;/a&gt; for that extension up to date as a
bit of a reference for some extension scenarios.
Apart from the chicken-proliferation-jokes, this is my favourite bit of that talk, and it’s not in other resources, so
I’ve included it here as an animation.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/dd415e0e23460bdec32e3141f6044e62/builditems.gif&quot; alt=&quot;an animation showing how builditems are chained&quot;&gt;&lt;/p&gt;
&lt;p&gt;One of the most important resources is &lt;a href=&quot;https://quarkus.io/guides/all-builditems&quot;&gt;the list of all build items&lt;/a&gt;, the
guide which lists all build items.
The build items are a bit like the SPI for extensions.
Almost everything that an extension might want to do can be handled by an existing build item or chain of build items.
The trick is knowing which one!
It’s a good idea to browse the list of build items to see if there’s one which meets your needs when you get started.
I also re-review the list every now and then to make sure there’s nothing I’ve forgotten or missed.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[How to avoid common pitfalls with modern microservices testing]]></title><description><![CDATA[Have you ever wondered why your microservices break in production after all the tests have passed during CI/CD? Have you ever wondered if…]]></description><link>http://hollycummins.com/modern-microservices-testing-pitfalls-devnexus/</link><guid isPermaLink="false">http://hollycummins.com/modern-microservices-testing-pitfalls-devnexus/</guid><pubDate>Wed, 05 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Have you ever wondered why your microservices break in production after all the tests have passed during CI/CD? Have you ever wondered if you’re testing too much or too little? If you want to learn about common pitfalls and how to catch them at build time rather than at runtime, this session is for you!&lt;/p&gt;
&lt;p&gt;In this session we’ll share some common battle scars from our experiences in the field. Additionally, we will introduce the testing pyramid and explain why it is important in helping to continuously deploy microservices independently without fear. We will demonstrate, through a test-driven development approach, how the combination of Pact contract testing combined with Quarkus developer joy can help prevent your microservices from breaking in production.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Happy Path podcast]]></title><link>http://hollycummins.com/happy-path-podcast/</link><guid isPermaLink="false">http://hollycummins.com/happy-path-podcast/</guid><pubDate>Wed, 05 Apr 2023 00:00:00 GMT</pubDate><content:encoded></content:encoded></item><item><title><![CDATA[Duke's Corner podcast]]></title><description><![CDATA[In this conversation Oracle’s Jim Grisanzio talks with Holly Cummins about her passion for being “in the engine room of Java” in that she’s…]]></description><link>http://hollycummins.com/dukes-corner-podcast/</link><guid isPermaLink="false">http://hollycummins.com/dukes-corner-podcast/</guid><pubDate>Mon, 03 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In this conversation Oracle’s Jim Grisanzio talks with Holly Cummins about her passion for being “in the engine room of Java” in that she’s trying to build tools and frameworks to reduce complexity for developers and increasing their productivity. The conversation also touches on the Java community, Open Source, and various software development practices. Holly is a Sr. Principle Software Engineer at Red Hat in the UK. You can find her on Twitter @holly_cummins. You can find Jim at @jimgris on Twitter.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Why Cloud Zombies Are Destroying the Planet and How You Can Stop Them ]]></title><description><![CDATA[At QCon London, Holly Cummins, Quarkus Senior Principal Software Engineer at RedHat, talked about how utilization and elasticity relate to…]]></description><link>http://hollycummins.com/stop-cloud-zombies-qcon/</link><guid isPermaLink="false">http://hollycummins.com/stop-cloud-zombies-qcon/</guid><pubDate>Fri, 31 Mar 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;At QCon London, Holly Cummins, Quarkus Senior Principal Software Engineer at RedHat, talked about how utilization and elasticity relate to sustainability.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Expert Talk: War Stories from Moving to the Cloud • Holly Cummins & Lorna Jane Mitchell • GOTO 2022]]></title><description><![CDATA[This interview was recorded for GOTO Unscripted at GOTO Copenhagen. #GOTOcon #GOTOunscripted #GOTOcphhttp://gotopia.techRead the full…]]></description><link>http://hollycummins.com/goto-copenhagen-lorna-interview/</link><guid isPermaLink="false">http://hollycummins.com/goto-copenhagen-lorna-interview/</guid><pubDate>Tue, 14 Mar 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This interview was recorded for GOTO Unscripted at GOTO Copenhagen. #GOTOcon #GOTOunscripted #GOTOcphhttp://gotopia.techRead the full transcription of this i…&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Why Your Desk is the Worst Place to Work, and Other Life Lessons from a Lazy Developer]]></title><link>http://hollycummins.com/default-mode-network/</link><guid isPermaLink="false">http://hollycummins.com/default-mode-network/</guid><pubDate>Thu, 09 Mar 2023 00:00:00 GMT</pubDate><content:encoded></content:encoded></item><item><title><![CDATA[Quarkus Insights #117: Contract Testing with Pact and Quarkus]]></title><description><![CDATA[Holly Cummins discusses how contract tests combine the lightness of unit tests with the confidence of integration tests, and should be part…]]></description><link>http://hollycummins.com/quarkus-insights-pact/</link><guid isPermaLink="false">http://hollycummins.com/quarkus-insights-pact/</guid><pubDate>Mon, 13 Feb 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Holly Cummins discusses how contract tests combine the lightness of unit tests with the confidence of integration tests, and should be part of your development toolkit.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Modern Java runtimes: No Regrets energy efficiency with Quarkus and GraalVM - A Redmonk Conversation]]></title><description><![CDATA[In this video we talk to Red Hat’s Holly Cummins about modern Java runtimes and how they can make your software and systems more efficient…]]></description><link>http://hollycummins.com/no-regrets-video/</link><guid isPermaLink="false">http://hollycummins.com/no-regrets-video/</guid><pubDate>Thu, 15 Dec 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In this video we talk to Red Hat’s Holly Cummins about modern Java runtimes and how they can make your software and systems more efficient. Small, lightweigh…&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Sustainable Software and Systems: Lightswitch Ops for the Triple Win - A RedMonk Conversation]]></title><description><![CDATA[In this video I talk to Red Hat’s Holly Cummins about sustainability, the imperatives for greener software, and how to achieve it with…]]></description><link>http://hollycummins.com/lightswitchops-video/</link><guid isPermaLink="false">http://hollycummins.com/lightswitchops-video/</guid><pubDate>Thu, 15 Dec 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In this video I talk to Red Hat’s Holly Cummins about sustainability, the imperatives for greener software, and how to achieve it with modern Java architectu…&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Sustainable software and systems, efficiency and the triple win. Policy, progress, and modern Java runtimes like Quarkus.]]></title><description><![CDATA[The imperative for more sustainable and power efficient applications and systems is stronger than ever. Not only is the green agenda…]]></description><link>http://hollycummins.com/sustainable-software-and-systems-efficiency-and-the-triple-win-policy-progress-and-modern-java-runtimes-like-quarkus/</link><guid isPermaLink="false">http://hollycummins.com/sustainable-software-and-systems-efficiency-and-the-triple-win-policy-progress-and-modern-java-runtimes-like-quarkus/</guid><pubDate>Thu, 15 Dec 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The imperative for more sustainable and power efficient applications and systems is stronger than ever. Not only is the green agenda becoming more pressing, but recent energy price spikes mean that…&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Tradeoffs, Bad Science, and Polar Bears – The World of Java Optimisation]]></title><description><![CDATA[Welcome to the Java optimisation jungle. Why can’t we “just make it go faster”? It turns out, in most cases, we need to first work out…]]></description><link>http://hollycummins.com/tradeoffs-bad-science-and-polar-bears-the-world-of-java-optimisation-utrecht-jug/</link><guid isPermaLink="false">http://hollycummins.com/tradeoffs-bad-science-and-polar-bears-the-world-of-java-optimisation-utrecht-jug/</guid><pubDate>Wed, 30 Nov 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Welcome to the Java optimisation jungle. Why can’t we “just make it go faster”? It turns out, in most cases, we need to first work out “faster for whom?” and “why do we want to go faster?” and “what even &lt;em&gt;is&lt;/em&gt; faster?” This talk introduces the basic principles of optimisation, before bouncing through the pitfalls of optimisation; why the exact same techniques which make Quarkus rocket-fast used to be a terrible idea fifteen years ago, why fast benchmarks make for slow programs, and why even though it can be easy to get wrong, optimisation really really matters. Along the way we’ll talk about measuring things, bad advice, garbage collection, and climate change.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Expert Talk: Cloud Chaos & How Contract Tests Can Help • Holly Cummins & Kevlin Henney • GOTO 2022]]></title><description><![CDATA[This interview was recorded at GOTO Amsterdam 2022 for GOTO Unscripted. #GOTOcon #GOTOunscripted #GOTOams]]></description><link>http://hollycummins.com/goto-unscripted-kevlin-podcast/</link><guid isPermaLink="false">http://hollycummins.com/goto-unscripted-kevlin-podcast/</guid><pubDate>Fri, 25 Nov 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This interview was recorded at GOTO Amsterdam 2022 for GOTO Unscripted. #GOTOcon #GOTOunscripted #GOTOams&lt;/p&gt;</content:encoded></item><item><title><![CDATA[How to write greener Java applications]]></title><description><![CDATA[There is a need to reduce the impact of the software industry on the environment. Read to discover more about how
Quarkus reduces carbon…]]></description><link>http://hollycummins.com/greener-java-applications-detail/</link><guid isPermaLink="false">http://hollycummins.com/greener-java-applications-detail/</guid><pubDate>Fri, 11 Nov 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;There is a need to reduce the impact of the software industry on the environment. Read to discover more about how
Quarkus reduces carbon emissions.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The Sad Case of the Tech T-Shirt (Fashion and Programming, part ii)]]></title><description><![CDATA[A year or two ago, I wrote about the connection between fashion and programming.
For reasons I don’t totally understand, it’s my second most…]]></description><link>http://hollycummins.com/fashion-and-programming-ii/</link><guid isPermaLink="false">http://hollycummins.com/fashion-and-programming-ii/</guid><pubDate>Tue, 01 Nov 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A year or two ago, I wrote about &lt;a href=&quot;/programming-and-fashion/&quot;&gt;the connection between fashion and programming&lt;/a&gt;.
For reasons I don’t totally understand, it’s my second most popular blog post, after my &lt;a href=&quot;/leaving-ibm/&quot;&gt;leaving IBM&lt;/a&gt;
announcement.
Apparently, people do searches for ‘fashion coding’ and ‘coding in fashion’. There’s
not many results for that kind of search, so my site is the top result. A coding school has even linked to the article.&lt;/p&gt;
&lt;p&gt;When I was writing that article, I almost deleted it several times, because it was so personal, and frivolous, and
resentful.
This one has almost been deleted too, for the same reasons.&lt;/p&gt;
&lt;p&gt;I started thinking about fashion and developers again because I saw &lt;a href=&quot;https://twitter.com/Purity_Birir&quot;&gt;Purity Birir&lt;/a&gt;’s
tweet. It said in 240 characters what
I took a whole blog to try to say:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/Purity_Birir/status/1576571676380102656?s=20&amp;#x26;t=rzNplttuRCE2XmXZaUUYKg&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 50%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAABYlAAAWJQFJUiTwAAABkElEQVR42pVSa0+DQBDk5/pFf6Wxido3hVKqtQ9ayvMOKLSlMO6u8RE1MV6y4XZnbu6WWUOlCp27W2itEUYRgjBEXdf472raFk3TwOh07nBzfYXVeg17NofluCgOpZBaIn1fXHuvf8VbEWxhxEmCmTtDluUSUZzQazOkaQqdZVTLkBCHv0op6YR5CeFKaeIplGX1IWzs9wFGYxPdfh+WbWMwHMGcWLAdB6ZpCXb/0IVtT9HrD4gzFZyDMXMywfzpCXlRvAkGQSgiDDozF/bUkUNjc0L76QfG9eFojP5giDHlrjuXnIP53JEIet4Wj90eLMsWgPfPiwW22x12vg/uIAwj+P5e8uVyhY3nYbPxsNv5WK3WZGb82bKi//W8eMGGBDyKJRFYhB07n2vUlwvO5Hrzi0G/LeNEh/KixKE8UlTQeYGyOoIvUjqXiFONCwnLeDTtj/jqtlHRYW4nJrdEjER9emFOo6PJTREnd/dBJBf++cLj8YSI/oHOCpq/CpLT6PAs5sUBFeVZzmOiZP+X4CuKpfV7AjlJhAAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;We say we don&amp;#39;t have a dress code in tech and we pretend to have an inclusive culture but in fact we do and this dress code and culture disproportionately affects women.&quot;
        title=&quot;&quot;
        src=&quot;/static/f42b58d0056c2cfb09694f9d482ffbaa/5a190/purity_birir_tweet.png&quot;
        srcset=&quot;/static/f42b58d0056c2cfb09694f9d482ffbaa/772e8/purity_birir_tweet.png 200w,
/static/f42b58d0056c2cfb09694f9d482ffbaa/e17e5/purity_birir_tweet.png 400w,
/static/f42b58d0056c2cfb09694f9d482ffbaa/5a190/purity_birir_tweet.png 800w,
/static/f42b58d0056c2cfb09694f9d482ffbaa/eb2af/purity_birir_tweet.png 954w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;
This isn’t just about clothes;
RedMonk have written about
the &lt;a href=&quot;https://web.archive.org/web/20250525021238/https://redmonk.com/jgovernor/2022/06/09/some-thoughts-on-stock-photos-on-tech-websites-and-the-developer-aesthetic/&quot;&gt;Developer Aesthetic&lt;/a&gt;
without a single mention of hoodies.
It’s about how communities create their own visual codes, and how that the design choices we make as individuals
communicate that we belong in a group.
Or, if we’re unlucky, the choices give an impression we &lt;em&gt;don’t&lt;/em&gt; belong. (Light mode user here, hi!)&lt;/p&gt;
&lt;p&gt;But back to clothes.&lt;/p&gt;
&lt;p&gt;Purity is right that as a woman in tech, there is definitely a ‘wrong’ outfit. (Too short, too shiny, too frilly, too
female, basically.)
Women who wear the wrong outfit will be Told.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/hot_girl_spring/status/1584442821050007553?s=61&amp;#x26;t=K21owEJVw1z6L1EnCz_jbg&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 72.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAABYlAAAWJQFJUiTwAAACHklEQVR42p1Ti7KaQAzlo/sB/ZN+UH2Cig9AXiKICgrISzlNIvfW63Q60y6TyZLNnk1OEuUSu/jx/Rv06Rwrw4If7HG5ZqjqBv+yuq7D4/GAUtwKLDQVWQ9yzXKk6QVFcUNV1SJt24ouyxJN06Cua9FZnoutqioB46WczglGkymmqoYJ6dF4gtV6jYW+hDabQ5vPMRiNMRiO8HMwxHyhY9z7z2YL8eH9PgzRMWBeFGJQtRmG/cXligCXSwLVMZmqImzny+zHmm2815crenAk55yJck4SimiD6HBAGEXwPB/H4xGO4xKfAQ5xjOPpBJfsJ9K7XYCAeLZtB47rIo6PiOheGEbCI3F4Q5qkn8S+E/1bgI/jr7aXPadcE7maqkqahmlh63jwghBBRJGdU0TxCRkV6EE32vudyKfLj+4PFX4CK3dyMiwbi9UGlu2KXptbmFuXwH2YtiuP7PYRbNcTnzA6IMsyMP+cYUlV/gBWuNymtRVyN4YhkZoUKQtzy/9cdeZM18lnY0il2b4xTPHjzLiFpG0YkAnlYni+35PtidiO87STWFtbhAtiEJDv71A3tUTHPVuWzyiFQ56MK72Q5QXtn5qdeJ9crnL2bNzurVBdn2rPJX1K096Ji5K4KJETHzkBCSD9M2B6yURzUbrPIuAL2GsHKNyMCY1alt9o7DLw5DRNi/9Z0jZ3SoWjKWVWK+QUXUtRv0by1p5/BfwFfw0lICxmTG0AAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Being a woman in tech is wearing a cute outfit and a man telling you it&amp;#39;s unprofessional and that you should in fact strive to have the &amp;quot;nerdy&amp;quot; look (whatever tf that is)&quot;
        title=&quot;&quot;
        src=&quot;/static/4e388511a472c2357026e54ba10ee36a/5a190/nanami_tweet.png&quot;
        srcset=&quot;/static/4e388511a472c2357026e54ba10ee36a/772e8/nanami_tweet.png 200w,
/static/4e388511a472c2357026e54ba10ee36a/e17e5/nanami_tweet.png 400w,
/static/4e388511a472c2357026e54ba10ee36a/5a190/nanami_tweet.png 800w,
/static/4e388511a472c2357026e54ba10ee36a/fbf08/nanami_tweet.png 962w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;… but it’s worse than that. There definitely is a wrong outfit, but there &lt;em&gt;isn’t even a ‘right’ outfit&lt;/em&gt;. No matter
what we wear, someone might get distracted.&lt;/p&gt;
&lt;p&gt;I’ve been thinking about this for a while, but I had a reminder this week. Eric Deandrea and I spoke about contract
testing at Devoxx Belgium a few
weeks ago. This week, Eric spotted this comment on &lt;a href=&quot;https://www.youtube.com/watch?v=vYwkDPrzqV8&quot;&gt;our talk video&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 512px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/95e0773ddf4d66d15046a51d3eb8afc8/01e7c/chick_tweet.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 22.499999999999996%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA1UlEQVR42nWQzYqEMBCE8wyjRsXf1UQYPaiwTEb8BfHgxfO+/4vUTDc4eJg9fBSp7nSlI7rwjpu0Yds2fN+H1hp5niMIAliWBcdx2P+G53nM1RN/P79ICwXzMDDGYBgGzPOMtm3RNA3quuahFHhFSsnDSCn49IX3NszTYFkWbNuGaZqw7zufSY/j4JBxHNH3PWvXdaiqioPKssS6rp+akK4LrRSUVrwqURQFrxxFEcIwZE2ShInjmKG6+75Lmqbpxxf07CzLuPm8TAVqpnVI/+P8w6v3AnMmjFZYj9ViAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A little Chauvinistic of me but ... hot or not? A chick in high heels, skinny jeans, and ... a Quarkus t-shirt&quot;
        title=&quot;&quot;
        src=&quot;/static/95e0773ddf4d66d15046a51d3eb8afc8/01e7c/chick_tweet.png&quot;
        srcset=&quot;/static/95e0773ddf4d66d15046a51d3eb8afc8/772e8/chick_tweet.png 200w,
/static/95e0773ddf4d66d15046a51d3eb8afc8/e17e5/chick_tweet.png 400w,
/static/95e0773ddf4d66d15046a51d3eb8afc8/01e7c/chick_tweet.png 512w&quot;
        sizes=&quot;(max-width: 512px) 100vw, 512px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;So far, there have been no comments about Eric’s outfit, even though we were wearing almost identical clothes.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/f99c1453c9a73acbee3d5eb2953cfabf/08688/holly-eric-devoxx.jpg&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 66.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAUBAgP/xAAVAQEBAAAAAAAAAAAAAAAAAAABAv/aAAwDAQACEAMQAAAB0snibfCEH//EABsQAAEEAwAAAAAAAAAAAAAAAAEAAhEhBBIx/9oACAEBAAEFAhkukODlIQ5etlf/xAAVEQEBAAAAAAAAAAAAAAAAAAAAEf/aAAgBAwEBPwGq/8QAFREBAQAAAAAAAAAAAAAAAAAAABH/2gAIAQIBAT8BiP/EABwQAAIBBQEAAAAAAAAAAAAAAAABEhARITJBYf/aAAgBAQAGPwLhJxOLyjd3k2P/xAAaEAEBAAMBAQAAAAAAAAAAAAABEQAhMVFB/9oACAEBAAE/IVQHc09weTX7cIFHnWkyIDUVxAT2HuUhrmf/2gAMAwEAAgADAAAAEGDv/8QAFxEBAAMAAAAAAAAAAAAAAAAAAAERYf/aAAgBAwEBPxCMLP/EABURAQEAAAAAAAAAAAAAAAAAAAAR/9oACAECAQE/EJS//8QAHRABAQACAQUAAAAAAAAAAAAAAREAIWExQXGRof/aAAgBAQABPxCq0YPwGJClVC6OcYzALHgJii1ko95gpUiTryypdEA7nvP/2Q==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Holly Cummins and Eric Deandrea at Devoxx&quot;
        title=&quot;&quot;
        src=&quot;/static/f99c1453c9a73acbee3d5eb2953cfabf/4b190/holly-eric-devoxx.jpg&quot;
        srcset=&quot;/static/f99c1453c9a73acbee3d5eb2953cfabf/e07e9/holly-eric-devoxx.jpg 200w,
/static/f99c1453c9a73acbee3d5eb2953cfabf/066f9/holly-eric-devoxx.jpg 400w,
/static/f99c1453c9a73acbee3d5eb2953cfabf/4b190/holly-eric-devoxx.jpg 800w,
/static/f99c1453c9a73acbee3d5eb2953cfabf/e5166/holly-eric-devoxx.jpg 1200w,
/static/f99c1453c9a73acbee3d5eb2953cfabf/b17f8/holly-eric-devoxx.jpg 1600w,
/static/f99c1453c9a73acbee3d5eb2953cfabf/08688/holly-eric-devoxx.jpg 2500w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;em&gt;Photo by &lt;a href=&quot;https://flickr.com/photos/bejug/52455349336/in/album-72177720303177725/&quot;&gt;Devoxx Belgium&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The comment was moderated out as soon as Eric reported it, but heads are harder to moderate.
I’m still sad, and mad, because I try very hard to choose innocuous outfits that let me blend in with the tech herd.
It’s disappointing to be reminded how totally I am not-succeeding at blending in.&lt;/p&gt;
&lt;p&gt;Ok, if I’m totally honest, I could try a &lt;em&gt;bit&lt;/em&gt; harder to blend my shoes in. Here’s a still of the
“high heels” I’m wearing in the video:&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 408px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/082127afb6e0d29234ab6531811af18e/e7c18/boots.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 40.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAABYlAAAWJQFJUiTwAAABgUlEQVR42kWRWW/CMBCE81CprSqEuCEJgZADcjkxCTk41P7/PzWdNSp9GG0crb+ZXVuVjtD1BbohZ02p3JzbLkdzSV/yQwfTxRhbf421s0Kc7pFkO6SUKgOU5KjQhrWxR9jtF0hSD3VzxKXNjAQitdIxxFSAS3uGfeBi464MrCh9FCpAURz4HT6BciGMbDjuxCiKHQORhP2Qv8BR5GK1mTDZAbazxLk+sidhPUGzP2fK/LCG1fXKjNhcEpPS3U4xnX1iZY9xTDyU5xh1l6FmVUzTsv7QrDpHNDqZqYzaFIqmljiIJMkfOOcI7m6O0eQd49kHPH+JrIpxLAKcMp97O3BnT1U6oEI0BOqTB0vcBVY3yUsXOVMlx3K536/xG5I84GPMeV4jTHxj3PKuPOIwKNzuGnURwmr4o2Uy2ZPsTZrkW8B/L5xme6aJzQocb866M73XW2VAw7XC/XGGzoInsKNDTz0fQr3gsoJ+KMzF663E41sTQMhNG8A/kAkfCir18Qvs0vBrw5JywQAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Holly&amp;#39;s boots at Devoxx&quot;
        title=&quot;&quot;
        src=&quot;/static/082127afb6e0d29234ab6531811af18e/e7c18/boots.png&quot;
        srcset=&quot;/static/082127afb6e0d29234ab6531811af18e/772e8/boots.png 200w,
/static/082127afb6e0d29234ab6531811af18e/e17e5/boots.png 400w,
/static/082127afb6e0d29234ab6531811af18e/e7c18/boots.png 408w&quot;
        sizes=&quot;(max-width: 408px) 100vw, 408px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;I usually wear block-heeled boots,
unlike most of my tech colleagues. On the other hand, my experiments with
flatter shoes have not been particularly successful. I clomped around in Doc Martens for half of Devoxx, in an attempt
to blend in.
I was uncomfortably short and the heavy Docs shredded my feet so thoroughly I still have blisters several weeks later.&lt;/p&gt;
&lt;p&gt;I do agree with the commentator about one thing: I’m not sure the Quarkus t-shirt I’m wearing
is my best look.&lt;/p&gt;
&lt;p&gt;I have a conflicted relationship with tech-product t-shirts. Branded t-shirts are a standard
speaker uniform at conferences.
I wear them because my male colleagues do, and because I want to fit in, and because I’m proud of my product.
But branded t-shirts look very different on women than they do on-men.&lt;/p&gt;
&lt;p&gt;The first issue is even finding one that’s an appropriate fit. As Kathy
Sierra &lt;a href=&quot;https://headrush.typepad.com/creating_passionate_users/2006/12/tech_tshirts_ar.html&quot;&gt;pointed out&lt;/a&gt;, many tech
t-shirts are only
printed for men. A small version of a straight-cut men’s fit t-shirt will usually be too small in the neck (aurgh,
strangled!),
too small in the hips, and too small in the bust. A medium version of a men’s t-shirt will be
a &lt;a href=&quot;https://geekfeminismdotorg.wordpress.com/2011/10/18/t-shirts-yet-again/&quot;&gt;tent&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Even when branded t-shirts physically fit, they can be uncomfortable.
GeekFeminism did a great analysis of the &lt;a href=&quot;https://geekfeminism.fandom.com/wiki/T-shirts&quot;&gt;hazards of having a bust&lt;/a&gt;.
T-shirts with a picture over the chest area, by definition, draw attention to the wearer’s chest.
That’s not a problem for men, but it is for women.
Because women tend to have bumps on their chest, logos sometimes deform in weird ways, and &lt;em&gt;really&lt;/em&gt; draw attention to
the breasts.
That’s the exact opposite of the “blending in” that I’m hoping for.&lt;/p&gt;
&lt;p&gt;There’s a more subtle problem, too. Tech t-shirts just aren’t my natural style. I find them hard
to make into an outfit.
That matters, because “borrowed someone else’s t-shirt for the day” is not a look which says “expert on the subject”.
Tech t-shirts look ridiculous with most of the trousers I own, apart from one or two pairs of jeans.&lt;/p&gt;
&lt;p&gt;Why can’t I just wear what I want? Well, it means I’m not representing. And if I wear the clothes I feel &lt;em&gt;most&lt;/em&gt;
comfortable in, I get told I look corporate.
This isn’t a hypothetical; it happened a few weeks ago while I was in a conference hotel wearing my comfy home clothes,
on an ‘off day’ between events.
No malice was intended, I just … did look kind of corporate.&lt;/p&gt;
&lt;p&gt;What’s the solution? I don’t really know.
We need to focus on what women speakers say, not their shoes or t-shirts.
We need to embrace the &lt;a href=&quot;https://twitter.com/search?q=%23ilooklikeadeveloper&quot;&gt;#ilooklikeadeveloper&lt;/a&gt; hashtag.
We need to let our clothes out of the closet.
And we need to normalise diversity in tech - not just of people, but of outfits.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Innovation Anti-patterns]]></title><description><![CDATA[In a world where there’s always too much to do and too little time, how can organisations make time to innovate? (Spoiler: siloes probably…]]></description><link>http://hollycummins.com/wtf-innovation/</link><guid isPermaLink="false">http://hollycummins.com/wtf-innovation/</guid><pubDate>Fri, 28 Oct 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In a world where there’s always too much to do and too little time, how can organisations make time to innovate? (Spoiler: siloes probably aren’t the answer.) In this article we’ll explore practical innovation strategy, exploring how to design an MVP (good), and how to get something for nothing (great!). But before we do, let’s talk about George Washington Carver.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Tradeoffs, Bad Science, and Polar Bears – The World of Java Optimisation]]></title><description><![CDATA[Welcome to the Java optimisation jungle. Why can’t we “just make it go faster”? It turns out, in most cases, we need to first work out…]]></description><link>http://hollycummins.com/tradeoffs-bad-science-and-polar-bears-the-world-of-java-optimisation-jonconf/</link><guid isPermaLink="false">http://hollycummins.com/tradeoffs-bad-science-and-polar-bears-the-world-of-java-optimisation-jonconf/</guid><pubDate>Fri, 14 Oct 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Welcome to the Java optimisation jungle. Why can’t we “just make it go faster”? It turns out, in most cases, we need to first work out “faster for whom?” and “why do we want to go faster?” and “what even &lt;em&gt;is&lt;/em&gt; faster?” This talk introduces the basic principles of optimisation, before bouncing through the pitfalls of optimisation; why the exact same techniques which make Quarkus rocket-fast used to be a terrible idea fifteen years ago, why fast benchmarks make for slow programs, and why even though it can be easy to get wrong, optimisation really really matters. Along the way we’ll talk about measuring things, bad advice, garbage collection, and climate change.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[How to avoid common pitfalls with modern microservices testing]]></title><description><![CDATA[Have you ever wondered why your microservices break in production after all the tests have passed during CI/CD? Have you ever wondered if…]]></description><link>http://hollycummins.com/modern-microservices-testing-pitfalls-devoxx/</link><guid isPermaLink="false">http://hollycummins.com/modern-microservices-testing-pitfalls-devoxx/</guid><pubDate>Thu, 13 Oct 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Have you ever wondered why your microservices break in production after all the tests have passed during CI/CD? Have you ever wondered if you’re testing too much or too little? If you want to learn about common pitfalls and how to catch them at build time rather than at runtime, this session is for you!&lt;/p&gt;
&lt;p&gt;In this session we’ll share some common battle scars from our experiences in the field. Additionally, we will introduce the testing pyramid and explain why it is important in helping to continuously deploy microservices independently without fear. We will demonstrate, through a test-driven development approach, how the combination of Pact contract testing combined with Quarkus developer joy can help prevent your microservices from breaking in production.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Expert Talk: Cloud Chaos & How Contract Tests Can Help • Holly Cummins & Kevlin Henney • GOTO 2022]]></title><description><![CDATA[This interview was recorded at GOTO Amsterdam 2022 for GOTO Unscripted. #GOTOcon #GOTOunscripted #GOTOams https://gotopia.tech Read the full…]]></description><link>http://hollycummins.com/goto-unscripted-kevlin/</link><guid isPermaLink="false">http://hollycummins.com/goto-unscripted-kevlin/</guid><pubDate>Tue, 04 Oct 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This interview was recorded at GOTO Amsterdam 2022 for GOTO Unscripted. #GOTOcon #GOTOunscripted #GOTOams&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://gotopia.tech&quot;&gt;https://gotopia.tech&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Read the full transcription of t…&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Refactor This Podcast - vFunction]]></title><description><![CDATA[Refactor This by vFunction brings the world of app modernization into the spotlight through friendly conversations with industry luminaries.]]></description><link>http://hollycummins.com/refactor-this-podcast/</link><guid isPermaLink="false">http://hollycummins.com/refactor-this-podcast/</guid><pubDate>Thu, 15 Sep 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Refactor This by vFunction brings the world of app modernization into the spotlight through friendly conversations with industry luminaries.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Uh, Does This Thing Actually Work? Modern Microservices Testing]]></title><description><![CDATA[To realise the promise of microservices, individual services must be independently deployable, and they should be deployed often.
But that’s…]]></description><link>http://hollycummins.com/testing-microservices-skills-matter/</link><guid isPermaLink="false">http://hollycummins.com/testing-microservices-skills-matter/</guid><pubDate>Wed, 31 Aug 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;To realise the promise of microservices, individual services must be independently deployable, and they should be deployed often.
But that’s easier said than done.
Releases take confidence.
How does a business achieve enough confidence to release often without getting bogged down in manual QA bottlenecks?
Is automating tests too expensive? How do services know if they’ve made a breaking change?
If the individual microservices all work, does that mean the system works?
This talk discuss microservices testing strategies and explore some of the modern tools which make testing easier and better.
And there’s a demo: Holly will show Pact contract testing, test containers, and Quarkus’s continuous testing and dev services support.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Tradeoffs, Bad Science, and Polar Bears – The World of Java Optimisation]]></title><description><![CDATA[[Charity conference for Ukraine] Welcome to the Java optimisation jungle. Why can’t we “just make it go faster”? It turns out, in most cases…]]></description><link>http://hollycummins.com/cloud-builders/</link><guid isPermaLink="false">http://hollycummins.com/cloud-builders/</guid><pubDate>Tue, 23 Aug 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;[Charity conference for Ukraine]&lt;/p&gt;
&lt;p&gt;Welcome to the Java optimisation jungle. Why can’t we “just make it go faster”? It turns out, in most cases, we need to first work out “faster for whom?” and “why do we want to go faster?” and “what even &lt;em&gt;is&lt;/em&gt; faster?” This talk introduces the basic principles of optimisation, before bouncing through the pitfalls of optimisation; why the exact same techniques which make Quarkus rocket-fast used to be a terrible idea fifteen years ago, why fast benchmarks make for slow programs, and why even though it can be easy to get wrong, optimisation really really matters. Along the way we’ll talk about measuring things, bad advice, garbage collection, and climate change.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Hackerstations: clean and minimalistic setup in London, UK]]></title><link>http://hollycummins.com/hackerstations/</link><guid isPermaLink="false">http://hollycummins.com/hackerstations/</guid><pubDate>Thu, 11 Aug 2022 00:00:00 GMT</pubDate><content:encoded></content:encoded></item><item><title><![CDATA[Quarkus Insights #98: Using Minecraft as an Observability client]]></title><description><![CDATA[In Quarkus Insights Ep.98 Holly Cummins joins the team to discuss her Quarkus observability demo that uses Minecraft as a client.]]></description><link>http://hollycummins.com/quarkus-insights-minecraft/</link><guid isPermaLink="false">http://hollycummins.com/quarkus-insights-minecraft/</guid><pubDate>Mon, 08 Aug 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In Quarkus Insights Ep.98 Holly Cummins joins the team to discuss her Quarkus observability demo that uses Minecraft as a client.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Around IT in 256 seconds #81: Quarkus: supersonic, subatomic Java]]></title><description><![CDATA[Author: Holly Cummins]]></description><link>http://hollycummins.com/around-the-world-in-256-s-81/</link><guid isPermaLink="false">http://hollycummins.com/around-the-world-in-256-s-81/</guid><pubDate>Fri, 05 Aug 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;Author: Holly Cummins&lt;/em&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Amigas: programar software no es más difícil que aprender idiomas]]></title><description><![CDATA[Qué hace para ganarse la vida? Explíquenoslo a mi abuelo y a mí. Soy ingeniera de programación informática en Quarkus. Habrá oído hablar del…]]></description><link>http://hollycummins.com/amigas-programar-software-mas-dificil-aprender-idiomas.html/</link><guid isPermaLink="false">http://hollycummins.com/amigas-programar-software-mas-dificil-aprender-idiomas.html/</guid><pubDate>Sat, 23 Jul 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Qué hace para ganarse la vida? Explíquenoslo a mi abuelo y a mí. Soy ingeniera de programación informática en Quarkus. Habrá oído hablar del lenguaje Java… Hasta&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Why You Can't Buy Cloud Native]]></title><description><![CDATA[The virtual shelves are filled to bursting with cloud native technologies; containers, runtimes, CI pipelines, observability tools. The more…]]></description><link>http://hollycummins.com/why-you-cant-buy-cloud-native-jbcnconf/</link><guid isPermaLink="false">http://hollycummins.com/why-you-cant-buy-cloud-native-jbcnconf/</guid><pubDate>Tue, 19 Jul 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The virtual shelves are filled to bursting with cloud native technologies; containers, runtimes, CI pipelines, observability tools. The more an organisation buys, the more cloud native it is, right? And the more network communication an app involves, the more cloud native it is, right? Well, not so much. It turns out cloud native is about how you deliver software, not the tools you use. This talk explains these often-overlooked elements for cloud native success:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Figuring out what problem we’re trying to solve&lt;/li&gt;
&lt;li&gt;Releasing&lt;/li&gt;
&lt;li&gt;Testing, but not the way you’re used to&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title><![CDATA[Stackd 59: Holly Cummins, Quarkus, IBM, and the Garage]]></title><description><![CDATA[Kito, Danno, and Josh welcome special guest Holly Cummins, Senior Principal Software Engineer on the Quarkus team at Red Hat and fellow Java…]]></description><link>http://hollycummins.com/stackd-podcast/</link><guid isPermaLink="false">http://hollycummins.com/stackd-podcast/</guid><pubDate>Mon, 18 Jul 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Kito, Danno, and Josh welcome special guest Holly Cummins, Senior Principal Software Engineer on the Quarkus team at Red Hat and fellow Java Champion, to tal…&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Getting Into and Testing Microservices]]></title><description><![CDATA[Senior Principal Software Engineer Holly Cummins teaches us about microservice architecture and how to test it.]]></description><link>http://hollycummins.com/holly-cummins-on-getting-into-and-testing-microservices/</link><guid isPermaLink="false">http://hollycummins.com/holly-cummins-on-getting-into-and-testing-microservices/</guid><pubDate>Tue, 12 Jul 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Senior Principal Software Engineer Holly Cummins teaches us about microservice architecture and how to test it.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[How to draw when you can’t draw, part ii: no really, how to draw]]></title><description><![CDATA[In part i, I explained why I started drawing despite not having
much artistic talent. Practice has helped me move from ‘totally inept’ to…]]></description><link>http://hollycummins.com/how-to-draw-part-ii/</link><guid isPermaLink="false">http://hollycummins.com/how-to-draw-part-ii/</guid><pubDate>Fri, 17 Jun 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In &lt;a href=&quot;/how-to-draw-part-i&quot;&gt;part i&lt;/a&gt;, I explained why I started drawing despite not having
much artistic talent. Practice has helped me move from ‘totally inept’ to ‘mostly inept’.
Here are some of the other techniques I’m using to improve.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/9b027477b3c12e638e732c944cae8428/49853/lightning-self-portrait.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 75%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAACXBIWXMAAAsTAAALEwEAmpwYAAACCklEQVR42pVT7XKaQBT1LX2S9KcPkL6AT+A/p+MPf9mxmtqaidhoGonBgCAxCgbwA+RD8PSyBlo/JqY7s8Pucu/Ze865m8F/jO12u7cPw5B9l3MFq6XG1pmPAu3m33U8plMVff4rhuJ3Ag8+BvgvgO+7CIJdouc6+MV9gSTeYPN2dhYwAdL1ESYvA4yf+1BHvzEZS+B7V5hb2pEUZys0XicEcg/T1GEYBmWH0KZDPPDNk7pm3qssCNaQhxzW6yU8z0en00EU7f4J/Z9YLs3zFUZRxNzzPAdPgxZmuszOTdNAo9FAs9lEt3uHmfaIZ/We4rykjEPApCofgsBBlnuwTC1tDcdxUC6Xkc/nkc1mcXn5Gaah0qU/GJMEI3NIU5tKZIB4RL9areLTxQUDvb5u0ryB67oQBw3YtpUE71OOk0cKD1VVIIoSWq0WKpUKA8nlcigWi5jNZmn8y/iBnJdOUd5tViSyOurTzR7q9TozQVEU8DyPQqGQ9tvcGkOWOAITEL3nsuOsoMgdArRTg+LRbrdRq317iwoweLzac/iky8lhrJ/0xJF76zSoVCphtbIR+DY19S1R7eGgsGPAxWIBTdNIo1cMhDsSu43pRIKuKajXKuRml54ZR5L0YJgWvR6d6alTjmVZx4AxvaQH2VulPozowTvOnHpxyCqPaQZBiM0moNgwzUmkiQH/AFwkeJSiiEGuAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Holly being electrocuted&quot;
        title=&quot;&quot;
        src=&quot;/static/9b027477b3c12e638e732c944cae8428/5a190/lightning-self-portrait.png&quot;
        srcset=&quot;/static/9b027477b3c12e638e732c944cae8428/772e8/lightning-self-portrait.png 200w,
/static/9b027477b3c12e638e732c944cae8428/e17e5/lightning-self-portrait.png 400w,
/static/9b027477b3c12e638e732c944cae8428/5a190/lightning-self-portrait.png 800w,
/static/9b027477b3c12e638e732c944cae8428/c1b63/lightning-self-portrait.png 1200w,
/static/9b027477b3c12e638e732c944cae8428/29007/lightning-self-portrait.png 1600w,
/static/9b027477b3c12e638e732c944cae8428/49853/lightning-self-portrait.png 2224w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;em&gt;2021, self portrait. Learning from failure is important. Laughing at failure also helps.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Observing&lt;/h2&gt;
&lt;p&gt;Carol Dweck &lt;a href=&quot;https://www.youtube.com/watch?v=hiiEeMN7vbQ&quot;&gt;observed&lt;/a&gt; that part of a growth mindset is seeking out
people who do the thing you’re trying to do better than you can do, so you can learn by example.
(In contrast, people with a fixed mindset tried to cheer themselves up by looking
for people who were even worse.) Some of the improvement in my drawing has come from just doing the thing, over and over again.
But I’m also trying to be a bit Sherlock-Holmesy and observe, rather than just seeing.
When I see a drawing
I like, I study it. What about it do I like? What techniques did they use?
Could I &lt;del&gt;steal&lt;/del&gt; use those techniques?&lt;/p&gt;
&lt;p&gt;Sometimes, the answer is ‘no’. I’m limited. Anything detailed or life-like or complex is
beyond me. But even drawings with only a few simple lines can be powerful.
For example, &lt;a href=&quot;https://www.charliemackesy.com/&quot;&gt;Charlie Mackesy’s&lt;/a&gt; pictures only have a few splotches of colour and squiggles but they’re
so evocative. (I haven’t embedded any of his pictures to respect his copyright, but do
go have a browse of his &lt;a href=&quot;https://www.charliemackesy.com/&quot;&gt;site&lt;/a&gt;.)&lt;/p&gt;
&lt;h2&gt;Education&lt;/h2&gt;
&lt;p&gt;I assumed drawing was an innate talent, but it can be taught.
Here are some of the resources I’ve been learning from:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;My colleague Jocelyne Dittmer wrote a great &lt;a href=&quot;https://medium.com/@jocelynedittmer_5269/visual-thinking-sketching-ec64f19cf70&quot;&gt;guide to sketch-noting for non-drawers&lt;/a&gt;. Because the visual thinking skills are similar, it’s also useful for slide illustration.&lt;/li&gt;
&lt;li&gt;‘How to draw’ videos for kids are about the right level for me. I started to watch them because I had young children, but now I watch them on my own. My favourite is &lt;a href=&quot;https://www.youtube.com/hashtag/artforkidshub&quot;&gt;Art For Kids hub&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One of the
things on my todo list is to explore other drawing tutorials. Red Hat do regular Days of Learning,
so perhaps I’ll take my next one for drawing instruction. I might even
be confident enough to work through lessons aimed at adults.&lt;/p&gt;
&lt;h2&gt;Experiment&lt;/h2&gt;
&lt;p&gt;Experimentation is a key part of continuous improvement.
Over the years, I’ve tried many different styles of drawing – with shading, flat, monochrome, white backround, black background,
bold lines, fine lines …&lt;/p&gt;
&lt;p&gt;For my &lt;a href=&quot;https://hollycummins.com/how-to-love-kubernetes-and-not-wreck-the-planet-keynote-continuous-lifecycle-online/&quot;&gt;Kubecon keynote&lt;/a&gt;
I tried icon-shaped people instead of stick figures:&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/80cb8c28bbe2b0be791bf0cd1799f99f/748b0/zombie-workload.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 73.00000000000001%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAACXBIWXMAABYlAAAWJQFJUiTwAAABj0lEQVR42q1U2Y6CQBDEC48YvF3EG7xBBTWYVRONRhOj//875XQbVNZ9WMw+dOZiqqu6epAkScI/h38jFArxmEql0Ov1kEgkPgP0gLywHQf9fh+6Yfx6/idAikKhAEVRsFqtMBgMkM1m3xRQhMPhx9yXzFuolQqMTgeNRoPX1WoVjmAZkN2dYTweh7tcwhDyPMBWq4XJZPJ2YbFY4HA4YLvd4nq94nw+YzqdviaWUC6XsV6v8S1kDodDPqTRtm0kk0kf4Gg0YlDLsliB67psng+QHCUDxuMx148YO7MZf5zP5x9gtVoNm82GmR+PRyZBd/b7PVRVfUom5Egkgi+xSWCxWIwTzAQojR6grusMRIkIeLfb4XQ64XK5vJr3LLqmabBERgJpt9soFotIp9Of9aEsy2yKaZpcH6phLpfzufzaLjR68aML7hNiQnUgZs1mk4FLpdJnbUNB7LrdLhtEUolhvV5nBoElK5kMTCGTpNI6I5ymlpnP54hGo8EBiZUmXoYsHPYOqF0q4vUE/dvcAJccWLPUH3xBAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A drawing of a zombie&quot;
        title=&quot;&quot;
        src=&quot;/static/80cb8c28bbe2b0be791bf0cd1799f99f/5a190/zombie-workload.png&quot;
        srcset=&quot;/static/80cb8c28bbe2b0be791bf0cd1799f99f/772e8/zombie-workload.png 200w,
/static/80cb8c28bbe2b0be791bf0cd1799f99f/e17e5/zombie-workload.png 400w,
/static/80cb8c28bbe2b0be791bf0cd1799f99f/5a190/zombie-workload.png 800w,
/static/80cb8c28bbe2b0be791bf0cd1799f99f/748b0/zombie-workload.png 868w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;em&gt;2020, a zombie with an icon-like body shape&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I used loose sketching instead of thick lines:&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/1d5cc572c33ba0721d970002d758707e/010dc/melting-planet.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 74.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB5ElEQVR42oVTR44CQQwccs45I+ISBQiQOBAuHODAedHy/2/Uuqxt4oz2YM202y6Xy27Lsiy8m8vl0q/X60U6nUY2m0UqldJ/t9v9EmNjn06/349yuYzdboevwQADsdVqhev1itPphFardQf+F5CsarUaorEYotEoBsMhfm43fAvYfr9Hv9/HfD5Ht9t1Yvnq6PZ6iAkY/5l8uVxwPB4xE5DlcqlAvKMMpVLJrv2HIyUaFYtF/U8kElgsFhiNRphOp9hsNmg2m3rmfSQSwXa7RSAQcGaYLxTg8XhUw2q1qoV4ZjLP9XpdGc6lUC6Xw+l8VnneWD4myynyP5lMaoLxcwDUdjKZYDwea6uMIVtbQHMYygDYAm29XisA2yQIz51OBwvRMhwOazy1bsj9B6DP50Mmk8HhcNBk+uLxuO4edSTYbDbTmHw+f5eIcrTb7dcV4mqQBfeO9E3bpiK1M8JnZLLmn/c0Fm00GlpMATnNiiRR+OdAw5J6BYNBVCoVnbzTK2FhgmvLRUkywc/GdliZZrMe6mOHlCz29xAsTotMWJVOAjelBYJxTUoiBTXkKoWli4gkkTF168kjICsCcVDKnK1SN1ImE4KbNSE4g0OhkL6Mjuwg7+knEMnYPr1n3ZzMKebd9wsKaV8RxDhaiwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A drawing of a melting planet&quot;
        title=&quot;&quot;
        src=&quot;/static/1d5cc572c33ba0721d970002d758707e/5a190/melting-planet.png&quot;
        srcset=&quot;/static/1d5cc572c33ba0721d970002d758707e/772e8/melting-planet.png 200w,
/static/1d5cc572c33ba0721d970002d758707e/e17e5/melting-planet.png 400w,
/static/1d5cc572c33ba0721d970002d758707e/5a190/melting-planet.png 800w,
/static/1d5cc572c33ba0721d970002d758707e/c1b63/melting-planet.png 1200w,
/static/1d5cc572c33ba0721d970002d758707e/29007/melting-planet.png 1600w,
/static/1d5cc572c33ba0721d970002d758707e/010dc/melting-planet.png 1714w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;em&gt;2020, a melting planet&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Some of my visual experiments haven’t even involved drawing – for example, I like how slides come out if
I just use some super-sized icons from the &lt;a href=&quot;https://thenounproject.com/&quot;&gt;noun project&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/a8e71a7e39305feacb9f94e90f723a11/62a6a/electricity.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 55.99999999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAABSklEQVR42o1Tua6CUBBlERFFO1FR3IIsDcGoIQQ6Cwsqajp7Ez/MfzwvMy+X6BNeKE7unYUzZ+YOkiRJEJBlGe92Gyjvn9zfi6qqNbqQtkJRFL6cz2c8n08cj0e2h8MhJpMJYzQaYTAYYDwes9+yLMxmM/T7fZimyX7BIwnp9/sdr9cLVVWx7bouLpcL8jzn0/M8LhpFEYMK7/d7jp1OJyavW6YKt9uN51IUBQzDqMdAlQUoLu6apqHX632PSSi8Xq+sklSQTW2lacrKttst4jhGEASszPd9ZFnGPlJ4OBw+H4U+eDweKMuyDiwWC27btm04joP1eo3VasWFyL/b7bDZbJiccj8IKZAkCX8kAtPplP1EQoSkjmY2n88RhiEXIps6WC6X32vTdQc7oHlZhf3XR6d4oKYcSdd13rO2P4Ji72jqhF6b9pHOH4gJA2ZotcovAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A slide with a plug icon&quot;
        title=&quot;&quot;
        src=&quot;/static/a8e71a7e39305feacb9f94e90f723a11/5a190/electricity.png&quot;
        srcset=&quot;/static/a8e71a7e39305feacb9f94e90f723a11/772e8/electricity.png 200w,
/static/a8e71a7e39305feacb9f94e90f723a11/e17e5/electricity.png 400w,
/static/a8e71a7e39305feacb9f94e90f723a11/5a190/electricity.png 800w,
/static/a8e71a7e39305feacb9f94e90f723a11/62a6a/electricity.png 1122w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;em&gt;2019, a huge icon in place of hand-drawing&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Even after all my practice, there are some things I just can’t draw.
Rather than going all the way
back to just-photos, I’ve had good experiences with a &lt;a href=&quot;https://hollycummins.com/cloud-chaos-and-microservices-mayhem-jfuture/&quot;&gt;hybrid style&lt;/a&gt;.
I think it’s more expressive than either photos of drawings alone.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/129936b68059b849adabf562f5bb4804/eee07/test-pyramid.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 56.49999999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAAC8ElEQVR42iWQ7U+TVxjGnz9sXxezJfuy6DK31e0LY1QTXMwwjUODrMuwHQNb2iItWPs2iqWlpX0sLX0vFGEdFItoQZSpUV60YikF7PPbYftw5Zzkus91/c4tXfFX6Z7co296H318n15x/iF0M7XPjeh74VXRRqrCe48pX8dcaNKXqtMbf0d/soYpV+Nmeo+hwoF4U0XqjtQYSNfxFRu47x8wIoxgqUF45Qh38QhDroEhc4Bp9pihuRo3nDGG86/wr8H4IwX/YwVvWcG3CmMrTSTddB1j7hDLTEO0NBicPWR47hDnX4e4lz7gLDXxPlTwPDhC/bMea58Gj9OCRf4b+TmEN5pMVCBQ+b9AMmQbeBePSK43STxRmPlHIbOpMPdCIS3u4acK2bfQevkaX50+RWTciM+uJThuI/98n+wOZF4rJF9CbBMk1+IxYyfID08aYPIJxF9AbltoS6FQhT9jGVTfnEH/m4bl+SDpmIeZ5F1yiVEKKyss7SkUxVxBzEvRtSapZwgayIuWoghafAPzbxXKDXCEZDQdF2hrPYf3jp5sdIRwwEl4wsGkz0xwzEx6Nsty9ZjSO0EYXj0g/fQDRYG9vKNQ2hWBu00qIiyUmeXK5fNcam+h49IPJGQ7ubiL1D07sZCN8LgFr+N3bg9exz1qZ25jB+le6RWpR28obtZYflmnKPZSFqGuSAZ1q4qzZz7lk48/ov28itCYEc9ID06rliFDJ1bjVUYs3djMv2Ds1aDTdSH5kkuE8mXixTVSSxssrG/jnohyoe0cP7V/R8u3p/ni81Nc1bRRXggwn3ETDZhIyVYy4vtJ2SY0TEJQu+06QRgNMBWfIhJLkL2/gNXuoO17FT+qVVxUf43qy89Qt5zFOtDFs9UpHsz7/wuJh24h+092aOSuqxfHcA8D/Z1Im+sz7G6tsv26ws5WhcflHNNTo3hdA9gGe7AYruO5rUeesIod3iHsH0IO2rCateh+7eCWSYuxv4trne1CF/kXVye2EMjGKn0AAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A pyramid photo annotated with layers&quot;
        title=&quot;&quot;
        src=&quot;/static/129936b68059b849adabf562f5bb4804/5a190/test-pyramid.png&quot;
        srcset=&quot;/static/129936b68059b849adabf562f5bb4804/772e8/test-pyramid.png 200w,
/static/129936b68059b849adabf562f5bb4804/e17e5/test-pyramid.png 400w,
/static/129936b68059b849adabf562f5bb4804/5a190/test-pyramid.png 800w,
/static/129936b68059b849adabf562f5bb4804/c1b63/test-pyramid.png 1200w,
/static/129936b68059b849adabf562f5bb4804/29007/test-pyramid.png 1600w,
/static/129936b68059b849adabf562f5bb4804/eee07/test-pyramid.png 1628w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;em&gt;2020, annotation animations on top of a photo&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The tension between the two media gives the slides an extra energy, I think.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/cb1c060ada74c9aaf8eefe68f1231b82/74e37/friction-costs.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 55.99999999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAACHElEQVR42mVSz28SYRDl//DmwcS7N0/ePPkfePCqB02MHq1ejDEmoiaa2kTbGmlE09bWmEDBCq2ArEjAEmB3y7JAIEUIv3dZWHh+M7q0tZO87H7zTd73Zt64IGI6ncK2bf4SnHDOhOFwiMlkIpI2YFuwhiYMw+D8YDDgesuy4KIfSsbjcUQiESSTSaTTafh8Pni9XqRSKS5W9wu45l7EFfdbXH74Gp5PfhQUGbIsQ1GU44T5fB6JRIIJY7EYJEli4lAohGg0imazCV0v4eKdeZy6tYDT15/h5eY2kwwM85BQCGNCSmSzWWQyGQYprNVqyOVyrPB3vQ5NEJ6/9wqXnn7Ejeer+LC1yySGaUJV1UPC8XjMh0ajwSpbrRaOxuTfTBWtiDNzi7jwZAPv/WF+mGbY6XS47RkhKSGFgUAAHo+HC5lIGEBwHsyoGs7eXcbj9a/4shXE9+Qv6MUid0ZwvOCW66IleqUoCv4Pm5wVsafs49yDd7i9so37SxvY3JHYcWr5mMJer8cOh8PhmaPOqrBCsU4UWbWAqy/WsLAWhPvNOoLfpNkMHUJWWK1W0e12OVEul0Fnh/ToDGVNx81lHx55/ZibX0FwNyaKJmi32ydNGY1GzE7EmqbBNP8uLS1sv9/nO5rXzx8S/KEIllY/Y0/Mun5wwNtQKpW4nuCqVCosmdwlx4iEXiVQzgHd0eI6ykkECaC8ruvcHdX9AYyNHO7sdaMuAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A stick figure running to a door with a photo outside&quot;
        title=&quot;&quot;
        src=&quot;/static/cb1c060ada74c9aaf8eefe68f1231b82/5a190/friction-costs.png&quot;
        srcset=&quot;/static/cb1c060ada74c9aaf8eefe68f1231b82/772e8/friction-costs.png 200w,
/static/cb1c060ada74c9aaf8eefe68f1231b82/e17e5/friction-costs.png 400w,
/static/cb1c060ada74c9aaf8eefe68f1231b82/5a190/friction-costs.png 800w,
/static/cb1c060ada74c9aaf8eefe68f1231b82/c1b63/friction-costs.png 1200w,
/static/cb1c060ada74c9aaf8eefe68f1231b82/29007/friction-costs.png 1600w,
/static/cb1c060ada74c9aaf8eefe68f1231b82/74e37/friction-costs.png 1732w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;em&gt;2020, a hybrid illustration&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Hybrid works well with icons and photos, too.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/e6fa33e17fc554253628ad09d3a71060/11b93/island-nations.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 55.49999999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAAC00lEQVR42kWSS2sbZxSG9X+67qabQiNHdlxJE1nXkUa2ZFmj0c2WRqPRzOgWjaK7Fam104Y2rkMIwcb0YuiiUAiFUihNF/0PLXQRAl6n8PRrsuji4fDxHt7zcs7nSRanxAsT4tqEmDYmoo7eEtP+J168T7w0Qi6PSVXGpA8nZOozco05ReuYQ+cBeneF0V/jkTIuwcwASRDI9N8SzPaR9t8REuzk+oQP7hHJD4iqAzHAZe9oRKE5JadPONCnlK0Fje4DPH6lx3aqw51kW+DgS1h44yZeuYU3ZbGRtvHuvuP2ns1Wtk0g1yFbd2kOphgDkbI1QTPHVJwZnnCmjT/ZYlNwK2WwnbdRzCHF4Qx9LqYuj3FOVizOv6D/6BR9ORfvTxl+9hB9dowt9FOhTR+e0l+JhDtpnYhmI7cGDD8/4cnFCZdXS86+6rFe13DdAk4nS8tSsFsKvU6Gx1+aXH2z5reXL7i6fsQvL3/khxcXPH42wtOwbc6eLrm8XPD8aZ92W2F3z0c4+iGx5Ab7aph8XaHm5JG7JT7qmUhuh/Hzc169fsXF99f89feffPvzT+SnwvDJswnnZ01sSya9u0U256dg7iHfr6Gu+jQ/GSI5DUJVlQ+KFd5Pa7x3W0a/t+CfN2+4+vo7bm5u+PX3PziyXTzX10tG7j4NI47VznE4a5FcTYm6Q2SzS2A3z62PJfxSGH8ghM+3zdZ2gLvhGIZpEU8kmB/PGc0W1E0Hz3zt0J51qQ0ckcwU/8vgoFxFVTW0UpmYLOPb3CSaiAtTiTv+gKh3CYZ28AeDRCIhdKNOvdmiWtfxHDVNijWDUvWISrkoKFAqqahankKpKHYZxrvhJZVKEY1GSSkKkViMcCSMklaQpCBqIY9lm2L/TTxmsy6up9PrWnQ6Jo5jCLGB3qhSqRREc5ZEIkoyFUfTchhGhUxWIRr7z1Amu5+mVi/jtA16vSb/AhRPBmHjvASXAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A photo of an island with a flipper icon superimposed&quot;
        title=&quot;&quot;
        src=&quot;/static/e6fa33e17fc554253628ad09d3a71060/5a190/island-nations.png&quot;
        srcset=&quot;/static/e6fa33e17fc554253628ad09d3a71060/772e8/island-nations.png 200w,
/static/e6fa33e17fc554253628ad09d3a71060/e17e5/island-nations.png 400w,
/static/e6fa33e17fc554253628ad09d3a71060/5a190/island-nations.png 800w,
/static/e6fa33e17fc554253628ad09d3a71060/11b93/island-nations.png 1124w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Not every experiment is a success. I had to abandon a new style of stick
figures halfway through drawing a presentation because they were all turning out improbably phallic.
“NSFW presentation through incompetence” is a milestone I hope to avoid.&lt;/p&gt;
&lt;h1&gt;The mechanics&lt;/h1&gt;
&lt;p&gt;People sometimes ask me about my drawing process, so here are some details.
I started out drawing on paper, with sharpies, and then using a scanner to digitise them.
It worked, but it was labour-intensive, and I could only do it at home. No last minute revisions to the slides for me.
Not that I would ever leave a presentation to the last minute. Obviously.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/11b9211453f10437056f6dae40fdb527/00d43/sharpie-architecture.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 62.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAAsTAAALEwEAmpwYAAACE0lEQVR42o2TW2/TQBCF/f/feeUBISrEtSlFEIoKoipRqBRFTZyLiR0rju3Ym/h+XduHsRNDUSHqSLZXuzPfzpkZC5afQNtGSHIOPy4xW5h4dPIcA1lCUQCcXjufY+N40Hcm5M0K28DFLnQRZxx1fBBnKMoKtQkpL5AXFdjWwUJWwZiDx+cT9KYGFCMmWNY4Lk0Hp/1LXN5+h8YM+EkILw7pwvrSEnscAduFTcD5QkUU+rDSElMvwY0dws+L5nzNQkyWMhTKULE0bFyGf5nQLnJeYutl8MIcqh2hP9chs5gCU1hOCuZHWJlrTKgUKc9RVtVxYG21U+1mbmy4rt/scSoHKaJnn6llMwRB0KyrA7S6A/8NbDfDKITN/pZTH7UheU4KViv4QbhPgprRnFd3gBk5eZ7fQE3LIvkcx4yT5MFQQud0indncwyHJtKEH5pSllhpGta6jpkkIYrj/4LaLHzqfPeDiE6nhx89FcMbAxefFjRmFYTTj9/w5bqPkShS7TZHM2vLIooWRiONRkmCZv+kEq3x4uUY6tKF0P3ahziTCDg5ml1br9r6PQ29gYQl07Aw1lCZjqurJRTF2dcwThLohnGvY/cyPADFsYVnT25xfibRd4TuewWfuwr1gu+B9SiMJ1M81Dj9HhddGSdPR3j7eoY3r6aQpG2jQIiiiDrsNdCSGvRQq5X4QYowzJBlf6biF7mC4I465AkWAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;An architecture diagram&quot;
        title=&quot;&quot;
        src=&quot;/static/11b9211453f10437056f6dae40fdb527/5a190/sharpie-architecture.png&quot;
        srcset=&quot;/static/11b9211453f10437056f6dae40fdb527/772e8/sharpie-architecture.png 200w,
/static/11b9211453f10437056f6dae40fdb527/e17e5/sharpie-architecture.png 400w,
/static/11b9211453f10437056f6dae40fdb527/5a190/sharpie-architecture.png 800w,
/static/11b9211453f10437056f6dae40fdb527/00d43/sharpie-architecture.png 1000w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;em&gt;An example drawing done with Sharpie on paper, 2015&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Eventually
phone cameras got good enough I could use them instead of a scanner, so that made the process a bit more portable,
but it was still slow.
I saw Marlena Compton do some amazing sketching using the Paper stylus and an iPad app,
so I switched to digital.
(Marlena can even give a talks by live-drawing them, which is something I’ve never been brave enough to attempt.)
Going digital meant I could trace from photos, and also
experiment with different brushes and ‘pens’ beyond just sharpies.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/6da6800057e5dd3cf39690d37f8bfb09/00172/matchbox-2016.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 66.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAABYlAAAWJQFJUiTwAAACMUlEQVR42pWT3W8SQRTF+1fru8bEB58NPvlikcRQMGqrbVeLwFIsFujy1W2Wz4VdloVl2e+SerwzgLRJNfXhZJKdmd/cc+/ZHc+d43/kLGZcnmvBc1Zy12L7Ow8GrS9dRy6iwOXffG/B5fHVfhhw8zIHRT56/Q6khoTZzICmKhj2Whh0mlD7bTpn/x24AlFFoYsgcNDptpHNHEMUkuifvIGv5LG0ZFxPmxh3S5gafbj3ATf9iEIHgb9At6ugIGbwUzyEcZnBL7uFZTWNsPEZhiahcJzEj/0E1Had2nILyCty5ggJElCP1OEAxVMRpwQb0GFzeEm2ZG5PG7QglQQcxF4g9fgRhOfPoNTK8H1nC+Qg34Zm6sjlvuLTh13k0jFI3+K4EN6imf+IpriPajGD4lkBudevIDx9gtpeHP1GCZquckccGNCURuMh5EYdnVQaZ1/eQd3bRSsRQz3+Eu3iEeRKFq1yHtPJCNZMhy7loNZEmOMr2JZ2Nzaz6RglqYqTbBbfU+9xcHiETCKJ6qEA87wCzzTheA5ubpYIqR3NxgWu5CrGeg8L21pFZ+2UA82JzsO6IM1osvO5uVq9OSySSQ9GNGlFkXFeLqHXUzgooJ75HGRtgcy3pg04MKKIRHSIraynDGKzvI36kGoV1Cl/PNy073vbjN4WB+r6kKrUyLqBiaFBVbuQ5SZBmK0hbKp4yqoM3Tthv09/psySz6A6TcsYj8jSlFfNLrPfiulfoA3wNxTUwLV/gFGbAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A picture of a matchbox&quot;
        title=&quot;&quot;
        src=&quot;/static/6da6800057e5dd3cf39690d37f8bfb09/5a190/matchbox-2016.png&quot;
        srcset=&quot;/static/6da6800057e5dd3cf39690d37f8bfb09/772e8/matchbox-2016.png 200w,
/static/6da6800057e5dd3cf39690d37f8bfb09/e17e5/matchbox-2016.png 400w,
/static/6da6800057e5dd3cf39690d37f8bfb09/5a190/matchbox-2016.png 800w,
/static/6da6800057e5dd3cf39690d37f8bfb09/00172/matchbox-2016.png 1044w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;em&gt;An drawing using the Paper app and stylus, 2016&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;However, the first app I used was more targeted for note-taking,
so my drawings were disappointingly pixelated on a big screen.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/5a4a02a98b430d026faf08dd832d9879/2eb79/matchbox-pixels.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 70.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAABYlAAAWJQFJUiTwAAADD0lEQVR42o2S/U9aVxjH+Q/3Hyzdb0ts0mRLt9a3iTPR2ZesL2rLhNZJ0RFpRVEQUcQLylsDXERvi1jblfpWhAvcCyjtZwe2Nv6wZrvJN0/Oc+7zOd/nOcfg8sxh/e0m3slhUm4z6eVJYk4Tsm+KXHyZ7TU7W6s2Io57SNYh0j4bSnCW7KarHVNLkzx3mcX/NrIRN4bf73ThfXIb2TtB9NkI3ofdIo6iSA6SbgvJRQurlj6WRq6y+cdNkTOTWDQTtN3Ab+knJGJiwUxmdZqX4hCD7LOy45/m+ZwJz1gn9v5vmB3uIDDxc7vQ+6ATn6lb7I+ScJmQJgdZNvWwMt5DxH6rnUt5HpMNL3K4l8aQECDZa+VFeIEVcx8T33+F3XiJ4PRtlsa6WHtkRBbgmHAfnLpF3PWI2OyIcPsLYQHM+O0c5GTyu0kBXcDwWglz8vYFO4EZfA+u4xUnR5+O4L5/Df94L/GndwlYB4nPmzl6rfBGlogLYFK4epdNUiockFeiHL2M8iq9gaG+vkHpzxxvtjfJb4sNyUfY9iuRZ/fJhBzEhbs9n5N6oUDtvMa7fZn9VIDy6SGVQp69+BJKIkg4FsXpdGBQv76MFoujnWlUHk+x23FFQFc4zm1xGtmksiZRn5lHOz6gepCnmk5z/qGBWjxhwzuD3+chFAmzs7NFtVrCUL3cSW3egzbvpnSpg+K336HdNVGZ81Bxuin3DlIdvkPlnsjZHGiKwu6rLJIUIKNsUzg95qxeoXmuo7WAEcsT5LTMbijEsSgsjY6jJhLojSp6Lof6Yz/FK9coO13otQqqXkZRMqhqgeaZTk2sq5ViW23gSjpFQADk/T3Uhk7ra35stu2Xy6do74/QTg7RRJuaVkIThWcNDV1TP0MuynC1u4frxn5+GhhgYGgIo4i9fUZ+6OpmzPSQkijS68LtheJ/A30GtmbR0voFhcMbyHKCw4O3bUc1rUx6K4Vaet929iVYG/ihWeeTPv6jpngerbZq+t9tNcTQgyGJkrjZ/wRWxJy+pE/ttYBSaJ3i/wD+Ba5kuTcpcN1RAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A closeup of the matchbox picture&quot;
        title=&quot;&quot;
        src=&quot;/static/5a4a02a98b430d026faf08dd832d9879/5a190/matchbox-pixels.png&quot;
        srcset=&quot;/static/5a4a02a98b430d026faf08dd832d9879/772e8/matchbox-pixels.png 200w,
/static/5a4a02a98b430d026faf08dd832d9879/e17e5/matchbox-pixels.png 400w,
/static/5a4a02a98b430d026faf08dd832d9879/5a190/matchbox-pixels.png 800w,
/static/5a4a02a98b430d026faf08dd832d9879/c1b63/matchbox-pixels.png 1200w,
/static/5a4a02a98b430d026faf08dd832d9879/2eb79/matchbox-pixels.png 1256w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;em&gt;Look at all those pixels on the diagonal lines, yuck.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;When the iPad Pro and Pencil came out, I switched and haven’t looked back.
Even though I only use a fraction of the power of my drawing app,
I can use layers to undo errors or build up animations, I can shade, I can smudge …
I use &lt;a href=&quot;https://tayasui.com/sketches/&quot;&gt;Tayasui Sketches Pro&lt;/a&gt;.
I like it, but I haven’t evaluated it against other apps,
so it’s not exactly an expert recommendation.&lt;/p&gt;
&lt;p&gt;As an example of what the drawing app can do,
in this drawing
I used stippling to give the feathers some texture.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/401e7d5aa33b3ec11765e22c68f00135/96191/duck.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 56.49999999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAABC0lEQVR42qWS7UvCUBSH/f+/S30JK1hg4cugIovKlku0fKG5TZgjw2mjmqWTLfLlaYRGn5ZbBy4Hzj3nOed370mwho0nE/r2YJ1UEmGXi8Xi29eUCrsne7gB+Hc8EnBVNHFd9KpITsrw+jaMD5wHRZ+zOb7noTZKZE9z+L4XXfKq+4ttod9eYTZlalKB/fQBcl1jOp3Fe0OzrdIqn/HYKiMdZ9kQRJLCIVXF+FEQCej5H5hak4HR5PIoz9aOQHI7zflFcakkyoTL7OeBRU+/o1QQyaQ2yQspuh0j9GPC1yY4XaNNR1epyNcMHSf+Hq4meNDu6SgNlJsio/fR/4HOk0W7XsHu9xiP/gZ+AW8HUFYjPADiAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A duck&quot;
        title=&quot;&quot;
        src=&quot;/static/401e7d5aa33b3ec11765e22c68f00135/5a190/duck.png&quot;
        srcset=&quot;/static/401e7d5aa33b3ec11765e22c68f00135/772e8/duck.png 200w,
/static/401e7d5aa33b3ec11765e22c68f00135/e17e5/duck.png 400w,
/static/401e7d5aa33b3ec11765e22c68f00135/5a190/duck.png 800w,
/static/401e7d5aa33b3ec11765e22c68f00135/c1b63/duck.png 1200w,
/static/401e7d5aa33b3ec11765e22c68f00135/29007/duck.png 1600w,
/static/401e7d5aa33b3ec11765e22c68f00135/96191/duck.png 2176w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;em&gt;2021, a duck.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Here I used blending to try and convey depth.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/f91a10b8709b51a9c31901aa2fd4c130/ade5e/hole.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 39.49999999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAzUlEQVR42q2RPQqDYAyGe0Hv4D1cHHQTdRDEyUHEE7h4ARdxEsRBEAdHEUEc/HmKH1g6tMWWBgIhCU/eJDf+bLdPxW3b6Pueuq4ZhoE8z+m6TuT2ff8euK4rSZJgWRZBEOC6Lp7nUVWVqL+CvgVO00SWZfi+j6qqAmTbNoZh0Lbt9ZXPqUVRYJqmUKUoCpqmoes6YRgSxzFN01xXuCwLaZoSRRGO4yDLMpIkiXgcx8c5LgOPxsPneRaPOUCHsrIsH/f76cunghP8POwd8A7VVFhzOy2sXgAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A hole&quot;
        title=&quot;&quot;
        src=&quot;/static/f91a10b8709b51a9c31901aa2fd4c130/5a190/hole.png&quot;
        srcset=&quot;/static/f91a10b8709b51a9c31901aa2fd4c130/772e8/hole.png 200w,
/static/f91a10b8709b51a9c31901aa2fd4c130/e17e5/hole.png 400w,
/static/f91a10b8709b51a9c31901aa2fd4c130/5a190/hole.png 800w,
/static/f91a10b8709b51a9c31901aa2fd4c130/c1b63/hole.png 1200w,
/static/f91a10b8709b51a9c31901aa2fd4c130/29007/hole.png 1600w,
/static/f91a10b8709b51a9c31901aa2fd4c130/ade5e/hole.png 2188w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;em&gt;2021, a hole.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Tracing&lt;/h2&gt;
&lt;p&gt;How can I draw complex shapes? I cheat.
I hate to say ‘fake it ‘til you make it’, but this is basically that.
I trace.
If I’m drawing something beyond my skill (a horse, a cat, something with perspective …
well, if I’m honest, almost anything), I find a suitable photo to use as a base.
(This is something digital drawing tools make &lt;em&gt;very&lt;/em&gt; easy.)
If a single photo isn’t enough, I’ll patch a few photos together.
I’ve also used &lt;a href=&quot;https://setpose.com&quot;&gt;setpose&lt;/a&gt; for getting people-proportions right. It’s a digital version of the poseable mannequins
artists use.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 774px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/792832d0fc390eee31400a8a03189363/41d3b/sheep-in-wolfs-clothing.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 79.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAACXBIWXMAABYlAAAWJQFJUiTwAAACcUlEQVR42p2UaU9aQRSG/cv90DRp3G001mpdsEVbqUhBRVBcQNOquIALRhQR5ULc2MSAhaISleXpcF0iFm3jSU5m7uTOM+9ZZsq4tXw+X+QvtbK7SSp1RjabJRaLy+NLrCBEBmavrzFoetEPDmDUD+KXJPIPVP8PqGCBQOAGmL44xzE9xvuGGtRdCsKH+3d/Prm5lGUymRtgKpXE77Fjmx2lV6Vgft7KhtOJ5PWyt7fH8fExyWSS8/Pzf6ZDBgaPdvBuWQjtr+LfsaH83E5t1VuhuA5tIRUDOjRqFYahAZbsNq6urp4H+rzrxKNO4etkLw8wj+toeFdNQ10lbS2NtDc30qX4iK6vh36tmjXH6pPhy8BY7AS/d4GTiIOzxDZ22xg11eU0CoW11RXU11agaG2iveU9ys5WTCNGLi7SJaEyMJH4xa57jnRKEsAdQkcuqirL+a75wtTkCMpPHcLbhOpKWprqGdL3E4lEngZmMlmODt1CoYvfpx4xbtP8oRHPlhVyB2ysW0VeFXQpO+hUNIt89uBYXXkaWLCryzSn8RiBQoE8y6IA/TjXZnA5LbhdS3KYI0Ytq0uj9Kl7GTboSafTol/zRZUve9xfoeA+9oUJvql6iEZP5LVCu0xazAKixbuzgE6rwTRsYM46e7tZBJLLlQaeREOYjCocK3Zxcu5+3Ww2s7hoxbe7zKZzjVHTiDhgkNmZaQLB4L3Kv4DJZEJWsu3efLCeFwryxGNhLONa3FuixeJxfv6YovtrN6/evKZPpysGPr5eD5N9N5e8HibGTUjSrvx9Ld6AUDiM5Pch+Xxy2CWA+WcegZLXu6jKfwCBm5AClaVTXgAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A drawing of a sheep in wolf&amp;#39;s clothing&quot;
        title=&quot;&quot;
        src=&quot;/static/792832d0fc390eee31400a8a03189363/41d3b/sheep-in-wolfs-clothing.png&quot;
        srcset=&quot;/static/792832d0fc390eee31400a8a03189363/772e8/sheep-in-wolfs-clothing.png 200w,
/static/792832d0fc390eee31400a8a03189363/e17e5/sheep-in-wolfs-clothing.png 400w,
/static/792832d0fc390eee31400a8a03189363/41d3b/sheep-in-wolfs-clothing.png 774w&quot;
        sizes=&quot;(max-width: 774px) 100vw, 774px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;em&gt;A traced sheep with a freehand wolf, 2022.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I feel a bit sheepish about tracing, but who among us hasn’t copied and pasted from stack overflow?
And learned something in the process? Historically, artists were trained by copying old masters.
Many still learn by copying, a practice Austin Kleon defends in &lt;em&gt;Steal Like An Artist&lt;/em&gt;
and &lt;a href=&quot;https://austinkleon.com/2018/02/08/copying-is-how-we-learn/&quot;&gt;blog posts&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I’m not sure how many artists trace, but street artist Shepard Fairey famously traced a photo for
his &lt;a href=&quot;https://en.wikipedia.org/wiki/Barack_Obama_%22Hope%22_poster&quot;&gt;‘Hope’ Obama poster&lt;/a&gt;.
(Fairey was then famously &lt;a href=&quot;http://news.bbc.co.uk/1/hi/world/americas/7872253.stm&quot;&gt;sued by AP&lt;/a&gt;, so even when
tracing, copyright matters.)&lt;/p&gt;
&lt;p&gt;I’ve also been told that working graphic designers trace all the time.
They’re trying to do a job, so they use the tools at hand. I think the same
holds for me; I’m an engineer, and the reason I give presentations is to communicate complex technical concepts.
If tracing helps me do that more easily, I’m happy.&lt;/p&gt;
&lt;h2&gt;Postscript: Other tools&lt;/h2&gt;
&lt;p&gt;If you’re not ready to dive into a full-on tablet-and-drawing-app, there are tools available
which can create hand-drawn-style graphics. They’re opinionated, so the stylistic
options are limited, but the results are great, they’re quick, and they’re easy.
I was impressed by &lt;a href=&quot;https://excalidraw.com/&quot;&gt;Excalidraw&lt;/a&gt;, which was a recommendation from my colleagues John O’Hara, and, indirectly, Gunnar Morling.
It’s a free web page, so the barrier to entry is basically zero.
A handy thing about Excalidraw is that there are &lt;a href=&quot;https://libraries.excalidraw.com/&quot;&gt;open libraries&lt;/a&gt; of icons, with a lot of &lt;a href=&quot;https://libraries.excalidraw.com/?theme=light&amp;#x26;sort=default#maeddes-technology-logos&quot;&gt;tech icons&lt;/a&gt; available to drop in to diagrams (including Quarkus, naturally).
Perhaps even nicer, if you paste tabulated data onto the canvas, it will auto-generate cute hand-drawn-style charts.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[How to draw when you can’t draw, part i: a growth mindset story]]></title><description><![CDATA[I’ve never been particularly artistic. As a kid, like all young children, I liked drawing.
At some point, probably once I started having art…]]></description><link>http://hollycummins.com/how-to-draw-part-i/</link><guid isPermaLink="false">http://hollycummins.com/how-to-draw-part-i/</guid><pubDate>Thu, 16 Jun 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I’ve never been particularly artistic. As a kid, like all young children, I liked drawing.
At some point, probably once I started having art class in school, it became obvious to me I wasn’t very good at it.
My more talented peers were producing beautiful pictures, and clumsy me was drawing lumpy figures that only barely looked human.
Luckily, I knew the solution. I gave up.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/c92ce636448cfa0b2f0b924cf479f183/c5394/bee-1981.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 74%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAACXBIWXMAAAsTAAALEwEAmpwYAAACDUlEQVR42p2T227TQBCG80i8EY/ABRc8RXkELpGqShxEhYSUIqFIVFxASpsmddOmcUROjhOvz9717vzM2k0JKsWCXY08Xs98+894t4XGQWwRm2IzjdGtZmDOyCGIOuyLRmgD0FRG9BhkOJRe76z/N1Az6DlDH7Ed77ShAUjVfGjEbN6d4n8q2dxLoF9K/7Llb0CrTZJEThkKnn/WSveAxhhordlsn+tvLXYRMehK3WCsHCyMz3D1YK+I6mQLs/52lKWu1hmoMdEz9NUlBvIUH7MONkbcJm8T6U7Bdn37bhXKQlbPSqEttacGcMQRpPiK7/IcA3WBqXIRUwrDO0spUeQF8kxhOe8jDFxIpVFYkFVmqDZYhaT5HkioeAg5O8Sx7OJAvEG36EJQDFuV4eCyLKGUgeddIhYuNCsvyZbJspaSg257qNMUqeCrlUwRe4do5x0cbF7CKYf2SHOgBOkE2OkX7Zxt4yTInvVgOusa6EczTPIFTDACrY4wys9w4u/DN0GVuunv48fnF+wniLlNbxc55DJBuJriW3mGyF0j2+PqvqxqoJfOMBZjBNEFSr8NwT/ET075T5dVwHJ+g/a7k8rvJQJ7kzE8Z4D3o1d4cv4UH+JPCFVSKbbKW5EU8IolPO0hY1iMlLVI7l/ET1bDkaFKkVGBkATHBHDNHD19hetsiOvcxVoHSE0CRRI/AdKyirwzP+8/AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A child&amp;#39;s drawing of a bee&quot;
        title=&quot;&quot;
        src=&quot;/static/c92ce636448cfa0b2f0b924cf479f183/5a190/bee-1981.png&quot;
        srcset=&quot;/static/c92ce636448cfa0b2f0b924cf479f183/772e8/bee-1981.png 200w,
/static/c92ce636448cfa0b2f0b924cf479f183/e17e5/bee-1981.png 400w,
/static/c92ce636448cfa0b2f0b924cf479f183/5a190/bee-1981.png 800w,
/static/c92ce636448cfa0b2f0b924cf479f183/c1b63/bee-1981.png 1200w,
/static/c92ce636448cfa0b2f0b924cf479f183/c5394/bee-1981.png 1535w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;em&gt;An early effort, drawn when I was six and a half. The thing in the air is an (inexplicably large) bee.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I stopped even trying, because if I wasn’t trying, I couldn’t fail.
I never drew in my spare time, and as soon as art classes weren’t compulsory, I dropped them. Instead,
I focussed on the things I knew I was good at (science, math, English … definitely nothing that required hand-eye coordination).&lt;/p&gt;
&lt;p&gt;I didn’t even miss the drawing I wasn’t doing until a few years ago. I started doing more conference speaking, and I needed &lt;em&gt;lots of pictures&lt;/em&gt;.
It’s well known that visuals make talks more enjoyable for the audience.
Well-chosen visuals can actually make talks more effective, too – reinforcing a message
across both visual and verbal channels makes it &lt;a href=&quot;https://www.shiftelearning.com/blog/bid/350326/studies-confirm-the-power-of-visuals-in-elearning&quot;&gt;sink in more&lt;/a&gt;.
People remember visual messages better than they do verbal-only ones, a phenomenon known as the &lt;a href=&quot;https://en.wikipedia.org/wiki/Picture_superiority_effect&quot;&gt;picture superiority effect&lt;/a&gt;.
Part of the reason for this is that images seem to be a ‘native format’ for our brain’s memory, just like words (&lt;a href=&quot;https://en.wikipedia.org/wiki/Dual-coding_theory&quot;&gt;dual coding theory&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/ff3a433399e8208e1b38040c9ef1e63b/971d1/illustrated-talk.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 60.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAABjUlEQVR42pVSyU7DUAzs/38PJyQECNqUCNFAFwplCYeuWRqy74PtLKT0ADzJ8vPkeTy208MvpygKsbIsJc7zHHEcI0kS8on46h7Lt95PgiYxyzLstjvs9/vK7Mrbti3ecRw4tW/eRFF8TFhUfPQxgmGYyAmISElECtiaggV5No7KTn5NWEGB7+JlPkAUetRGKlWLskBMLaWkOKOWpG0aQVRjSZoKzoXYet02t+sl7kdDWJYlCheLBXRdF0JWwwStQiIN6E3Iqo8VVudd/8DFVR/T+ROUGxWbzVYS+YSU7AaBqKviGCmpa5bWEjYVfT+ANpthNHuENplS7MN13XZRrDKsZ5gXuajjO2N8b9S3hIZhoK+qGD8/41bTENMjnmFzUppTXs+Qk/OOqu7Y2pb5X3oYTzB9fcOlMqQF+TRLW+bJv4pJfkdFbcJM0xS8Mo4twbn1g6WslmsMVAXnyhkCmhfjXIhn1TXBxL5jtqMtr2jLg7tTXI9O4HneQSt/PQdbjpIQ9ucGXuD8m6gh/AKmfqPnPs1WvgAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A man gesturing to a screen with a picture on it&quot;
        title=&quot;&quot;
        src=&quot;/static/ff3a433399e8208e1b38040c9ef1e63b/5a190/illustrated-talk.png&quot;
        srcset=&quot;/static/ff3a433399e8208e1b38040c9ef1e63b/772e8/illustrated-talk.png 200w,
/static/ff3a433399e8208e1b38040c9ef1e63b/e17e5/illustrated-talk.png 400w,
/static/ff3a433399e8208e1b38040c9ef1e63b/5a190/illustrated-talk.png 800w,
/static/ff3a433399e8208e1b38040c9ef1e63b/c1b63/illustrated-talk.png 1200w,
/static/ff3a433399e8208e1b38040c9ef1e63b/29007/illustrated-talk.png 1600w,
/static/ff3a433399e8208e1b38040c9ef1e63b/971d1/illustrated-talk.png 1987w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;em&gt;2021. Talks work better with graphics.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Like many other presenters, I used photographs in my presentations.
But the right photograph can be hard to find, and &lt;a href=&quot;https://doctorow.medium.com/a-bug-in-early-creative-commons-licenses-has-enabled-a-new-breed-of-superpredator-5f6360713299&quot;&gt;copyright predators&lt;/a&gt; are an increasing concern.
You’re limited in what you can express with existing photos.
I tried taking my own photographs, but staging photographs is hard work.
My breaking point came when I spent hours and hours making batches of coloured fresh spaghetti
and arranging it in different configurations to illustrate classloaders, jars, coupling, testing and services
for a talk on &lt;a href=&quot;https://noti.st/holly-cummins/iNasA3/everything-i-know-about-software-i-learnt-from-spaghetti-bolognese&quot;&gt;software modularity&lt;/a&gt;. I even invested in a light tent.
The photographs were … not great. (It turns out that even though pointing a camera and pushing a button is easy, &lt;em&gt;photography&lt;/em&gt; is a skill.)&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/521d82e68d3e8d973a908dc1e073b90d/061c7/spaghetti-photo-pots.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 73.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAACXBIWXMAABYlAAAWJQFJUiTwAAAC20lEQVR42n2T2WsTURTGg76KDyJi/wDFIiKo+CC4oKJVQbRiK4gLiPrQIlhFQbSIiOKG4PbgklZ9ULFaH7UFW2xrjGmSZmmSpqadLtLUxmayN8nM/LwzoZsYD3xz7r3n3G++c+89plhCJpaUSaYTwseIC+hr8VTcQCKVMLweS6QLY1nEU5kk0XiUiPyLTDbJeGzcyDX1DQ3TavnG5/avfHO6+Gp3YHN7DN9u6+SL1UqHzW6stVm/09HZicXhxOp0Yndbcflc2D1d2L0+hsJhTAiTJAlXVxd9oRBulwuv10tvTw9ejwePIPL5/AwMDOL3++kNBpH6+3EKUn2PHte9HI3qVJhUTUNj2jQxV1XVGCtKHlUgLUdIRIZFUBExAU018iYxtU/ANDmZRoEoGRkl8iNAQ90Djles58juNdy6VE0k6EYR5waqIeRvYhN/mZafgNQ4qX4/jPZz9lg5t8/vpf56OctLF+NoeUevrYkeRwtj4YEpdZM2i1Avh4k47R/fsOnACk6eqsR8/SKvz6/FUruM2gObcTaYkQM2pI5PJCW3EJCdJWgWYV5XJ+zKtVPM2WZi556lOF495krVfspWl3KhfCO7Fs3DXHMS4iPkwyEmfo/9m7AgWyWbjtH6/hmXD22get0Srp7Yx72jFTQe3oFUfxfz1lWULpiP19IMmQiZEQmKlazkc6Tjo7Q0PqXh5mkC1Zu4f6yMMxXbsW1Zgb9kLu6VJZyrLCPkaRf/l1FEvqapxc6wEAh0f6ftwVlGdi6k23yVMzXHeVhzhK6qgzzft4WPL++J5HGU3Jh4Scn/lQyDUkgQ2okGOul+W8eAw8qw00LTi0c0Pr7Bhyd3sDW/wyduGTWGpuaKX4puadGruVwhSRVey2fEaAJNnK0yNkT25w/koIug10ouE5+UU5xw5kMvpOpdoXdIVpCnUbMy6fCgKFVhdo8VIZz5SGfeHsZ21fjqy5rGP+0PZ2IqMV6zVkgAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Coloured spaghetti divided into pots&quot;
        title=&quot;&quot;
        src=&quot;/static/521d82e68d3e8d973a908dc1e073b90d/5a190/spaghetti-photo-pots.png&quot;
        srcset=&quot;/static/521d82e68d3e8d973a908dc1e073b90d/772e8/spaghetti-photo-pots.png 200w,
/static/521d82e68d3e8d973a908dc1e073b90d/e17e5/spaghetti-photo-pots.png 400w,
/static/521d82e68d3e8d973a908dc1e073b90d/5a190/spaghetti-photo-pots.png 800w,
/static/521d82e68d3e8d973a908dc1e073b90d/c1b63/spaghetti-photo-pots.png 1200w,
/static/521d82e68d3e8d973a908dc1e073b90d/061c7/spaghetti-photo-pots.png 1216w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;em&gt;Homemade spaghetti in a homemade photograph, 2012&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I was also conscious that when I used photos, even if the photos were &lt;em&gt;good&lt;/em&gt; photos, my presentations looked exactly like everyone else’s.&lt;/p&gt;
&lt;p&gt;So ten years ago, I tried drawing my own slides. I was drawing at about the level I had when I gave up on art, in primary school.
Nonetheless, I was impressed at how flexible sketches were for communicating technical ideas:&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/981f2dd796c04f67fc68d182a99700f2/a9577/applicationservers.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 75%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAACXBIWXMAABYlAAAWJQFJUiTwAAACNklEQVR42p1Ta2/aQBDkZ1fqP6lUqVXzA/q1DU1CI0iFCA9DYiAhlMQ2JmAfYPw8r6d7F1BDXpV60mrs83h2Z2+vBNBHQFaB/AhFfsy4F0T5cZ6/HQQq39lpfWJl70ubqOhIAqIYFMZAEAILAcQp7yUsmeOfqyiKfIsHpeWa2kqAUS78nHxB5M5z8nyiuUcUxcTpQG+tPKdsq/2lxKqd7QvhP9dehfP5vHPebKLValG7Y2A0uoFp9jEYDHB9fY3JZKJ/siwL1WoVhmGg2+3qb6ZpahwOh3kURYp2UArDsFOpVDAej0lKiSRJEMcxFEFhmqRakBOjXC5jsVggTVPNS+IHLj//rXBnmU/rVcvcJkVWHI1vWt4JquYqFL6AN/fRM3oI1gFWyxWG5mBPyFt4cB0Xzp2NNXNUPc8ElWa4CWG0DFx2L1H5cYJ+z8RoOEKWprtKsEu6CTac2EMURi8LCn9JM2fGYibq1Tr6F324tqv79XRZt3e6cptxajv7guxUC7pTl2qnNbQbbZz9PEPjVwMzd4ZgFexVl6UZTg4rWIklbn/buBqMXq7QsRxqNVpo1puo1+psvcu9G2pbj5qvcSUE1kGE9N4ErW0UjwW58U3f85XFVHhC9jo9edW/kqdHp3LquFJmPEt82VWwG43WrS2F58ng/JPcXHxVe8k25+fS/fS+EzycFKkKCir0fP2+GWt8bYwoY51sybHaHxvGDxwnTPrOePgs6IW9JyGE+MYDX+PL8O4PXw9xQ832GVAAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A complex application server compared with a simple one&quot;
        title=&quot;&quot;
        src=&quot;/static/981f2dd796c04f67fc68d182a99700f2/5a190/applicationservers.png&quot;
        srcset=&quot;/static/981f2dd796c04f67fc68d182a99700f2/772e8/applicationservers.png 200w,
/static/981f2dd796c04f67fc68d182a99700f2/e17e5/applicationservers.png 400w,
/static/981f2dd796c04f67fc68d182a99700f2/5a190/applicationservers.png 800w,
/static/981f2dd796c04f67fc68d182a99700f2/c1b63/applicationservers.png 1200w,
/static/981f2dd796c04f67fc68d182a99700f2/29007/applicationservers.png 1600w,
/static/981f2dd796c04f67fc68d182a99700f2/a9577/applicationservers.png 1784w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Even with my clumsy drawings, I was also able to express emotion. And drawings lent themselves to animations which built up a story in a way photos didn’t:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/6977bbad0468d843c05bf04b9adb9a1d/alarmeddeveloper.gif&quot; alt=&quot;A developer looking alarmed when they see the clock&quot;&gt;&lt;/p&gt;
&lt;p&gt;Here’s what I’ve learned over seven years of drawing:&lt;/p&gt;
&lt;h2&gt;Difference is good&lt;/h2&gt;
&lt;p&gt;If a presentation looks exactly the same as six other presentations a conference-goer has seen that
day, it’s unlikely to be memorable. If it looks exactly the same as the presentations they were seeing
five years ago, that’s even worse.
Just yesterday, after a &lt;a href=&quot;/cloud-chaos-and-microservices-mayhem-goto-amsterdam&quot;&gt;talk&lt;/a&gt;, someone said to me “I enjoy that your slides don’t look like the others.”
There’s a lot to be said for novelty.&lt;/p&gt;
&lt;p&gt;(I should note that ‘different’ is a relative term. Other speakers, such as
Kasia Mrowca and Felienne Hermans, also do great hand-drawn slides, and I’ve learned from them.)&lt;/p&gt;
&lt;h2&gt;Competence is over-rated&lt;/h2&gt;
&lt;p&gt;Most of us naturally avoid doing things we’re bad at, especially in public.
We don’t want to be inadequate, and we don’t want to be caught out as inadequate.
But going outside our comfort zone can be good for us, and good for those around us.
For example, I find the most helpful conference talks are from people learning a topic,
because they dig into the non-obvious points and gotchas.
Similarly, new joiners to a team make a huge contribution because they spot gaps and bring fresh ideas.&lt;/p&gt;
&lt;p&gt;My artistic mediocrity may bring a similar ‘win’. When I give a talk,
people enjoy my drawings, but no one in the audience is going to be dazzled
by the artistic majesty of my creations. My illustrations serve my technical content,
because they’re so simple they &lt;em&gt;can’t&lt;/em&gt; do anything else. If, on the other hand,
Leonardo Da Vinci was trying to explain microservices anti-patterns,
people might be distracted by the Mona Lisa on the slide in the background.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/c16d07090178debe63c5c5c61262804c/260cd/squiggle.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 44.99999999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA5ElEQVR42qVSXY+CMBDs//93vOiDJhhOA0UoUKB8Fea6m/QOFBOjmxCW2d3p7FCBD2JZFn7P8/xUE58QEpHWGlmWfU9orUWeKyRJgrIsN4p3CdfFNeZxpQq0xqBtW9yuNzRNs5kTe0Pem2EYYEy3wdL0jnEcOde6dmrzfUIKaqzrhr3xg6fTmVf0oVzuCUldKlMEQeAONv+E1KCUgpTSeSMRhhccD0fEcezykHHyi9RE0c8fIakiT0kpEfZ9DzFNE6qq4gI9RVHwNxVpza7rHFYyibUT4zTz6jqJ9f6PP2Tt67vxC6uIwrmuE3rQAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A squiggle&quot;
        title=&quot;&quot;
        src=&quot;/static/c16d07090178debe63c5c5c61262804c/5a190/squiggle.png&quot;
        srcset=&quot;/static/c16d07090178debe63c5c5c61262804c/772e8/squiggle.png 200w,
/static/c16d07090178debe63c5c5c61262804c/e17e5/squiggle.png 400w,
/static/c16d07090178debe63c5c5c61262804c/5a190/squiggle.png 800w,
/static/c16d07090178debe63c5c5c61262804c/c1b63/squiggle.png 1200w,
/static/c16d07090178debe63c5c5c61262804c/29007/squiggle.png 1600w,
/static/c16d07090178debe63c5c5c61262804c/260cd/squiggle.png 1845w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;em&gt;2021. Abstract and low-skill, but still effective at communication.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;That doesn’t mean incompetence doesn’t have its downsides;
occasionally, people just end up confused. I was so pleased with a drawing I did
for &lt;a href=&quot;/cloudy-with-a-chance-of-meatballs-cloud-surprises-for-the-java-developer-keynote-javaland/&quot;&gt;a Javaland keynote&lt;/a&gt; of someone
cuddling a cloud that I put it in my email signature. I hastily took it back out after the
third person asked me why I was sharing a picture of someone holding a large loaf of bread.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 211px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/031018e16fdee8d72697e490ad58899d/4050c/cloud-bread.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAACBklEQVR42qWVy4oaURCGfa48wrzBvEIguywyq7xBIAtJFi5cN0EnwSwUEUdsxfaGiihxJoJ3bby1l7btyx+ryOnMOJ2kYwoO4vH0d/6q+qsN4GeYpoWjYcJxHPgNr7OB843DwXz0wPOHDMPgRWHbtjfQthx8jch48+o9Pr775B4WsP1+70I2mw0WiwX/PhqNvIHO6aLPUhrXVzf4IsmuOgKt12uMx2PM53Mcj0fU63U0m01UKhV0Op1nGTxJ2TJt6LtfSorFIgNodbtdyLKMVCoFVVX5jKIorkoBdoGWZfFno3qPrabj4fs9QyjK5TKCwSBfQnsEXK1WKBQKbilchYJsnJrx9vUHXL14CXWqwYGNu7sMMpkMwuEwGo0Gg4bDIZchn89zLc+77SqkxowGKh6+DU/2saAUFdxGbxGNRlmJaZqsbrlcIhKJcF29rBPw8hU1IBQKIZ1Oo1Qqccrb7RbxeJz36bsvH4oDs9kMsViMlyRJrIiKT509b8JfjS3MSsoGgwGr7fV6yGazDHzcwH8CtttttFotaJrGULqg3+//UZ0nUBze7XZIJBKcIhk5mUz6mu/fAqkJ1WrVVU0mpkm5GDidTlGr1dx98h2pvhhItSP/icjlcpcBRdCLgVSJrtJc/1fKNAnCJrquM1xMx0XAyWTyJMXD4cB7Xi9VXymf+83vX8MPA8L7Y3fWH8gAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Supposed to be someone cuddling a cloud&quot;
        title=&quot;&quot;
        src=&quot;/static/031018e16fdee8d72697e490ad58899d/4050c/cloud-bread.png&quot;
        srcset=&quot;/static/031018e16fdee8d72697e490ad58899d/772e8/cloud-bread.png 200w,
/static/031018e16fdee8d72697e490ad58899d/4050c/cloud-bread.png 211w&quot;
        sizes=&quot;(max-width: 211px) 100vw, 211px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;em&gt;Extract of my email signature, 2018. Love cloud, or love bread? You decide.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;It’s uncomfortable doing things badly, and most of us try to avoid it.
But sometimes doing something badly is better than not doing it at all.
And doing it badly is how we learn, which is how we get better.&lt;/p&gt;
&lt;h2&gt;Practice&lt;/h2&gt;
&lt;p&gt;In the IBM Garage, we used to tell a story about a university pottery class which was divided
into two groups. Half were asked to produce a single pot, and graded on the quality of that pot.
The other were graded by pottery weight; the more pots they produced, the higher the grade.
It’s obvious that this is a terrible way of grading work; what’s less obvious is
that the by-weight group ended up producing work of a higher quality!&lt;/p&gt;
&lt;p&gt;How can incentivising quantity possibly create quality? And is the story even true? Austin Kleon
&lt;a href=&quot;https://austinkleon.com/2020/12/10/quantity-leads-to-quality-the-origin-of-a-parable/&quot;&gt;looked into&lt;/a&gt; the pottery-grading facts.
The story turns out to be mostly-true, but the original medium was photography. Rewarding
quantity created the conditions necessary for students to get lots of practice, which gave
better end results. The other group focussed on trying to get the one-perfect-shot learned less and
so didn’t actually get the perfect shot.
For a lived example, Amy Iskioff Newell wrote a wonderful blog exploring how taking 33,000 selfies in the pandemic
&lt;a href=&quot;https://www.amywriteswords.com/p/6-i-took-33000-selfies?s=r&quot;&gt;grew her photography skills&lt;/a&gt;.
No matter what the form, the underlying – verifiable – lesson is that the more we do something,
the better we get.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/17e7564eb283569e7550572a94355de3/2bf90/cv-driven-development.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 49%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAABYlAAAWJQFJUiTwAAABG0lEQVR42q1S146EMAzk/z+Kv6CDQBRRRe/Np/EpLMvuy0lnyQQ5znhmEon+EOd5cq7rSsdxfO2R8MHmvu+84oBY70BibduWgiCgvu/f9t4A8zwn27bJ8zxyXZdUVaU0TUkME1mWJRVFwXthGNK2bZ8MUcyyjKeiGWGaJsVxfAGCRV3XXPN9nyzLommauAbGUHcBdl3HDGVZJl3XGdwwjMsjsaJP0zRW4jgOJUlCURTROI68B3D0SlVVMYNlWQj/kIvpd/+EZDBEQomiKEwEAYawgQFBWQSaIf15EfcbxWWgr2mayw4Az/P8KxmeYBp8g2QY/wQUHoka5OECoQhsh2F4eYg3BYmQjHy+L/H27oEBYAhWOP/xbP4zfgCboQiDW3K35QAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Two CVs&quot;
        title=&quot;&quot;
        src=&quot;/static/17e7564eb283569e7550572a94355de3/5a190/cv-driven-development.png&quot;
        srcset=&quot;/static/17e7564eb283569e7550572a94355de3/772e8/cv-driven-development.png 200w,
/static/17e7564eb283569e7550572a94355de3/e17e5/cv-driven-development.png 400w,
/static/17e7564eb283569e7550572a94355de3/5a190/cv-driven-development.png 800w,
/static/17e7564eb283569e7550572a94355de3/c1b63/cv-driven-development.png 1200w,
/static/17e7564eb283569e7550572a94355de3/29007/cv-driven-development.png 1600w,
/static/17e7564eb283569e7550572a94355de3/2bf90/cv-driven-development.png 2592w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;em&gt;2018, CV-driven development as a driver for container adoption. The image on the
left was my first attempt, but I tried again and got the image on the right. I think it’s much better.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;“Practice improves us” is pretty obvious, but we’re not very good at believing it.
Many of us tend to think that our aptitudes are inborn and our blind spots are innate.
This is no doubt partly true, but not entirely true. How true is ‘partly true’?
For practical purposes, it doesn’t actually &lt;em&gt;matter&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;What matters is how elastic we &lt;em&gt;perceive&lt;/em&gt; our abilities to be.
And that matters a lot, like “near-instantaneously changing test scores matters”.
A one-hour lecture on how the brain is like a muscle and our abilities aren’t fixed significantly improves
teen’s academic results &lt;a href=&quot;http://web.stanford.edu/~paunesku/articles/paunesku_2015.pdf&quot;&gt;over a whole school term&lt;/a&gt;.
How significant?
&lt;a href=&quot;https://www.nature.com/articles/s41586-019-1466-y&quot;&gt;One model&lt;/a&gt; estimates the effect is comparable to the
difference between an average and good teacher for a whole year.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/46aad46bae018601fe8cc638b4496c2b/49853/elastic.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 37.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsTAAALEwEAmpwYAAABKUlEQVR42oWSwU7CQBCGeXI9edGTJ1/Ao9GoHESC8WJAQqpUCLRSiIaSAqEVC+222/azlGA0lDDJ7E5mM9/s/rMFcixJkn97viXZ+crjOP7NFthjoYwQQUAYCGTgEfpuFkc7em0BpZTYts1yMWfQVei1qhitGq9PRRrlc9TiCd3rA0y1xGLp0el0UBQFx3HygVF6fcexUesP9PU3JtaI6XSC7ws2CiTSo127Y2SamOYITdNwXTcPmGqSrl/2FO3yEFu9QTgmBN+ESxvH6mP1m3yqFdTnCr2eQRRF+U/eDGA8tqg3FKKZgVE+pX17zMvVEWrpjPfqBR/NewbNR+YzC1+ITKK/9VtAXdcZDodrPdOcjFcyJKmTxfGeIW5pKIRYw7MGyY7vshv7A4REZdhqAOJ2AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;An elastic&quot;
        title=&quot;&quot;
        src=&quot;/static/46aad46bae018601fe8cc638b4496c2b/5a190/elastic.png&quot;
        srcset=&quot;/static/46aad46bae018601fe8cc638b4496c2b/772e8/elastic.png 200w,
/static/46aad46bae018601fe8cc638b4496c2b/e17e5/elastic.png 400w,
/static/46aad46bae018601fe8cc638b4496c2b/5a190/elastic.png 800w,
/static/46aad46bae018601fe8cc638b4496c2b/c1b63/elastic.png 1200w,
/static/46aad46bae018601fe8cc638b4496c2b/29007/elastic.png 1600w,
/static/46aad46bae018601fe8cc638b4496c2b/49853/elastic.png 2224w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;em&gt;I often need to illustrate elasticity. This is my best attempt so far, but it’s … not great. I’m sure I can do better.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Just as the right statement can improve results, the wrong statement can worsen results.
Telling a child something about the abilities of their group &lt;a href=&quot;https://cpb-us-w2.wpmucdn.com/voices.uchicago.edu/dist/8/1250/files/2018/07/Park-et-al-2016-How-do-generic-statements-impact-performance-wpt42c.pdf&quot;&gt;hinders their
performance&lt;/a&gt; on challenging tasks. For example,
telling a girl “boys do well at this puzzle” just before asking her to do the puzzle makes her do badly at the puzzle.
That’s not totally surprising, since it’s well-known that confidence affects performance.
What’s more surprising is that if you repeat the experiment and tell a &lt;em&gt;boy&lt;/em&gt; “boys do well at this puzzle,”
he’ll &lt;em&gt;also&lt;/em&gt; do worse. The way to undo the effect is to provide an explanation, and say something like “boys do well at this task because they try hard.”&lt;/p&gt;
&lt;p&gt;Linda Rising has several other examples in her &lt;a href=&quot;https://www.youtube.com/watch?v=SMvVJwwMn5A&quot;&gt;‘Agile Brain’ lecture&lt;/a&gt;,
which is where I first heard about growth mindsets&lt;sup id=&quot;fnref-1&quot;&gt;&lt;a href=&quot;#fn-1&quot; class=&quot;footnote-ref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. &lt;a href=&quot;https://dci.stanford.edu/wp-content/uploads/2018/03/mindset-chap-1-3.pdf&quot;&gt;Carol Dweck&lt;/a&gt;, who pioneered growth mindset &lt;a href=&quot;https://cpb-us-w2.wpmucdn.com/web.sas.upenn.edu/dist/b/398/files/2019/04/1998-04530-003-1sagefw.pdf&quot;&gt;research&lt;/a&gt;, suggests thinking
in terms of “yet”. “I’m not good at drawing … yet.”&lt;/p&gt;
&lt;p&gt;If we think our abilities are fixed, when something gets hard,
we decide we must not be good at it. We stop trying. Instead of seeing failure as a useful part of the learning process,
we treat it as a terminal indictment of our abilities and potential. In fact,
if we think our abilities are innate, we don’t &lt;a href=&quot;https://www.youtube.com/watch?v=hiiEeMN7vbQ&quot;&gt;try as much&lt;/a&gt; even when
we seem to be doing well. This hurts us, because effort and practice are (duh) important for improvement.
As Amy Iskioff Newell &lt;a href=&quot;https://www.amywriteswords.com/p/6-i-took-33000-selfies?s=r&quot;&gt;says&lt;/a&gt;,&lt;/p&gt;
&lt;p&gt;&lt;em&gt;“You can get better at anything if you practice a lot, even if you don’t have much of a plan for how to get better, even if you don’t set any goals, take any classes, read a single book or watch a single video on even the most basic topics.”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Looking at the difference between my 2015 drawings and what I’m doing now, I can
see how much practice has helped.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/7413ced08fdd2820efe1aa858af624b7/e4d4a/burger-2021.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 81.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAACXBIWXMAAAsTAAALEwEAmpwYAAACpUlEQVR42pWUa1PaUBCG/f9/oP3Si/ZirUpRRJpwkXAnEkCQFAh3QSJSVFqFjsLT1dYO2jidnpmdnOw5efbdk92zhMOYz+fMZjPmYvLycE18d2uP/PdjyQm2uPlmNufyasLVrU2mOGOeAN6DptMfdNpNWpZJyYhTziWp5BIyj1HK63Q7LSaTyYNvnlR4YtuUMlFKCR+lmIf8notGRqGZDWImvFR1hVJSwRT4id3/C7q06LiNnI8rWOldqskdStEtjs0ER2aaYS1DK7/HoKpzau3TLWrkYgpXl5cPoH8UXl/f0KoU6JsxrJSXcmyLVuYz/S8pvtodBjWDTi7AoJK6gzcMP5W0it1tOwPH4290aybnrTyNfYWG7qNlqHQLGnZZp3cY4/gwIgGSElRUi3/ULFArpri4OP8DvQOejUbUCmH61TjDtsm4a4oKQ9RIqpLesLbPafV2LumKurN2kW+9L1jZMEZEjqV39BA4vrjAzKcIe1fxud6QCnmwchpfWwcM6jn6loFdNSRghl5ln7Yo1UMudl2rqF4P52cLCu9zzxcLeN2bfHz5jLXXz9lZX0bzrdE88HHakHQrEY7Le/JDgqTUFdwfVvi8uYqmeBgMBgvA36WqpaO4RVkyEsK7/h7321dsrrwg4NmgI6nz3WI+rnOQUPn0bpndtbf4tzfZDnhoP07511++xqyW2dEUlrfeEY6FCCjbeD6tsbvlEtAOR3KGh+UiaSn2YMTPRtBNNJPkRirEsbBnNzPqzbps9qJno0TF1KQfPZdCDakEpeDVbIB43I8/6iOgh6UdJ85l87v57pT2GhZVQ6OejdDIiWUCdA40TN1PKe2nmY8z6rcd28/5cpDnZDplcGJj9zocdxr0xYZ2j9HwVNZ+LEj4x23j1PD/M34CfNCXjoTzewMAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A drawing of a burger&quot;
        title=&quot;&quot;
        src=&quot;/static/7413ced08fdd2820efe1aa858af624b7/5a190/burger-2021.png&quot;
        srcset=&quot;/static/7413ced08fdd2820efe1aa858af624b7/772e8/burger-2021.png 200w,
/static/7413ced08fdd2820efe1aa858af624b7/e17e5/burger-2021.png 400w,
/static/7413ced08fdd2820efe1aa858af624b7/5a190/burger-2021.png 800w,
/static/7413ced08fdd2820efe1aa858af624b7/c1b63/burger-2021.png 1200w,
/static/7413ced08fdd2820efe1aa858af624b7/29007/burger-2021.png 1600w,
/static/7413ced08fdd2820efe1aa858af624b7/e4d4a/burger-2021.png 2198w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;em&gt;Burger, 2021. I have more confidence with reflection and shading than in my earlier pictures.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Have I got a perfect growth mindset? Of &lt;a href=&quot;https://www.theatlantic.com/education/archive/2016/12/how-praise-became-a-consolation-prize/510845/&quot;&gt;course not.&lt;/a&gt;
While writing this blog, I happened
to see some of &lt;a href=&quot;https://twitter.com/malwareunicorn&quot;&gt;@MalwareUnicorn&lt;/a&gt;’s &lt;a href=&quot;https://twitter.com/malwareunicorn/status/1533875714545422336?s=20&amp;#x26;t=hN9GH4SBoaLzSGQOZQ5ndw&quot;&gt;drawings&lt;/a&gt; on twitter, and I got totally discouraged.
How can I have the nerve to draw in public, and then brazenly write about my drawings as if I’m an expert, when there are people
who draw so so so much better than me? In fact, should I even be allowed to draw at all? Even Amanda’s
&lt;a href=&quot;https://twitter.com/malwareunicorn/status/1537130415533588480?s=20&amp;#x26;t=hN9GH4SBoaLzSGQOZQ5ndw&quot;&gt;casual doodles&lt;/a&gt; are better than my best ‘after’ picture,
&lt;em&gt;and&lt;/em&gt; I have to &lt;a href=&quot;/how-to-draw-part-ii/&quot;&gt;cheat&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I will never ever draw
that well, growth mindset or not, practice or not. But I’ll keep trying.
Another finding of Carol Dweck’s is that, after a disappointing result, students with a fixed mindset tended to seek out
work from others who’d &lt;a href=&quot;https://www.youtube.com/watch?v=hiiEeMN7vbQ&quot;&gt;done worse&lt;/a&gt;, so they could feel better about themselves.
Those with a
growth mindset wanted to look at what people who scored higher produced, so they could &lt;em&gt;get&lt;/em&gt; better.
So, yeah. I’m never going to be a &lt;a href=&quot;https://twitter.com/malwareunicorn/status/1519434606214148096?s=20&amp;#x26;t=hN9GH4SBoaLzSGQOZQ5ndw&quot;&gt;@MalwareUnicorn&lt;/a&gt;.
But I’ll keep scribbling, and see where I get to.&lt;/p&gt;
&lt;p&gt;In &lt;a href=&quot;/how-to-draw-part-ii/&quot;&gt;part ii&lt;/a&gt;, I discuss some of the mechanics behind my drawing, including the (sssh) cheating.&lt;/p&gt;
&lt;div class=&quot;footnotes&quot;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&quot;fn-1&quot;&gt;Like a lot of widely-reported psychological research, ‘growth mindset’ has a bit of &lt;a href=&quot;https://www.vox.com/future-perfect/21504366/science-replication-crisis-peer-review-statistics&quot;&gt;replication crisis&lt;/a&gt;. I found this essay nuanced and informative: &lt;a href=&quot;https://improvingteaching.co.uk/2022/03/06/is-growth-mindset-real-new-evidence-new-conclusions/&quot;&gt;Is Growth Mindset Real?&lt;/a&gt;. The conclusion is that there isn’t much correlation between self-reported growth mindset and academic results. However, teaching people they can try hard and grow their abilities &lt;em&gt;does&lt;/em&gt; lead to improved results. So it’s not great as a predictor, but it’s excellent as an intervention.&lt;a href=&quot;#fnref-1&quot; class=&quot;footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</content:encoded></item><item><title><![CDATA[Why you're missing out if you're not making Quarkus extensions]]></title><description><![CDATA[Do I need an extension? And how do I write it? Extensions are a great way of enabling your favourite library to fully take advantage of…]]></description><link>http://hollycummins.com/why-youre-missing-out-quarkus-extensions/</link><guid isPermaLink="false">http://hollycummins.com/why-youre-missing-out-quarkus-extensions/</guid><pubDate>Tue, 07 Jun 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Do I need an extension? And how do I write it?&lt;/p&gt;
&lt;p&gt;Extensions are a great way of enabling your favourite library to fully take advantage of Quarkus’s capabilities. They
can also be used to improve your team’s everyday workflow.&lt;/p&gt;
&lt;p&gt;In this talk Georgios and Holly will talk through how extensions can be useful, before live-coding a simple extension. (
What it does is a surprise!)&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Why You Can't Buy Cloud Native]]></title><description><![CDATA[The virtual shelves are filled to bursting with cloud native technologies; containers, runtimes, CI pipelines, observability tools. The more…]]></description><link>http://hollycummins.com/why-you-cant-buy-cloud-native-jnation/</link><guid isPermaLink="false">http://hollycummins.com/why-you-cant-buy-cloud-native-jnation/</guid><pubDate>Tue, 07 Jun 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The virtual shelves are filled to bursting with cloud native technologies; containers, runtimes, CI pipelines, observability tools. The more an organisation buys, the more cloud native it is, right? And the more network communication an app involves, the more cloud native it is, right? Well, not so much. It turns out cloud native is about how you deliver software, not the tools you use. This talk explains these often-overlooked elements for cloud native success:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Figuring out what problem we’re trying to solve&lt;/li&gt;
&lt;li&gt;Releasing&lt;/li&gt;
&lt;li&gt;Testing, but not the way you’re used to&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title><![CDATA[Innovation Anti-patterns: Bonkers Beans and Magic Numbers]]></title><description><![CDATA[The innovation fizzle, the fauxnnovation, the maximal viable product. Holly’s seen them all.
In a world where there’s always too much to do…]]></description><link>http://hollycummins.com/innovation-anti-patterns-craftconf/</link><guid isPermaLink="false">http://hollycummins.com/innovation-anti-patterns-craftconf/</guid><pubDate>Fri, 03 Jun 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The innovation fizzle, the fauxnnovation, the maximal viable product. Holly’s seen them all.
In a world where there’s always too much to do and too little time, how can organisations make time to innovate?
(Spoiler: siloes probably aren’t the answer.)
A presentation on practical innovation strategy, exploring how to design an MVP, how to get something for nothing, and psychological safety.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Why You Can't Buy Cloud Native]]></title><description><![CDATA[The virtual shelves are filled to bursting with cloud native technologies; containers, runtimes, CI pipelines, observability tools. The more…]]></description><link>http://hollycummins.com/why-you-cant-buy-cloud-native-codecamp/</link><guid isPermaLink="false">http://hollycummins.com/why-you-cant-buy-cloud-native-codecamp/</guid><pubDate>Thu, 19 May 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The virtual shelves are filled to bursting with cloud native technologies; containers, runtimes, CI pipelines, observability tools. The more an organisation buys, the more cloud native it is, right? And the more network communication an app involves, the more cloud native it is, right? Well, not so much. It turns out cloud native is about how you deliver software, not the tools you use. This talk explains these often-overlooked elements for cloud native success:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Figuring out what problem we’re trying to solve&lt;/li&gt;
&lt;li&gt;Releasing&lt;/li&gt;
&lt;li&gt;Testing, but not the way you’re used to&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title><![CDATA[Tradeoffs, Bad Science, and Polar Bears – The World of Java Optimisation]]></title><description><![CDATA[Welcome to the Java optimisation jungle. Why can’t we “just make it go faster”? It turns out, in most cases, we need to first work out…]]></description><link>http://hollycummins.com/tradeoffs-bad-science-and-polar-bears-the-world-of-java-optimisation-devoxx/</link><guid isPermaLink="false">http://hollycummins.com/tradeoffs-bad-science-and-polar-bears-the-world-of-java-optimisation-devoxx/</guid><pubDate>Fri, 13 May 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Welcome to the Java optimisation jungle. Why can’t we “just make it go faster”? It turns out, in most cases, we need to first work out “faster for whom?” and “why do we want to go faster?” and “what even &lt;em&gt;is&lt;/em&gt; faster?” This talk introduces the basic principles of optimisation, before bouncing through the pitfalls of optimisation; why the exact same techniques which make Quarkus rocket-fast used to be a terrible idea fifteen years ago, why fast benchmarks make for slow programs, and why even though it can be easy to get wrong, optimisation really really matters. Along the way we’ll talk about measuring things, bad advice, garbage collection, and climate change.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Present and Future of the Microservice Architecture ]]></title><description><![CDATA[The panelists reflect on various microservices topics.]]></description><link>http://hollycummins.com/present-future-microservices-architecture/</link><guid isPermaLink="false">http://hollycummins.com/present-future-microservices-architecture/</guid><pubDate>Fri, 13 May 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The panelists reflect on various microservices topics.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The Future of Java]]></title><link>http://hollycummins.com/the-future-of-java-devoxx-uk/</link><guid isPermaLink="false">http://hollycummins.com/the-future-of-java-devoxx-uk/</guid><pubDate>Wed, 11 May 2022 00:00:00 GMT</pubDate><content:encoded></content:encoded></item><item><title><![CDATA[Seven Ways to Fail at Microservices with Holly Cummins ]]></title><description><![CDATA[Implementing microservices is really challenging, and there are many ways to fail. Holly Cummins has identified seven ways to fail at…]]></description><link>http://hollycummins.com/seven-ways-failing-microservices-podcast/</link><guid isPermaLink="false">http://hollycummins.com/seven-ways-failing-microservices-podcast/</guid><pubDate>Tue, 10 May 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Implementing microservices is really challenging, and there are many ways to fail. Holly Cummins has identified seven ways to fail at microservices and how they can be avoided.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[SRE: The Good, The Bad, and the Ouch]]></title><description><![CDATA[SRE sounds like a plan with no drawbacks … but making it work in practice can be trickier than the theory says. This talk shares stories of…]]></description><link>http://hollycummins.com/sre-the-good-the-bad-and-the-ouch-wtf/</link><guid isPermaLink="false">http://hollycummins.com/sre-the-good-the-bad-and-the-ouch-wtf/</guid><pubDate>Thu, 28 Apr 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;SRE sounds like a plan with no drawbacks … but making it work in practice can be trickier than the theory says. This talk shares stories of SRE wins and SRE accidents.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Could new software tools make anyone a programmer?]]></title><description><![CDATA[The development of low-code and no-code systems makes it far easier to create new software, with benefits for both amateurs and…]]></description><link>http://hollycummins.com/software-tools-programmers/</link><guid isPermaLink="false">http://hollycummins.com/software-tools-programmers/</guid><pubDate>Thu, 28 Apr 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The development of low-code and no-code systems makes it far easier to create new software, with benefits for both amateurs and professionals&lt;/p&gt;</content:encoded></item><item><title><![CDATA[No title]]></title><description><![CDATA[Welcome to the Java optimisation jungle. Why can’t we “just make it go faster”? It turns out, in most cases, we need to first work out…]]></description><link>http://hollycummins.com/tradeoffs-bad-science-and-polar-bears-the-world-of-java-optimisation-codecamp/</link><guid isPermaLink="false">http://hollycummins.com/tradeoffs-bad-science-and-polar-bears-the-world-of-java-optimisation-codecamp/</guid><pubDate>Thu, 14 Apr 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Welcome to the Java optimisation jungle. Why can’t we “just make it go faster”? It turns out, in most cases, we need to first work out “faster for whom?” and “why do we want to go faster?” and “what even &lt;em&gt;is&lt;/em&gt; faster?” This talk introduces the basic principles of optimisation, before bouncing through the pitfalls of optimisation; why the exact same techniques which make Quarkus rocket-fast used to be a terrible idea fifteen years ago, why fast benchmarks make for slow programs, and why even though it can be easy to get wrong, optimisation really really matters. Along the way we’ll talk about measuring things, bad advice, garbage collection, and climate change.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[A Farewell to IBMs]]></title><description><![CDATA[Twenty one years ago I was heading into the Hampshire countryside for a job interview. I was a
little graduate student, exploring…]]></description><link>http://hollycummins.com/leaving-ibm/</link><guid isPermaLink="false">http://hollycummins.com/leaving-ibm/</guid><pubDate>Fri, 25 Mar 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/022d7ba1090b0aca0da8b4b597901c47/5a190/hursley-daffodils.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 75%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEIElEQVR42m2RfVDTdRzH93//Wl75QCLhDOdkIucDyMMGYww2UNgP2QMDNpD9tgaxIYMNxhwPThDlSRFILIWOLvOhs6zTS0/rD8vqys46vU67vIzyytRQ1Fc//+979/5+//l+X5/3+/2V8T/r4fwz7jyY59rsAy5d/52ps18zfe4bjl38nomZ04S7ezCZjOjzs9DmbsJqN+MORDF72pDNSg8fPH6GxOCpBHsinY+k7e7Dea7P3uerG3e4dPUXPv/hFhe/+5nD739IMNyBzW6htKwYdVYqudpMqhxV1Pt8yL789R4//jnHH3NP+esx/PPkOfQZ/0r02fuP+O3eHDfv3ufG7Vmu/HSTDz4+S3u0E2edA3e9iLFIS0bWRmq3VxPpkBxeuzvHrXvz3JRon352nunpab69/TcXrlzlo3PnOXJonJMnTvDO+ChnL37BzPHjhKMRhBItLt+bmO12cnM3Y7WVYSjIRGZ3Odne6GXn3kHGRvcx0N9Dz+5ddMWixPbEGDuwj9HhPnbFumhrb8LrrsIjVlJSmI7L48RcYSVtkwKVcinJq5cgW5G0iAUvvUCeTsu7EyMcnx4nukNEKMvGK1ZxcvqQpEm6QjuwmHU4rYXsDDTgdVqIdUepclaTkZ7MysSXSUxYjCxBuYzVioWIdQUMD/dy7Ngge/Z52VaRzciQyMzRYU69N0Ek5Eew6gn57UwMBRnpayTW45e6tKDLU5G24VVyslcgM9pT8bQIRPsrCPZW4w6b8UWK2X1gB+NTzbwRKqOt00agVUezpJaIkZH9lQRCeupbjbR1V1JZl4PGpKTUsQGZJ1pGQ9SC2G6mSMwkerCdjqFGvO1WQnsbKPcWYKvXEup1UuHR4G7REY0JlNRoCHaV0DtQgSdQiKNBT2SgCdnoVIiagJHAbhcDkxEuXR7nwuVJwntddOyxUtsqUFSbx/DhLlq7axk6WIfDoyQQzmZsfz6+5vXoreuwe40cPTmGzBWporhOjaVBR8POao6+vZXB/dso95vYXL6WyEgLo0fCVHrzKJGiOXwGxIgo1WQg1i/gD5lILUySpKTArkGWukXBGkMCTTE33g4LhpocbH4DWts6NgsqHH4jnX0OnP5iNpQq6HurkzNnegn2NGIT1ajLUkkrSkK9RU7iJumXc8wppBjl5Dsz0NdkUSgBPWE7zoAJMSg5FbXS5HQyTGvRSI4dzVuZOdXP1Ew3gnR/WfoSVJrlqLLiWJ4qATOEtTx3Kc9fhDxvISlbV5EuTc3cpsLi1lHXtAWDIxNVoVzqMps0YRU9Y0FOf7ILX9iCUidnRUYc8sx4liheRJZvTSPPtpH1pWtIUC+Q4r9GSpEcZUE8SvUrJGvjSCleSXJBIkm6OBT5SxHq9VICC4LLSEL6QhS6eF7XxLM4aQH/AQ1ezSXgSNkCAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Hursley house with daffodils&quot;
        title=&quot;&quot;
        src=&quot;/static/022d7ba1090b0aca0da8b4b597901c47/5a190/hursley-daffodils.png&quot;
        srcset=&quot;/static/022d7ba1090b0aca0da8b4b597901c47/772e8/hursley-daffodils.png 200w,
/static/022d7ba1090b0aca0da8b4b597901c47/e17e5/hursley-daffodils.png 400w,
/static/022d7ba1090b0aca0da8b4b597901c47/5a190/hursley-daffodils.png 800w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Twenty one years ago I was heading into the Hampshire countryside for a job interview. I was a
little graduate student, exploring possibilities in the world of work. I’d met folks from IBM Research at some academic conferences, and they were working on interesting things, seemed well-fed and happy, and had entertaining stories about &lt;a href=&quot;https://www.straightdope.com/21343676/has-ibm-discovered-a-way-to-teleport-objects&quot;&gt;goulash-based work mishaps&lt;/a&gt;. I didn’t have a computer science degree, but computers seemed fun, and IBM seemed like a good place to do computers. When I arrived at IBM Hursley, the first thing I saw was sheep on the front lawn. I was smitten.&lt;/p&gt;
&lt;h4&gt;The sheep:&lt;/h4&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/621375b6d72048c6329dcb17acbb57bf/ba50a/sheep.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 75%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEJElEQVR42h2T608TVhjG+6fsy5Ilm8uc2cx0Y6iZy2BjE5UBmZdwEQYORBQqlNoiChSkpMqlUlGgo4CXFqEthUKhtLAWubQDgZYWihMEBTfJptmX30724UlO3pP3Oe/7e3IkvpH7BLx9LHr6WJocJDwzzIrfybzHTsDnwe8yE5p2EPY5Rd3FyqxLnIVmJ9gM+3HZjHiHrazOuVmaciBp1eQz+ECDs+eWaDbxu9vEnNvIzHgv484hNp+tshGZIzgtHpjuJzBpY2yoB5n8KsUlZURHfYle18jrjVXWw7NI7A8aeDJuFhNa8Dk78dhbGLXoMGrL6WpQsf38KdvrESYH23ky0cNITwuz0zN0Nmr44L13+erAPjp1aszG+0QCwjD8eJTlx252IgGe+kdxW7XMuAy0q6VYDHfZ+esVa+Eg66FFQrNOOm6ruHNDxb872zRpS1BX/4yjv5lzacdoqChBEvF7cT7U47ObiMyM4XH2oqu7zqjDQjgUZHk5xMrKElsvN3n75g2zPjdjIwbebK0TmHFj7Kri+vXTnMs4Qm56HJIXQT+2di3leacw6aoZtbZzqbCQWrUa1+gI99rv0N3VRn93B0+X5oXpPwwNWLH1mgSCcTZFzdB6DaU8FYWQZLirCateQ+mZGB4Ibut/CGav/uRmbRVns7KxmK14fvPiGOjnob6ZPlMHSlkhnW0tDFm68TrsuAfaqddk0aDJQ3Lup1jqFdmo8pIE7Gk2tl6z/vw5nYY2bjVo8c0G2Hi5w/b2a+7p9dRXyPAMm3EN9NCsqcJl7RbTNqJtyqXt9gUkOUlRaC6l0t5Ywdx8gGBoicWlRUzGhwza+vH753m2usarF1sE/VMszz1m3P4IRd4ZpFkpIkQTeoOci6WxqFQnkeQmRqEuysBoaMY7MclCYIGp6Sn0bW04HE4CwQjLoQhv/37LysIcz8IL9HY1czHzGwqyv0dbKcdw97JI+xR1tRlI8jMPicuDdHW0Muxw4JnwYjb3cEUho9fST0eniTsNTaxFIqyJtMNPfNi6m1BKf+BacTJVRb9wT6dAW51G602x8qXMKBTSeFrv6oSpAavN+j+/nKx0pAUXKJLKyTqdyrBZrFZfxcSQmTH7fXIzo5Hnn6CuUkqd6gyq0mRqy9KRpJ7YTcH5OGpUZULXMPzagrqylMT4WPbv3cPRuO9EczppSfHIc1LwO63inw+hLE6iQp5CRUky6vKT1FdnIpcfQ3Lo23c4nriHy9IcyktlgkMlReezOBpzkMPR+9j/yUfs3f0+MVGfUl2YSV/rDTwWPXU16cLwuFAiypIElIqjlF8VoSQc20VszIeczUimTFZA5ZUS8rNTOHL4Cw7s28NnH+8ieu9ufvz6c4pS42m+ms+jlhpk+UeoUCRQdiWR4oI4lJcTqClP4z9GQmC6jks7pAAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A photo of sheep&quot;
        title=&quot;&quot;
        src=&quot;/static/621375b6d72048c6329dcb17acbb57bf/5a190/sheep.png&quot;
        srcset=&quot;/static/621375b6d72048c6329dcb17acbb57bf/772e8/sheep.png 200w,
/static/621375b6d72048c6329dcb17acbb57bf/e17e5/sheep.png 400w,
/static/621375b6d72048c6329dcb17acbb57bf/5a190/sheep.png 800w,
/static/621375b6d72048c6329dcb17acbb57bf/c1b63/sheep.png 1200w,
/static/621375b6d72048c6329dcb17acbb57bf/29007/sheep.png 1600w,
/static/621375b6d72048c6329dcb17acbb57bf/ba50a/sheep.png 3692w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Photo by Sam Carter on Unsplash … and if, like me, you adore sheep, go read &lt;a href=&quot;https://www.theglobeandmail.com/opinion/article-power-to-the-sheeple-why-being-called-a-sheep-should-really-be-seen-as/&quot;&gt;this amazing article about sheep.&lt;/a&gt;&lt;/em&gt;
￼&lt;/p&gt;
&lt;h4&gt;Me:&lt;/h4&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 245px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/fea4d498ec167972698662b0fce97218/a0fb2/holly-oxford.jpg&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 81%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAQABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAMEBf/EABQBAQAAAAAAAAAAAAAAAAAAAAP/2gAMAwEAAhADEAAAAaksyjQIxD//xAAbEAACAwADAAAAAAAAAAAAAAABAgADEhMUIf/aAAgBAQABBQLh9Cln7DTbS65gcMZ//8QAFhEBAQEAAAAAAAAAAAAAAAAAAAIR/9oACAEDAQE/Aaa//8QAFhEAAwAAAAAAAAAAAAAAAAAAAQIQ/9oACAECAQE/AVE//8QAHRAAAgIBBQAAAAAAAAAAAAAAAAECIRARMTJBUf/aAAgBAQAGPwLexx87OQ3RpF1j/8QAGhAAAwEAAwAAAAAAAAAAAAAAAREhADFhgf/aAAgBAQABPyFXFYEIXVzlkiFJntQkXShK4WJ+7//aAAwDAQACAAMAAAAQgA//xAAYEQADAQEAAAAAAAAAAAAAAAAAARExgf/aAAgBAwEBPxBotXCD/8QAGBEAAwEBAAAAAAAAAAAAAAAAAAERIVH/2gAIAQIBAT8QZdRH0//EABsQAQEAAwEBAQAAAAAAAAAAAAERADFBIWFx/9oACAEBAAE/EB+QCgEUpTPNRlGx5+4iM2gEJhMIJG0wWsFTY3fxwGQHs+5//9k=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Holly with pink hair at a computer&quot;
        title=&quot;&quot;
        src=&quot;/static/fea4d498ec167972698662b0fce97218/a0fb2/holly-oxford.jpg&quot;
        srcset=&quot;/static/fea4d498ec167972698662b0fce97218/e07e9/holly-oxford.jpg 200w,
/static/fea4d498ec167972698662b0fce97218/a0fb2/holly-oxford.jpg 245w&quot;
        sizes=&quot;(max-width: 245px) 100vw, 245px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
￼
&lt;em&gt;This is me &lt;a href=&quot;http://pubsapp.acs.org/cen/coverstory/7845/7845scit.html?&quot;&gt;looking serious&lt;/a&gt; and doing important quantum computing research for my doctorate.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I had facial piercings and pink hair, so it’s safe to say I didn’t look like most of the other candidates. I didn’t mind being different, but I didn’t want to look like I hadn’t made an effort. I wore a wool trouser suit I’d sewn myself, and I smartened up my pink hair with a fresh coat of dye. ‘Coat’ is an accurate word, because non-standard dyes don’t always stick very well. The IBM interview was a two day process, with an overnight stay in between. To my complete horror, in the morning of the second day of the interview I discovered that I’d stained all the pillowcases and towels fuschia. Realistically, IBM HR weren’t going to have difficulty identifying which pink-haired candidate did the damage.&lt;/p&gt;
&lt;p&gt;Can you get hired if you trash the hotel room on the interview? Apparently, you can. And thus began my wonderful IBM career.&lt;/p&gt;
&lt;p&gt;Pink hair wasn’t very IBM … so I fixed that by dyeing it blue to match the IBM corporate colours.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 130px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/835e46b3bcc282a8363339269c1736c4/41bf1/holly-with-blue-hair.jpg&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 146.15384615384613%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAdABQDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAUCAwQB/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAH/2gAMAwEAAhADEAAAAbYU7o4QBG6QSVkYSz//xAAcEAABBAMBAAAAAAAAAAAAAAACAQMRMQAQEhP/2gAIAQEAAQUCfODQihcMujtorBYInGwY9usTSV//xAAWEQEBAQAAAAAAAAAAAAAAAAABEBH/2gAIAQMBAT8BCbP/xAAWEQEBAQAAAAAAAAAAAAAAAAAQEQH/2gAIAQIBAT8BuEP/xAAeEAEAAQIHAAAAAAAAAAAAAAABABARAhIgISIxQf/aAAgBAQAGPwJIXNqK91uzjizPmn//xAAcEAADAQACAwAAAAAAAAAAAAAAAREhMUEgYXH/2gAIAQEAAT8hYsWsodGHT4cMPQU1TjjVfDGgUik7hOIaI01H4b//2gAMAwEAAgADAAAAELwTsf/EABYRAQEBAAAAAAAAAAAAAAAAAAEREP/aAAgBAwEBPxCpcEEz/8QAGBEBAAMBAAAAAAAAAAAAAAAAAQAQETH/2gAIAQIBAT8QAeUhdmE//8QAHRABAAICAgMAAAAAAAAAAAAAAQARIUExYVFx4f/aAAgBAQABPxBgqwl8JUYFFQhwkRfol2hBAYokYLS5Bgprx9lIdEU7J3VBaYsnJ2mt4jWZVSGSLUb01BYvM//Z&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Holly with blue hair&quot;
        title=&quot;&quot;
        src=&quot;/static/835e46b3bcc282a8363339269c1736c4/41bf1/holly-with-blue-hair.jpg&quot;
        srcset=&quot;/static/835e46b3bcc282a8363339269c1736c4/41bf1/holly-with-blue-hair.jpg 130w&quot;
        sizes=&quot;(max-width: 130px) 100vw, 130px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;That photo was taken in this beautiful Hursley building:&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/82750a533d2a65c8bf7e92069dfeb335/d6602/garden-room.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 84.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAARCAYAAADdRIy+AAAACXBIWXMAAAsTAAALEwEAmpwYAAAER0lEQVR42o2UaVPTVxTG8w2cfgs70w/RZTp90U6d6WhxAUEhTivFuABqrIKihIQthEjALCT5Z1+AJIQQkpCFHdkqKHVE0epQF8baFlAL9dertC981/vq3Jlzn/Oc5znnysKRCHbJhqFNh76xlqYfj6M9W4pRXUU03MONm4s8fLTC/z0yQ301Fl0tbpsRx9V6zMrvMVw+T0fdJfxGPXqzDVegh7GpGeYXFlj59TEvX71mfX2NRw9/YWtr631AXf4naL/8CGPRpxgVe3Eoi/EI4FgmR2p4hIGhYRFnCSfTOPxBJKeLdpOF5GCGUCjEk6fP3geUqhSEtDUEFd/iKPocqfAzfJardEW6cTg7cTgsOJ02bHYL3q4gHQY9qmolatVlVBo1VpeHe/ffMt3cBryq1WC2XsPaaaK9pZEm0arFYsAtmQgF3UJHP/G+HvxuK0GvnUi4C6OQSZP/BVeOFqE6koeyTI4/4NsGbNPVMxiPkkrEcDs68busDKX7yaZijI8OMTk2zMRojusTI4yPZJi6Pk5/X5jWU3JUh/PQF36F5WQByw/u/8dQRa+o6nDacbvsuCQzXUEvuWyS3liUWLyPudkpBhJxQuEAw7k0yYGYYCzReK4CQ9VpjD/ksXxvaRuwsuIEXQEvDU3NtOpb8Xsk0bKJxEAfDY0aLtZUMTkxKjTsxNTRIgBTDI8Io3oCNJeXUl+8m1b5LuamxrYBFYoyTMY2yivKOXlKgd1m4sL58wRFkfz8AgoKCshkUmg0Ks6dPcNAPEY6lSQgumk+raDqm49pLN6FU7KwvPIM2XFFKZq6GvYd2M+hQwfR61soKzsqWPsokcvZt/8A/aJ1dV0tFRWVYlR6iPfH8NjNYgkqUR49Qm3h11w4c4JYMoNMXlLEtY42VOp61Oo6vF437e0dJIRmHr8fp8dLejBFpLcXt89HbihLLpcl4HFxpVJBaeFBLsr3Ul52BK3egKzkcKFwNc78/A2mhYMTwtkJ4ezYSI67S0vcvXObseEMt3++xYPluyzcmOGnuVmy6QEkUwfxWJIun59j35VQfCj/LUM53X4XoW4ffqdJrGAbZkMDBl0d4YBEt89GZ3sDvaEAA/0Rgj4n4e4ALjHwvdEoTQ06zlZWINnsQkdJaHisjIBIMra3otfWoWtWCTd1XGvToq69RKe5412xaCgo2EToj4aJRkKkk3FcLieNzS0EukMkM0Mk0llk8USSjY2XbG5u8vrVhojXWF/7k9XVVSYmpxkeHWNqelbMYwKvL4DFahUz66Jf3BOpQQYzGebmF3i48pgXaxvIbE6JGrGXiVSGZ6u/CeD3f491Ueze8n1Gx8eZmpnh5uIiq8+f85fIe/PmzbucjVebTM/eRK3RIlt58pRWsfC783ZzWqmkqroat9vHnaVl/hAVt/599Pb8LcIXv69xa/EOmewoHk+QmhoVe/bsZefOD9nxwQ7+AVRMBQnK/B4EAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Hursley house garden room&quot;
        title=&quot;&quot;
        src=&quot;/static/82750a533d2a65c8bf7e92069dfeb335/5a190/garden-room.png&quot;
        srcset=&quot;/static/82750a533d2a65c8bf7e92069dfeb335/772e8/garden-room.png 200w,
/static/82750a533d2a65c8bf7e92069dfeb335/e17e5/garden-room.png 400w,
/static/82750a533d2a65c8bf7e92069dfeb335/5a190/garden-room.png 800w,
/static/82750a533d2a65c8bf7e92069dfeb335/c1b63/garden-room.png 1200w,
/static/82750a533d2a65c8bf7e92069dfeb335/29007/garden-room.png 1600w,
/static/82750a533d2a65c8bf7e92069dfeb335/d6602/garden-room.png 2222w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
￼
As well as the sheep and the grade II listed 18th century mansion, IBM Hursley has a cricket wicket, a baseball diamond, a Japanese fish pond, and a museum. When I joined it also had a tiny in-person-bank and a dry cleaning service, but those have gone the way of the fax machines.&lt;/p&gt;
&lt;p&gt;Hursley is gorgeous, and as the largest software development lab in Europe, it’s got an amazing tech legacy. The Spitfire was developed in Hursley during the second world war (not by IBM!). CICS, the software that runs almost every cash machine in the world was developed in Hursley. More generally, IBM has been responsible for so many world-changing innovations (bar codes, lasix surgery, electron microscopes, forty years of quantum computing). It combines ‘changing the world’ with a commitment to integrity and a humane corporate culture. Years ago someone from another large IT company asked me if I had any mentors - I explained that I had several, because senior IBMers are expected to grow those around them by actively mentoring. Mentoring is part of our performance assessments and promotion packages. Over the years, many IBMers have been very generous with their time to help me out. She was surprised, which surprised me. It turned out her company didn’t have any organisational incentives to lift others up. Employees were on their own when it came to growth, and usually found mentors from outside the company.&lt;/p&gt;
&lt;p&gt;In contrast, IBM encourages growth and learning. As well as the mentoring, I’ve had lots of leadership training and coaching. I’ve learned C++, C#, Javascript, Ruby, Python, and TCL, along with UML, XML, TDD, XP. I’ve learned to draw, and written a book. IBM funded me to do an MSc in software engineering. I’ve travelled to five continents. I developed a bit of expertise in Java garbage collection, enough to end up on a billboard in Bangalore:
￼
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 500px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/df8f47222dafa7f9e9439a34bcb0f518/41099/holly-cummins-billboard-bangalore-2008.jpg&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 75%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAIEA//EABUBAQEAAAAAAAAAAAAAAAAAAAID/9oADAMBAAIQAxAAAAGpZ1QUyJv/xAAbEAADAAIDAAAAAAAAAAAAAAAAAQIDERIUIf/aAAgBAQABBQKsqh9iTezNKdcEPw//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAVEQEBAAAAAAAAAAAAAAAAAAAQEf/aAAgBAgEBPwGn/8QAGhAAAgIDAAAAAAAAAAAAAAAAAAEQETEykf/aAAgBAQAGPwKmYcWzZcj/xAAaEAADAAMBAAAAAAAAAAAAAAAAAREhYYGx/9oACAEBAAE/IZQfBw0EJRtcup4Q3z0mWH//2gAMAwEAAgADAAAAECwf/8QAFxEAAwEAAAAAAAAAAAAAAAAAARARQf/aAAgBAwEBPxCHF//EABgRAAIDAAAAAAAAAAAAAAAAAAABETFB/9oACAECAQE/EIaOz//EABsQAQADAQADAAAAAAAAAAAAAAEAESExQVGh/9oACAEBAAE/EL2KU4HIxUoo4QAHEl0eBdrDuOw4BF6mH2WR+OV6n//Z&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A billboard showing &amp;#39;the hip Java developer&amp;#39;&quot;
        title=&quot;&quot;
        src=&quot;/static/df8f47222dafa7f9e9439a34bcb0f518/41099/holly-cummins-billboard-bangalore-2008.jpg&quot;
        srcset=&quot;/static/df8f47222dafa7f9e9439a34bcb0f518/e07e9/holly-cummins-billboard-bangalore-2008.jpg 200w,
/static/df8f47222dafa7f9e9439a34bcb0f518/066f9/holly-cummins-billboard-bangalore-2008.jpg 400w,
/static/df8f47222dafa7f9e9439a34bcb0f518/41099/holly-cummins-billboard-bangalore-2008.jpg 500w&quot;
        sizes=&quot;(max-width: 500px) 100vw, 500px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;While we’re on the subject of billboards, I ended up on billboards again ten years later, although with more conventional hair:
￼
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/0bcc568ce28a4ca9a2c97eb40e153f64/669cd/holly-southbank-banner.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 116.00000000000001%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAXCAYAAAALHW+jAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF90lEQVR42jWVWVPb5xXG9R06mWk60zYmju1SL2SYxMEIISGEWISRBAKhBSEJiU0LCBBILAKBkEEgVmEDNhjsUJJOHecmadPedElzkUwcG0zjtm4Td9JJmsmMv8GvB5penDvp+T/LOc+reHt/j727O9zZucX2rRvcXF/l+toCq8uzZDOTpKdGmEgMMhqPMNQfZCDSRai7jWCXh05fCz5PM22uJnytFto9FhR7d3a5u7vF7vYmt48BN1ZZX1skt5IhO5diNj1BKhlnZLCHcMCPy2lFr9dRWanDZDTQbDXikGl1mAh4G1DcvXObna0Ntm9eF3YrrF9fZG1ljtWlGebSY0yPDzKZHGY8EWOgtxOn3YJOp0WlKkFZokRVWkyDqRK3vY5uT70A7m6zs73B1uYaGzeWyC3PsZidFnZTrMxPMh0PMDHcQ3I8zvBgWGQ6qanWo9WqUatVlJRcoaXJgM9lEpZ1KHZ3brIlUjeF3fVcluXFY++myMyMc3srx/rqDJlkPxOxELFokLZWK4bqCsq1GgEsQV1aQoe7AY9I9jqNKLa3brAhYGurWVaWZr/3LUE6NcL9d/bJZjPEh/qYvZYQH0P43c0YaoRhmfoEsERZhL2plqDPQtArDG9t5rghIawuZViYTzGTHpcQhpmejPPe++8ylRgVb1pZE28nx6N0SKpGQyUajUrYKSkquizs6nBZq1ErC1Gsr/3ftzRzMxPCbJSkrEkmLUDhXsq01QLiJj2TYjk7SdDvoNliFMlqNMJQeeUN9OUlXC56nSrtayhyK/MnYJnvwaZkRRKj/YyPRSXxVbwuN3n5hRgtzSxmkkSDrXicjVTrteh1aoqvXKa0tEjkGrAZi1GsSAjzEkI6NSZgMVmPKHFJ83iRP/74z7S6fJJoJVVVtdTWGkgMdNAtSZtqK7laU0GpqhibWctm0oKrXoliPpPiWirB5MQxs4EToMG+buLRAAcHnxLsj5F/4XVM9VYW5eODvT6GevxYTAaZGsrUSqJhJ18f7DAWkUu5Nj1+smNjIwMMD/UQ7Q8QCfkYkD8dHj7g4aNPCUf6CUWi3PvVHYYjnpMVslvqsDfWUaUvo7vNzNMPF5iLN6I4BhuJ9zEUDdMvdxrp6SDQ7hJZDj7//CF/+OPv2Zd7TyWTJ+s1FHKSnRrEaTXjstVjFOmOei0H9zq4O9uEYiTefwLWExZvOj10+Fvxe+30drs5OnrEw6MjDh8/Ymggyq2ba9zOhsjNDuN2WCSwRixmA05LBR+sO7Ebi1D4/R4aGupptJhpajTjsDXgOv5xq42jx5/x3ddP+MfTQ5E8SHw4xs5SH9srSVFgp6vNhstupt6o43z+WV548ScoXC4HpWoNKpnjo/e6JC1Hg7C08dcnBzz/z9/45t9/5/DogNxaju3lKL/YSDMQ8hLqdAqolSZzJXl5L3NKRuH1ONGWl5+ANkhq3e12fO5GWmx1EsgDvnv+nC+e/ZOvvvqCvxx9xvZCH+/szBOL+OkPugm222ixGsjPP8dLp/JQOB1WNGVllKhUGOuqpTCtVFRosDTU8vTJQ7799hu+/Nczvnz2jEcHD1hJ9wpglsRgF/GIj0h3i/hppKDgAqdeFoZ2eyPqMg1XlEqqpUX0VTpKy5R0eOuJhZuZS3Tw9tYM9/bWeWv/TTrF83s7C1xL9AhoJ7EeL0GRXXAxn9NnzoqHjia517L/FaZKib5GJzumY2SghdxclMVUgMGgldLiQs6c+5ncbyl/+s1bLKSijAvgaLSdsF+eAE8Lb+79EkWX3yWVXi5VVIq5TofDaSLkvcpEj0nutgmbtU6q/ir25kbMUvk+t51PPvwtKzPDTIjspBRwoM3Chtz948dPUIS7vCcNrNGo8Vr1ItVEr1/qqLmCwtcKeeXMOZmz/PSlPH7wwg8puHSR+/ubJ7s4GQuQGgnR29HMgpzwRx99gqI30CbMaqiQ9nAY1LRcVUsdKbl4qYD8n1+g4NVXuVRwifPnz/Pij37M6dOv8Lv78mzk5HkQsNnxXrmeVsZiEd779Qf8F6ZrKePtFvfDAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A poster showing Holly outside South Bank&quot;
        title=&quot;&quot;
        src=&quot;/static/0bcc568ce28a4ca9a2c97eb40e153f64/5a190/holly-southbank-banner.png&quot;
        srcset=&quot;/static/0bcc568ce28a4ca9a2c97eb40e153f64/772e8/holly-southbank-banner.png 200w,
/static/0bcc568ce28a4ca9a2c97eb40e153f64/e17e5/holly-southbank-banner.png 400w,
/static/0bcc568ce28a4ca9a2c97eb40e153f64/5a190/holly-southbank-banner.png 800w,
/static/0bcc568ce28a4ca9a2c97eb40e153f64/c1b63/holly-southbank-banner.png 1200w,
/static/0bcc568ce28a4ca9a2c97eb40e153f64/29007/holly-southbank-banner.png 1600w,
/static/0bcc568ce28a4ca9a2c97eb40e153f64/669cd/holly-southbank-banner.png 3024w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;If you find a job you love, you’ll never work a day in your life. I’ve made the best friends and had the best times at IBM.
￼
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/ae33b53b9a582770604634c5dfe4bca6/f0293/garage-group-photo.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 72.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAAsTAAALEwEAmpwYAAABo0lEQVR42p2T30uaURzG+3/G6GZsdOHGLgYDd2HWbkZzFBXoEsOaBGkqsnwdmGjx6kzth0VdLIzYamoJQW2gTArZzWBrLCqoMajdqHv1s2V5Ea3k9bk45+I55/N9eDingf+oWMjzdnEZQfAQ8Id4/y7Jm+hMxSuXy1ynhquMgNtJy/273Lpzm96OdoJW6ymOWroErCZIpVZ5aTejMzynz2QkMB45NesHbnxI4xNDfExvkcrkiP6roPBHkg8sSWeXEksxXvT0oNPpGRXDDBlN7B0c1OzxMrBUquzrawkGBu0oVUq02i60za3sfP12BizVAUx/yjEsTuByCcQSK3gm59g7/CU/YfXwzo9dBJ9IcHaelc0s3tezbH/+cj60DuD+7neMXW1oHqtRq1vobn3K8kKs4kmSJB/48+gI4ZUbq91E0wMFDx+piMeTF2qRBTw++c1IYJLQ1DQhv59hr5/1TLb+Dgv5PM4hMx1P2rCYbdgGLPgEl3xg9TcUi3k8tkF0nc+42XgDleIeDkOf/Id9Tq2s4cg0/fp29Bo1DouJoDhWM+Ff0pf36Hm7GjcAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A photo booth strip showing IBM Cloud Garage staff in silly hats&quot;
        title=&quot;&quot;
        src=&quot;/static/ae33b53b9a582770604634c5dfe4bca6/5a190/garage-group-photo.png&quot;
        srcset=&quot;/static/ae33b53b9a582770604634c5dfe4bca6/772e8/garage-group-photo.png 200w,
/static/ae33b53b9a582770604634c5dfe4bca6/e17e5/garage-group-photo.png 400w,
/static/ae33b53b9a582770604634c5dfe4bca6/5a190/garage-group-photo.png 800w,
/static/ae33b53b9a582770604634c5dfe4bca6/c1b63/garage-group-photo.png 1200w,
/static/ae33b53b9a582770604634c5dfe4bca6/29007/garage-group-photo.png 1600w,
/static/ae33b53b9a582770604634c5dfe4bca6/f0293/garage-group-photo.png 2250w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;I’m so grateful to IBM for taking a chance and hiring my despite my punk-rock interview destruction, and I’m grateful for all the support and opportunity I’ve received in my time here. It feels super-odd to be turning this in.&lt;/p&gt;
&lt;p&gt;￼&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/e13d901406137fd749b32131b374f9e6/669cd/holly-badge.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 124.50000000000001%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAZCAYAAAAxFw7TAAAACXBIWXMAAAsTAAALEwEAmpwYAAADHElEQVR42p2V21OSaRjA/ZPai73qstm7rXZq7UDT1M1uM41bTtNxt8NMA9FYiiiIumzY5ELmKRKKMMN1kLQENVFBi8JIlxQnKJE+gV+vEU1OKYfn5pvveZ73N8/xfUvYQNLpzHc5meTi8TZKf1Rz9HA1RpObN5HUGp+slGwMzHgvvF2i/EAD+7docDpfshRPr3smL6B3aoadmyswG/yf/lMpoU8XAUylMmnVaDrZtukKLyfeZfTJIiLMBJcmIZh/lFWx/YdL/B9MZGypooCZQ4GZCGVl5yk/VCki47uNKAj4xD2BQlFJ6PX8Gn1BwOwhv/8Zmhotd622L/rigJ+bYbn7gPLyE5jvWFkRsyhJErmk5HuD/O59nLbbdn7aeoBtv/7OBbmKrbsOcfK8iunAq8zY5AJmU4nGltBf01NbfRFNrRxd3SW0ugquVF5ArjiFQnmW/keDa8ZqQ6DH+5x7FgPSghsp7mHlwyjzc71E3jh5G3ExPtqKy9WXG5hNY8A9KYB6kAZILDpIxl3COExK8gjrGLOhbvr7CwC6n05x5q8TxMJ24pEe4rFHxKJDoiE+YZ3BbmvC2NL+yTeZTOYGen0v+PmXUnq7G/F7OxkbNRMM9onOB4R1loZGJbq/b+QB/FzDyekZduzay7jHxJDrBkajGqvNwEOHaXVvMBgqaNAXAPQJYOkeGS/G2wj6O3g60onL0cKwp2vVSlNTBXUNTQVEOBVkt2wfy4sPIeFkpOsavUoFliolKwk3zc1V1Gr1+ddwXNRwt0yGtNjD+5CNZvlJAhYtqoO/4XPdoqO9mqrq+vyBo2IOZftkpGMOoq9s3Lx6lvkH/1B/7CjW6yq6bRox5Jr8gUPDfq7rLwvFALGQHeXpYzxureHykTIsJg2RuXuYzW3r3jzf1NAtgD321aIPEw33ID93iglHI3XyPzG3aJGWnfT9dz+7X7kjfOLxcatZTWK+m3DAgq2jDqdNT1eLGodVh3/kXyx32te9ab/Z5bm5BVQqDY31OoYGB4lGwkTCs4SCz2k1GalRaxnzTuZO+WtJikcolaYo+QgmDyzm5CVXmQAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Holly&amp;#39;s IBM badge&quot;
        title=&quot;&quot;
        src=&quot;/static/e13d901406137fd749b32131b374f9e6/5a190/holly-badge.png&quot;
        srcset=&quot;/static/e13d901406137fd749b32131b374f9e6/772e8/holly-badge.png 200w,
/static/e13d901406137fd749b32131b374f9e6/e17e5/holly-badge.png 400w,
/static/e13d901406137fd749b32131b374f9e6/5a190/holly-badge.png 800w,
/static/e13d901406137fd749b32131b374f9e6/c1b63/holly-badge.png 1200w,
/static/e13d901406137fd749b32131b374f9e6/29007/holly-badge.png 1600w,
/static/e13d901406137fd749b32131b374f9e6/669cd/holly-badge.png 3024w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;So, yeah. IBM: 10/10, would recommend.&lt;/p&gt;
&lt;p&gt;(Wait, if IBM is so wonderful, why am I leaving? Well, I know it’s not the done thing to say where one is going in a goodbye message, but … let’s just say I’m not going that far.)&lt;/p&gt;</content:encoded></item><item><title><![CDATA[マイクロサービスに失敗する7つの方法 ]]></title><description><![CDATA[昨年 11 月の QCon Plus、私は、マイクロサービスがうまくいかない理由について講演しました。取り上げた問題は私の経験に基づくものであると同時に、残念なことに、現場で何度も目にするものでもあります。]]></description><link>http://hollycummins.com/microservices-seven-fail-japanese/</link><guid isPermaLink="false">http://hollycummins.com/microservices-seven-fail-japanese/</guid><pubDate>Sun, 27 Feb 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;昨年 11 月の QCon Plus、私は、マイクロサービスがうまくいかない理由について講演しました。取り上げた問題は私の経験に基づくものであると同時に、残念なことに、現場で何度も目にするものでもあります。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[简历驱动开发？微服务中的几种失败路径_文化]]></title><description><![CDATA[简历驱动开发？微服务中的几种失败路径本文要点：微服务是一种手段而非目标分布式并不能确保解耦性契约测试在所有微服务架构中都是重要组成部分前]]></description><link>http://hollycummins.com/DdFzjAX7BvX6b1fpcIyY/</link><guid isPermaLink="false">http://hollycummins.com/DdFzjAX7BvX6b1fpcIyY/</guid><pubDate>Sat, 26 Feb 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;简历驱动开发？微服务中的几种失败路径本文要点：微服务是一种手段而非目标分布式并不能确保解耦性契约测试在所有微服务架构中都是重要组成部分前&lt;/p&gt;</content:encoded></item><item><title><![CDATA[GitOps in Regulated Industries Webinar]]></title><description><![CDATA[Ian Miell, Daniel Jones, Holly Cummins, and Jamie Dobson discuss the rewards and challenges of GitOps in regulated industries.]]></description><link>http://hollycummins.com/gitops-in-regulated-industries-webinar/</link><guid isPermaLink="false">http://hollycummins.com/gitops-in-regulated-industries-webinar/</guid><pubDate>Wed, 23 Feb 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Ian Miell, Daniel Jones, Holly Cummins, and Jamie Dobson discuss the rewards and challenges of GitOps in regulated industries.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[7 Façons D'échouer Dans Les Microservices]]></title><description><![CDATA[Lors de QCon Plus en novembre dernier, j’ai présenté certaines des façons dont les microservices peuvent mal tourner. Ces problèmes sont…]]></description><link>http://hollycummins.com/microservices-seven-fail-french/</link><guid isPermaLink="false">http://hollycummins.com/microservices-seven-fail-french/</guid><pubDate>Fri, 18 Feb 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Lors de QCon Plus en novembre dernier, j’ai présenté certaines des façons dont les microservices peuvent mal tourner. Ces problèmes sont basés sur mon expérience que je vois souvent sur le terrain.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[7 Ways to Fail at Microservices ]]></title><description><![CDATA[At QCon Plus last November, I presented some of the ways microservices can go wrong. These problems are based on my experience – which…]]></description><link>http://hollycummins.com/microservices-seven-fail/</link><guid isPermaLink="false">http://hollycummins.com/microservices-seven-fail/</guid><pubDate>Mon, 14 Feb 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;At QCon Plus last November, I presented some of the ways microservices can go wrong. These problems are based on my experience – which, unfortunately, I see repeatedly in the field.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Is your innovation funnel an innovation fizzle?]]></title><description><![CDATA[World-changing ideas don’t seem normal and sensible – at first. They usally teeter somewhere between ‘impossible’ and ’
idiotic’. Take IBM’s…]]></description><link>http://hollycummins.com/innovation-fizzles/</link><guid isPermaLink="false">http://hollycummins.com/innovation-fizzles/</guid><pubDate>Thu, 03 Feb 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;World-changing ideas don’t seem normal and sensible – at first. They usally teeter somewhere between ‘impossible’ and ’
idiotic’. Take IBM’s Jeopardy-winning Watson system. I’ve seen a
few &lt;a href=&quot;https://web.archive.org/web/20230209093954/http://thenumerati.net/?catID=24&quot;&gt;different&lt;/a&gt; &lt;a href=&quot;https://www.youtube.com/watch?v=OXZGPnlFLT8&quot;&gt;accounts&lt;/a&gt;
of its creation, but I like the one shared with me by a friend who was there. An IBM VP, Charles Lickel, noticed
everyone in a restaurant stand up and move to the
the bar. What were they doing? What could be so interesting, in a restaurant bar? It turns out the bar had a TV, and
they all wanted to watch the reigning champion of Jeopardy continue his winning streak. Lickel had an idea – IBM
Research should build a computer
which could play Jeopardy as well as a champion. His colleagues were more alarmed than impressed; the scientific
consensus was that it was far too hard, and even trying verged on folly. Everyone knew that computers couldn’t handle
puns, or humour, or allusions and indirection, much less all at the same time. There were mutterings that the old man
had lost it.
The happy ending to the story is that one scientist, David Ferrucci, stepped forward and said he thought he could do
it – and succeeded. Victory was far from guaranteed, though: even once it was underway,
the Watson project was subject to much ridicule from its competitors and even within IBM.&lt;/p&gt;
&lt;p&gt;We see similar patterns of dismissal and ridicule for other significant inventions. When laptops were introduced, the
New York Times questioned whether anybody would actually want to use a computer outside of work.
They &lt;a href=&quot;https://bigthink.com/technology-innovation/new-york-times-article-from-1985-deemed-the-consumer-laptop-a-failure/&quot;&gt;concluded&lt;/a&gt; ”
the microcomputer industry has assumed that everyone would love to have a keyboard grafted on as an extension of their
fingers. It just is not so.” Even cheeseburgers
were &lt;a href=&quot;https://www.smithsonianmag.com/smart-news/1938-ny-times-wrote-about-weird-new-food-cheeseburger-180955493/&quot;&gt;dismissed&lt;/a&gt;
as “a bizarre combination of beef and cheese” when they were introduced. This isn’t
because the journalists were stupid, it was because, at the time, portable computers or melted-cheese-on-a-beef-patty
genuinely seemed like terrible ideas. I can’t even comprehend not liking cheeseburgers, but there we are.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/b88c32c8ab171b1207b87e0354ed33b9/d2e55/cheeseburger.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 41.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsTAAALEwEAmpwYAAABPklEQVR42o2S2U7CABBF+f9v8MW4JBiRyJ5ooVAsXVCBspcCAWQpS1AEHkCOVUMMUQI3mczDJGfm5o6Lf7RxajKyqRceqaRj5OUwJU2glBZpmnmWyyX75NoBbTbffTTokpMClCQvphZhYGVo5RL0yymamSimoR8H/NJq9YHdtugXElhqkE4uhl3P0StI2BWFXlGmlZd5n00PAX+u63UsalmRdllnaOrOVRrdkspLIUW/kmZkPfMkBR3rxR1Xf4DbgT0cELq9wnt2Qjx0Tc2xOG5qjBoa7bxAzH+Bz31OvWYeB5y8TrlLCvj9HjyXp4Q8l1QycdaTIoYuErhx4/W5qTYOAH9Nw3yxIJaKklSj3CciiGKEB0VAycoIiTBSVmG9Xh8XynbjfPZGyzSc19GpGymqWacMlXGv5QS32pvyJ5a/U8LVPC6qAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;a cheeseburger&quot;
        title=&quot;&quot;
        src=&quot;/static/b88c32c8ab171b1207b87e0354ed33b9/5a190/cheeseburger.png&quot;
        srcset=&quot;/static/b88c32c8ab171b1207b87e0354ed33b9/772e8/cheeseburger.png 200w,
/static/b88c32c8ab171b1207b87e0354ed33b9/e17e5/cheeseburger.png 400w,
/static/b88c32c8ab171b1207b87e0354ed33b9/5a190/cheeseburger.png 800w,
/static/b88c32c8ab171b1207b87e0354ed33b9/c1b63/cheeseburger.png 1200w,
/static/b88c32c8ab171b1207b87e0354ed33b9/29007/cheeseburger.png 1600w,
/static/b88c32c8ab171b1207b87e0354ed33b9/d2e55/cheeseburger.png 3364w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;How does an organisation distinguish between &lt;em&gt;truly&lt;/em&gt; idiotic ideas, and those which are just uncomfortably new? The
standard answer is “build an MVP”. Sadly, as a term, MVP no
longer &lt;a href=&quot;https://www.digit.fyi/comment-why-i-never-want-to-build-another-mvp/&quot;&gt;means all that much&lt;/a&gt;. In 2022, it seems
&lt;em&gt;everything&lt;/em&gt; is an MVP. Some of these MVPs are experiments, some are prototypes, and some are just first releases. Some
are £12 million “first releases”, developed by a waterfall process (true, sad, story). Because “MVP” can be used to mean
very different things, when we say “MVP”, it’s important to be explicit about what we’re trying to accomplish.&lt;/p&gt;
&lt;p&gt;What we &lt;em&gt;should&lt;/em&gt; be trying to accomplish depends a lot on the
context. (&lt;a href=&quot;https://blog.container-solutions.com/cynefin&quot;&gt;Cynefin&lt;/a&gt; can be a useful framework here.) In environments of
high uncertainty,
sinking £12 million into a first release before getting feedback is an atrocious idea. (I’m assuming there must be some
environments where the uncertainty is low enough that spending £12 million before getting feedback is a good idea,
although I haven’t to confess I haven’t encountered any of them myself.)&lt;/p&gt;
&lt;p&gt;If uncertainty is high, we should start with an experiment. A &lt;em&gt;small&lt;/em&gt; experiment. The focus here
must be on learning, not on building or re-use. By definition, when we do an experiment, we don’t know what the answer
will be. This means there needs to be a strong focus on metrics, and they have to be metrics which guide decisions, and
not vanity metrics. We mustn’t formulate a hypothesis and then cherry-pick evidence which confirms our favoured theory.
An experiment must be designed so that failure is possible, and possibly even desirable. A failed experiment is a &lt;em&gt;good&lt;/em&gt;
thing, as long as the experiment was small; we learned something quickly and cheaply which will prevent an expensive and
slow mistake.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/d2950650094ac5c603a44ab68fe70179/88309/calipers.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 40%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAIAAAB2/0i6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAA80lEQVR42o1QyYqDUBD09/0B75PEixcXUEcwA+Iu4smT4kFEFEUQwX2bzrwQhDjM1OFBv+6qrmps3/dt2+AdhmGeZ1Sinz+Boem+7yVJqqoKynVdjxPbASfkoig+f0BRFI7jPM9nWda27TiOy7Kc7kRCD7LneaIoyrJ8u14JgrhcPkiSZBgGvJim6bqu7/thGCZJ0jRN13Ug+tw8TZOqqpqm3e9fZVmCfwivKEocx0EQ2LYNuizL0jTNcRxYEwQBurquAxEDGcdxDMMA7Zef98ywMM/zNE2jKLIsC0w9yNCGYHVdo3iI/NuFTg72TxwV0cG+ARZOu3UlwprjAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;a set of calipers&quot;
        title=&quot;&quot;
        src=&quot;/static/d2950650094ac5c603a44ab68fe70179/5a190/calipers.png&quot;
        srcset=&quot;/static/d2950650094ac5c603a44ab68fe70179/772e8/calipers.png 200w,
/static/d2950650094ac5c603a44ab68fe70179/e17e5/calipers.png 400w,
/static/d2950650094ac5c603a44ab68fe70179/5a190/calipers.png 800w,
/static/d2950650094ac5c603a44ab68fe70179/c1b63/calipers.png 1200w,
/static/d2950650094ac5c603a44ab68fe70179/29007/calipers.png 1600w,
/static/d2950650094ac5c603a44ab68fe70179/88309/calipers.png 1683w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;What happens if the results of an experiment aren’t what we expected (“failure”)? We adjust course. If the results &lt;em&gt;are&lt;/em&gt;
what we hoped for, we then go on to design a follow-on experiment which checks out our next risk. Eventually, if we do
enough experiments, we will have moved from a situation of high uncertainty to one of moderate uncertainty.&lt;/p&gt;
&lt;p&gt;At this point, experiments aren’t needed any more and we can shift our development technique to one which involves more,
well … development. Our focus changes from learning to user value. What we’re delivering should be a product,
something our audience can benefit from. That means we need to meet minimum standards for functionality (there has to be
enough) and quality (bugs annoy users). “Minimum standard for functionality” doesn’t mean a product has to be feature
complete. Users will tolerate missing features, especially if they can see that new capabilities are being rolled out
regularly, and the product team is responsive to feedback. Here, “regularly” means “every few days” or “every week”,
not “once a quarter”. Spacing releases out
too infrequently can lead to value sitting on the shelf (bad) and half-baked features being rushed into a release to
meet the deadline (worse). Continuous deployment is a key enabling technique here.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/2f3af8227ee3fee875bde2b609cac285/d2d90/joist.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 37%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAAAsTAAALEwEAmpwYAAAA+0lEQVR42o2QXUvCABSG/f/gRVQQoRFUUBCRpEK5ukuLTF206VpuXqXmkG3MfbSPJxcZCFv1wntxLs7DeU6BjCRJsjZHUYTv+1+dGQaarhN+hFmrFMhJGIZ4nodlWTiOw9t4zG2zxdHxCcL1DUEQ/A9o2zb6aMR4MmFumgw1jWqtzm6pzM6yp5UKzdYdi4X7bZMDXGmmQEkeUL+8ory3T3Fjk+LWNrVGg/v2I8+ShOu6eWLrF66gvudzdlGldHBIVRCQFAVRfGL4qhHHceafc5XTvxkzg/Ol5kNPRFFVut0e0+n7r6BcoGlayP0B7U4HWe6jvKg/in/BUuAn7iYSs6SQBGoAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;a steel joist&quot;
        title=&quot;&quot;
        src=&quot;/static/2f3af8227ee3fee875bde2b609cac285/5a190/joist.png&quot;
        srcset=&quot;/static/2f3af8227ee3fee875bde2b609cac285/772e8/joist.png 200w,
/static/2f3af8227ee3fee875bde2b609cac285/e17e5/joist.png 400w,
/static/2f3af8227ee3fee875bde2b609cac285/5a190/joist.png 800w,
/static/2f3af8227ee3fee875bde2b609cac285/c1b63/joist.png 1200w,
/static/2f3af8227ee3fee875bde2b609cac285/29007/joist.png 1600w,
/static/2f3af8227ee3fee875bde2b609cac285/d2d90/joist.png 3245w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Getting a radically descoped product out into the field will allow development teams to prioritise features more
effectively. Often, what we &lt;em&gt;think&lt;/em&gt; our users want ends up being pretty different to what they actually want.
You might be surprised how much can be descoped. The founder of Zappos famously descoped “actually having inventory”
and “wholesaler relationships” when he started selling shoes. Instead, he would fulfill orders by going out to his local
shoe shops and buying shoes. It’s not quite the same scale, but my team in the IBM Garage replaced a wholly manual
ordering process with a web app … which sent an email to a seller under the covers. The client wasn’t sure if their
users would feel comfortable ordering construction supplies online rather than over the phone, so the hollowed-out app
allowed them to explore real-world user behaviour, and
give real value to users, all for a modest investment. The app-to-email sales process was not particularly efficient on
the fulfilment side, and it was not sustainable long-term, but that’s ok. Delivering a partial app allowed the team to
get consumer buy-in and gather user feedback while continuing to build up function.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/7d0d0eccfabbd0163e83271745585e3d/f60cd/rsj-email.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 44.49999999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAABYlAAAWJQFJUiTwAAAA0UlEQVR42pWS2Q6EIAxF/f8/HB0DLmNwA3EB43ankpjMw2hCX8rLPTltCfBQ67piGEf0w4DJWtfHacK6bbeZ4AnGGEf0jsE4xyuMUDcNWikRM4bjOPyAy7Igzz/gPEFd16iqyvWu65AXhT/Q2hlaa0gyCslOCIE0SVGWJZm2/iPP8wylFAbamyKrNM2gOw1jDDIydHV4GVpneIL7vkdD+5NS0cgagiwd78/Yt8CRrmuMdaHfoCa4KCt/4EZf4wqc7Xqf30jSKryBd3VC9n2/PcoX3mvCPD0kNn4AAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;an email to a seller listing rolled steel joists&quot;
        title=&quot;&quot;
        src=&quot;/static/7d0d0eccfabbd0163e83271745585e3d/5a190/rsj-email.png&quot;
        srcset=&quot;/static/7d0d0eccfabbd0163e83271745585e3d/772e8/rsj-email.png 200w,
/static/7d0d0eccfabbd0163e83271745585e3d/e17e5/rsj-email.png 400w,
/static/7d0d0eccfabbd0163e83271745585e3d/5a190/rsj-email.png 800w,
/static/7d0d0eccfabbd0163e83271745585e3d/c1b63/rsj-email.png 1200w,
/static/7d0d0eccfabbd0163e83271745585e3d/29007/rsj-email.png 1600w,
/static/7d0d0eccfabbd0163e83271745585e3d/f60cd/rsj-email.png 2318w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;This type of MVP is known as a wizard of Oz MVP; it looks like a proper product, but under the surface there are smoke
and mirrors and gophers pedaling frantically.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/737de97b7ec3dd7b8dd4419f7c9836b4/7b3c8/wizard-of-oz.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 58.50000000000001%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAABrUlEQVR42p2TWW/aUBBG+f//oI+tKjWL0iakIolEk0BYAhRC2KFsMWDAO9hQHMc+Na5UNQhXUedldL+592i2G2HHPM/bldhsNmiqhq7pgTd0A9d12WeRXdBsNkfTtFfaer0mnk9wFD/lppTm7C6GvtD3JhD5+2CaFqORQLsYw96sA02VZVRFJtXM8zl3QfT+io83J0ia/G+gaZr86PbptKq082esV1ag5zJp7jNZSt0qB7enHCfPiWavUA0tHGjbNpIs0RuO6D4kGZUuUaQ5K8siVaiQLXf5lr7lXfQDn66/8DUfx1guwoGGYTAWZzTrFcaZA6R2Lgg69k9SlSGJlkqj0+T9xSFHd+dcFq5Z+hWFAi2/d9OZTL/1iFg4YTpsBcHVakWyKpBuqwiTObVeg0Q5y2On5vfYDp+yuVwynkyZjQYojRgLRQyCz45DsVimXm/iOC94/qq4L67vPcLsd4aWSc1/NBl2EL8f+sDpnwtCt4cwGITu6F7gtrReb4jQbzPIHmPqyivAdonfAtsBDhCenpj4fZJEgbc9DwFuM9j+hvlcYuJP2/X+Fwe/AEVAkLYjLMY1AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Dorothy, the lion, and the tin man approaching a curtain&quot;
        title=&quot;&quot;
        src=&quot;/static/737de97b7ec3dd7b8dd4419f7c9836b4/5a190/wizard-of-oz.png&quot;
        srcset=&quot;/static/737de97b7ec3dd7b8dd4419f7c9836b4/772e8/wizard-of-oz.png 200w,
/static/737de97b7ec3dd7b8dd4419f7c9836b4/e17e5/wizard-of-oz.png 400w,
/static/737de97b7ec3dd7b8dd4419f7c9836b4/5a190/wizard-of-oz.png 800w,
/static/737de97b7ec3dd7b8dd4419f7c9836b4/c1b63/wizard-of-oz.png 1200w,
/static/737de97b7ec3dd7b8dd4419f7c9836b4/29007/wizard-of-oz.png 1600w,
/static/737de97b7ec3dd7b8dd4419f7c9836b4/7b3c8/wizard-of-oz.png 3131w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;This idea of using experiments to prune out bad ideas early seems logical, but it’s something organisations can struggle
with.
In many cultures, it’s safe to say that “designing for failure” is not encouraged. Teams working on an idea have an
incentive to prove that the original idea was great, and the implementation is successful. This means there is little
motivation to build in the kinds of experiments and learning which could lead to a project being cancelled. This can
cause an “innovation railroad”, where projects, once funded, are pushed right through until the end. This doesn’t mean
the projects succeed, it just means failure is deferred and more resources are consumed before the failure is
discovered. The sunk cost fallacy can also contribute to innovation railroads.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/79321085a337f842661762fe486b723f/6eafc/fizzle-diagram.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 62%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAIAAADtbgqsAAAACXBIWXMAAAsTAAALEwEAmpwYAAABXUlEQVR42n2R62rCQBCF+/7P04IF/WFBUbxk13sUzcU7CJLUda3G2I+MKG2tAwk7s+fMOTP7crlczufzcDisVqu+75OuVqtWq1Wv12u1Gv9Op+O67nQ6HY/H3W6XK6XUYDDwPO8lTVMIQRBordfrtfTq9XrlchkyHUul0mazAcq52Ww6jgO/3W7T8QGZSJKEVJShUZlMJpVKhbTRaKAMGbNXchiGoJfLJenxeBTz6OPZGCMAPI9GIycLN4u7ssw2m83iOKZircUec4oXYIzDgeHByHQ/yP1+fz6fC4jAi6xQMPIHgEFJ72Qm4SI5ndIsKOITt3/Ji8XiSrbGHKzFcCGfZw1RFJ0yPte8B9Bn5K/Dwfc9pXUul0N897nbGyM4Ot5wj8l8e7vnVQuFvFbOdruNo0hm/k/5PrOsUiv1USyizAULe6LMtm8drwvjxd/fXsMgkKoUf21bwmYh528riJT9i4C8bAAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;a diagram showing an innovation railroad, funnel, and fizzle&quot;
        title=&quot;&quot;
        src=&quot;/static/79321085a337f842661762fe486b723f/5a190/fizzle-diagram.png&quot;
        srcset=&quot;/static/79321085a337f842661762fe486b723f/772e8/fizzle-diagram.png 200w,
/static/79321085a337f842661762fe486b723f/e17e5/fizzle-diagram.png 400w,
/static/79321085a337f842661762fe486b723f/5a190/fizzle-diagram.png 800w,
/static/79321085a337f842661762fe486b723f/c1b63/fizzle-diagram.png 1200w,
/static/79321085a337f842661762fe486b723f/29007/fizzle-diagram.png 1600w,
/static/79321085a337f842661762fe486b723f/6eafc/fizzle-diagram.png 3714w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Another anti-pattern I see is the innovation fizzle. I heard recently about a government organisation who sent several
dozen staff to a two day design thinking workshop. They were energised and creative and came up with pages of great
innovation
ideas. And then … nothing happened. Six months later, there was still nothing. Probably, not all of the ideas should
have been built, but &lt;em&gt;some&lt;/em&gt; of them should have been explored futher. In an innovation fizzle,
ideas are generated, prototypes are written, annual appraisals are submitted describing all the innovation activity …
but nothing makes it into the hands of real users. Although there is an innovation budget, sometimes a very healthy
innovation budget, there doesn’t seem to be a meaningful path to production out from the innovation team. This isn’t
laziness; it can be genuinely hard to push over the hump from “risk-free PoC” to “project living and breathing out in
prod where users may get annoyed and security breaches may happen.”
In an innovation fizzle, nobody makes a conscious decision not to proceed – it just … doesn’t happen.&lt;/p&gt;
&lt;p&gt;Is there a healthy medium between “everything gets shipped no matter what” and “nothing gets shipped?” In principle,
yes: the innovation funnel. Ideas are evaluated, the weak ideas fail-out fast, and the strong ideas continue on to
production. But even properly funnel-shaped innovation funnels are not perfect.
The evaluation stage of the funnel can be bureaucracy-heavy and focussed
on &lt;a href=&quot;https://www.marketingsociety.com/the-library/why-innovation-funnels-dont-work-and-why-rockets-do&quot;&gt;error-prevention&lt;/a&gt;.
For one
industrial company, the process of investing in a new development took
a &lt;a href=&quot;https://blogs.lse.ac.uk/businessreview/2022/01/10/how-to-unshackle-innovation-from-bureaucracy/&quot;&gt;hundred distinct steps&lt;/a&gt;.
In others, teams spend significant admin effort working through approvals and generating polished proposals.
Evaluation boards want to pick winners, and this
can lead to them favouring safe bets rather than riskier, more innovative, ideas.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/f301191bb1eacf4882bafeb5a9a51db0/5a744/shears.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 51.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N+mxAAAACXBIWXMAAAsTAAALEwEAmpwYAAABRUlEQVR42o1RXU/CMBTd/3/zVV9MNKAJRpEPYRsq4AbDgbANDQ6ERbEyAnQjG2ztijND0syQeJI2zbk9Ofeey2woEEKiO3rQsCy7r+tBENAkE56QWrkrb73esY7jQAhXa9/zkTmZ9LR2s8LeFrIQWjuPrXg2m9fq0qPcNAwDITRfQPGe49PnT0JJ4q8vT45urxIvHXlp27F2fsQYY3u5fO71qoJYlxrANDVNzaSSrYdSu1Y2BrrjuvExduJPAG5YLlNky4KYY7mG3Bq8jd7HwEeYjuNvENuZQ0zNKQBfqtZVVK2jKo7jRpqwr80eMHGCkMUCFgv5XOp0bAwxDqhKEDNnYo1FZQtCgcvyF8fNKjcc6J7nE/If599NIBwM+681Pps8PLhLnylSpduWjdEo+rFXTMfjIwTGH6osSqVcPpVQlQ69528DbDAe2WOWTQAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;a pair of pruning shears&quot;
        title=&quot;&quot;
        src=&quot;/static/f301191bb1eacf4882bafeb5a9a51db0/5a190/shears.png&quot;
        srcset=&quot;/static/f301191bb1eacf4882bafeb5a9a51db0/772e8/shears.png 200w,
/static/f301191bb1eacf4882bafeb5a9a51db0/e17e5/shears.png 400w,
/static/f301191bb1eacf4882bafeb5a9a51db0/5a190/shears.png 800w,
/static/f301191bb1eacf4882bafeb5a9a51db0/c1b63/shears.png 1200w,
/static/f301191bb1eacf4882bafeb5a9a51db0/29007/shears.png 1600w,
/static/f301191bb1eacf4882bafeb5a9a51db0/5a744/shears.png 2703w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The focus of innovation gates should be on enriching ideas, and gathering real, external, feedback, rather than internal
evaluations and paperwork.
In &lt;a href=&quot;https://hollycummins.com/bonkers-beans/&quot;&gt;part 1&lt;/a&gt; of this blog, I told the story of George Washington Carver.
Although Carver was an enormously successful inventor and educator, he didn’t get everything right. When he first
started working with farmers in the south,
he &lt;a href=&quot;https://www.smithsonianmag.com/history/search-george-washington-carvers-true-legacy-180971538/&quot;&gt;printed brochures&lt;/a&gt;
advising them to buy a second horse so they could run a two-horse plough, allowing them to till the exhausted soil more
deeply.
While this undoubtedly would have improved cotton yields, it was
hopelessly impractical advice for tenant farmers on the edge of starvation. Once he worked out the underpinning economic
issues, Carver was able to switch tack and focus his educational efforts on composting (free!), swamp muck fertilizer (
squelchy, but free!), and crop rotation (sort-of-free).&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/7f9e286ed8fd73d8e0ac7744d3509d8d/5caae/horses.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 39.49999999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsTAAALEwEAmpwYAAABcElEQVR42o2RS2/aUBCF8//XUTepumqyCFiqKwXSRJVICq55GJwYsIgdwgWKodQJMYqJ8eMLdgXqU+3ZzOieM+eM5u4lSUKK2WyGoqi47j3j8Th7S7kt/7/Y2w4IITh8e4R0nOM4JzEcjvB9fydMdVEU/dtwK07hOA75XB4pL/Fqf583B6+ZTJyMWwcBtmURrtffA0j+brjlPM+j1dRxNibyu/ecFk4pFoobk5CuYSBJctbvNg4jVs8rgnD9s+FytWT8bYJhd1CvavTFHWdn5zRbLT4pZVStinwiI38oYA1vuRE2PWFhDnp07ky+uM5u48zQXd5zLbqoVgPFqlPpVamYVS66Fcp2DbWvUbU1Sp0K53qJj9eXqHYDY2RyM+vz4D/+fsO553I7HaAPDGp2k3q/RWOgo4kr9GF7E6Zx0VEotctcmp/RRRsxHzFdfOU5DH654Q+I45gwCok2Ne3jJM4CF09eNjxdzLPqB6s/fsoLUPxT+Jlg1jYAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;a pair of horses pulling a plough&quot;
        title=&quot;&quot;
        src=&quot;/static/7f9e286ed8fd73d8e0ac7744d3509d8d/5a190/horses.png&quot;
        srcset=&quot;/static/7f9e286ed8fd73d8e0ac7744d3509d8d/772e8/horses.png 200w,
/static/7f9e286ed8fd73d8e0ac7744d3509d8d/e17e5/horses.png 400w,
/static/7f9e286ed8fd73d8e0ac7744d3509d8d/5a190/horses.png 800w,
/static/7f9e286ed8fd73d8e0ac7744d3509d8d/c1b63/horses.png 1200w,
/static/7f9e286ed8fd73d8e0ac7744d3509d8d/29007/horses.png 1600w,
/static/7f9e286ed8fd73d8e0ac7744d3509d8d/5caae/horses.png 3460w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Real field feedback is intuitively more accurate than paper-based or hypothetical feedback. Surprisingly, it can also be
less expensive. Unilever launched four Peperami variations concurrently in 2004, in a sort of
sell-off-sales-competition. In the end, three of the variations had disappointing sales and were cancelled, but this
wasn’t a failure. Experimenting in the actual market reportedly
cost &lt;a href=&quot;https://www.slideteam.net/blog/top-10-innovation-funnel-templates&quot;&gt;£1 million less&lt;/a&gt; than Uniliver’s traditional,
protracted, focus-group method of product evaluation. It also got the winning product, Peperami Firesticks, to market a
year earlier than it would have otherwise done.&lt;/p&gt;
&lt;p&gt;It’s a fact of life that innovation isn’t always going to work. Thomas Edison famously said “I have not failed 10,000
times—I’ve successfully found 10,000 ways that will not work.” Peperami Firesticks were a success, but Peperami
Canniballs, Dunkers, and Sarni, launched at the same time, were not. Besides his tone-deaf horse suggestions, other
notable Carver failures include peanut bread, peanut sausage, peanut coffee, peanut facecream, and peanut
nitroglycerine. (They all “worked”, in some technical sense, but it turned out no one wanted peanut coffee in 1916.)&lt;/p&gt;
&lt;p&gt;For innovation to flourish, these setbacks have to be tolerated. In fact, these setbacks have to be positively
&lt;em&gt;encouraged&lt;/em&gt;, as part of maximising learning. Innovation does not work in a culture
of fear. Psychological safety is an essential foundation which allows teams to report failure and iterate continuously.
The best part is that the ingredients for successful innovation - psychological safety, continuous delivery, short
feedback cycles, and an emphasis on learning - are more generally the ingredients for a successful business. Everyone
wins.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/5d64a73f673f790e25b20fb743003d8e/c5738/lightbulb.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 55.99999999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA5klEQVR42p2Syw6CMBBF/f8fIOELSPgGNu4wEYxRNhoDC1TAohAeBQLXzqzYKI+76SRNz5zJdIOJNE2DsiwxDAPXU9n8u0zTFHVdQwiBLMuQ5zlD27ZdBiSboigYFoYhoijG55OpM2IwAbuuW2ZYVRWbJUmiOvTo+5YbxHHMzaSUywwpZCRlg1fi4x4eFfCNxyPiZosNKWQiRIoguOB82ip4oYDP9Uuh0Mi32xWet+e6VHbjKWYDx2O77gG2vYPv+z9Bs4G0BNM0YRiGsvT+2s0C0jfRdR2aprHhauD4oeM4sCwLc/IFRwtbSAK5pbQAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;a lightbulb&quot;
        title=&quot;&quot;
        src=&quot;/static/5d64a73f673f790e25b20fb743003d8e/5a190/lightbulb.png&quot;
        srcset=&quot;/static/5d64a73f673f790e25b20fb743003d8e/772e8/lightbulb.png 200w,
/static/5d64a73f673f790e25b20fb743003d8e/e17e5/lightbulb.png 400w,
/static/5d64a73f673f790e25b20fb743003d8e/5a190/lightbulb.png 800w,
/static/5d64a73f673f790e25b20fb743003d8e/c1b63/lightbulb.png 1200w,
/static/5d64a73f673f790e25b20fb743003d8e/29007/lightbulb.png 1600w,
/static/5d64a73f673f790e25b20fb743003d8e/c5738/lightbulb.png 2835w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Why Your Innovation Team May Be Stifling Innovation, and Other Strategy Lessons From Peas]]></title><description><![CDATA[Innovation is great. I think so, I’m sure you think so, and I suspect we all think so.
Innovation is good for business, and it’s good for us…]]></description><link>http://hollycummins.com/bonkers-beans/</link><guid isPermaLink="false">http://hollycummins.com/bonkers-beans/</guid><pubDate>Mon, 24 Jan 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Innovation is great. I think so, I’m sure you think so, and I suspect we &lt;em&gt;all&lt;/em&gt; think so.
Innovation is good for business, and it’s good for us, and it’s healthy.&lt;/p&gt;
&lt;p&gt;I like to think I’m kind of innovative; my job title is even “Innovation Leader”. I’ve written a mobile app to count fish using Watson, and I created the world’s first application server in a hat, and invented a &lt;a href=&quot;https://noti.st/holly-cummins/TQpfJM&quot;&gt;cuddly throwable application server&lt;/a&gt;. (Remember, not all inventions change the world. Or are useful.)&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/cd4d140808f6835fb93048017b5e28e9/bfe1f/throwable-application-server.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 42.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA+0lEQVR42pXS2UrDQBiG4d7/FXigYE+K4EKV2Ap1SdFAIVSkmNaCMQGTIBFzELM0k+U1KaYgok2+k2GGmWf+WTq0SFEU//ardGgZIRI8zyOMglr9AbcCn5cvjGWFg+6A7s4Jjm2vx5MkaQ7Wu69WEef9a0bSFKmnIu3NGN9MsC0LwzAIw3A7WGNVa1mv3F1NUc/ekAcPKLLG8Ejhw3vH9z+J43g7mOc5aZoiUsH8ccnx/gjl8r4EZ6i3GhNF/Z7X4A6zLMNxHHRdX1coRIlqC04PL+jt9lloTyQi/vXaf4Ku62Ka5uYodcVBEBLFUYnkzb9NtdD3/c1Ft8kXPvq23ItbFkEAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;a throwable application server&quot;
        title=&quot;&quot;
        src=&quot;/static/cd4d140808f6835fb93048017b5e28e9/5a190/throwable-application-server.png&quot;
        srcset=&quot;/static/cd4d140808f6835fb93048017b5e28e9/772e8/throwable-application-server.png 200w,
/static/cd4d140808f6835fb93048017b5e28e9/e17e5/throwable-application-server.png 400w,
/static/cd4d140808f6835fb93048017b5e28e9/5a190/throwable-application-server.png 800w,
/static/cd4d140808f6835fb93048017b5e28e9/c1b63/throwable-application-server.png 1200w,
/static/cd4d140808f6835fb93048017b5e28e9/29007/throwable-application-server.png 1600w,
/static/cd4d140808f6835fb93048017b5e28e9/bfe1f/throwable-application-server.png 2177w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;Barriers to innovation&lt;/h2&gt;
&lt;p&gt;And yet … like many of us, I wish I innovated more. Why aren’t we all innovating as much as we would like? What’s holding us back? In every organisation I’ve worked with, the barriers to innovation are depressingly similar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Time&lt;/li&gt;
&lt;li&gt;Money&lt;/li&gt;
&lt;li&gt;Ideas&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I’m not going to write about how to come up with better ideas, because there’s a lot of great material out there. Let’s talk instead about how to make more time. The answer is surprisingly simple. All you need is …&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/fb7f8b66401aee172ae7a573e05cd772/59058/back-to-the-future-car.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 61.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAACSklEQVR42n1T60/acBTl//+wZZ/MEiOJMtGJsk0ZAoItUFpaHisIlNaqCLalgjzUgVQ4u+2CmZPtJjfNL21Pz6s+0CwWC29XzXQyQadzg45hotu1MRgMMBqN8K/x/XlwQSfTKYbDIWazGSYEJssyuvYtLq5aiHyPInGShKadvzy/EvD6uo1W6xq39KKQF1H8IaNQLCGb5cCwaaiqhkwmi2ZTheM4+N/4Fos5kskUgsFdnND162EEOUFEmgAKBMwJeciVKhSl6Ul1nOdXit4APj094fSUQSj8BbufgoifsDgmWSW5Aqks45RhwXGc51+73SG2KmxS8jfY8uyzul2wfAlMTkKS5ZHNCeAFHkr9jMBTYIipZRm46/cxJX9d2aVyGee6Dl2/wHg8xnw+fwH1XbXaiCZYbAf3UKk10CS/YvE4bKMFSRTA8QIUYqU0FGjnOm77d3iksB5+PsKwLOiXl15IlmksJc+Q40UENgM4Oop40lwvS0UJWrMBwzRhkgqN2JgE4G6fqmPaNoFdIBQKY+9zEBk2gStqgpey262D/TDW1zdw8O2QJOeJZQIMectxOewfhBE9jlFQGajERlUVFMUM/Bt+vHv/ATG651pgmpab8m8ze70ezmp1FKpV6FSjS9qaokCUCtjaCmBt7SNEUfTSdn3UtCZq9bq3YqEIN4s3xV6Oa/KE0h8+PMCgRFPEdIdqFQhsw7+5hWgsDj4vIU9drZC3bQJznp9fAy5/v1Xdur+/h0ZhuQGlqfgNkndDHvaGI+/Dy5RdwF+CCWYidwZh9wAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;back to the future car&quot;
        title=&quot;&quot;
        src=&quot;/static/fb7f8b66401aee172ae7a573e05cd772/5a190/back-to-the-future-car.png&quot;
        srcset=&quot;/static/fb7f8b66401aee172ae7a573e05cd772/772e8/back-to-the-future-car.png 200w,
/static/fb7f8b66401aee172ae7a573e05cd772/e17e5/back-to-the-future-car.png 400w,
/static/fb7f8b66401aee172ae7a573e05cd772/5a190/back-to-the-future-car.png 800w,
/static/fb7f8b66401aee172ae7a573e05cd772/c1b63/back-to-the-future-car.png 1200w,
/static/fb7f8b66401aee172ae7a573e05cd772/29007/back-to-the-future-car.png 1600w,
/static/fb7f8b66401aee172ae7a573e05cd772/59058/back-to-the-future-car.png 2376w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;… a time machine.&lt;/p&gt;
&lt;p&gt;Of course, a time machine only fixes half the problem.
You’re also going to need office space (well, in 2021 maybe not so much).
And you’ll likely need cloud compute, or some cool bits of hardware, or external expertise. The way to secure those resources is …&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/a454e83fed2b68685acc0038098e2955/d2dd6/money-tree.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 64.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAAsTAAALEwEAmpwYAAABiklEQVR42p2Sy07CUBCGeW4fwBgXGkN0wYIFQQgRUCNGQEERQSCR+7UgFwFFgdIWKFDa/p4UQiQKFOdkNmfmfGfmn9FAhcmyBEmS1KRCsxJCAKMxj8GQRbVeAMN1wfMDiOJ0FidHFVCWZ4mf7Tpi6Sdkiy84v7TA++hAKHqHZquyyFEFHJOq6N4X4pkgLFYj7p8voDPswmQ9JlAnMvk4svkkhsP+ZuCUtNOhW0hlI/CHnXB57AiE3TDbtTCeHcHltSNHxRCJBAg0DrZPrwcKwoS0+oZoIgjHjQ2nNi10+n3sHexAbzjEtdsEs+0E0VgItUYRNNNeDxRFUYEybBcTYQSqkIHXcwX3rQNULodiOYXXSh4cy80F32bKc+E/mk0EfA/wE2eY3lJsq7Xh+RHRVIREPOjzoJBNK/eb9nHl2hQLFXDcbJL5dBLv9doiLkv/qFASJWW5FWAmhWqJWvpwOhUVzVUDfz6mux1wc/36/SGq5QYS0RyYHvtLUw22sMlEQImqKiBBEP5s+Rtx2OJT0CSXTgAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;a money tree&quot;
        title=&quot;&quot;
        src=&quot;/static/a454e83fed2b68685acc0038098e2955/5a190/money-tree.png&quot;
        srcset=&quot;/static/a454e83fed2b68685acc0038098e2955/772e8/money-tree.png 200w,
/static/a454e83fed2b68685acc0038098e2955/e17e5/money-tree.png 400w,
/static/a454e83fed2b68685acc0038098e2955/5a190/money-tree.png 800w,
/static/a454e83fed2b68685acc0038098e2955/c1b63/money-tree.png 1200w,
/static/a454e83fed2b68685acc0038098e2955/29007/money-tree.png 1600w,
/static/a454e83fed2b68685acc0038098e2955/d2dd6/money-tree.png 3399w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;… a money tree.&lt;/p&gt;
&lt;p&gt;What if you don’t have a time machine or a money tree? Well then, sadly, you’re in
the same boat as the rest of us. The good news is that there are ways to make time to innovate without defying the laws of physics or economics.&lt;/p&gt;
&lt;h2&gt;Strategies for making time&lt;/h2&gt;
&lt;p&gt;Techniques for building innovation into an organisation range
from a centralised innovation department to just … allowing slack in the system for grassroots innovation.
There are lots of options in the middle, too, such as hackathons and 20%-time projects.&lt;/p&gt;
&lt;p&gt;Before we discuss the tradeoffs of the various strategies, I’d like to share a story.
If you went to an American school, you were most likely taught about
George Washington Carver, who invented peanut butter. In fact, Carver’s
contributions to the science of ‘not starving’ were much more significant -
and he actually didn’t invent peanut butter.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/d42f107a0c5a9dd70197e3a364e306d5/aec66/george-washington-carver.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 68.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAAsTAAALEwEAmpwYAAABlElEQVR42pVT207CQBD1/7/FBKMPgD4YoyJiDAVCr/SyvWIvUMAWCrTHKUTjg8Rlks0mm5mzZ86ZuQBnlGWF/b78N+/ir8eqqn5OHUVRQB4J6L8+Y7Vc/uRwAe52O2y3W2JUUtGRkalP0Lm7gfDYhstMfsAahDk+vCCCLIpQFPXwPksStK4uIb53sVycwbBOCqYxRmMFt60mDMOkFlcIpwHazRauGw2MhwIWiwW/hvW/qqKAaRJin6HXe8csCvD0cI/hWwdZ7CKwdWRZxsewjvV6janL4NsGRgOBDBnAnogosxBTU8IHkzFP4j9bP+lyPSZhGEPo96ErEnrdF5jqGEwdEqiIdJbwA9bmHJluSEcDIbWuKTIsAkwDHZGtEOCMH/B3YujZMKQB6WnBlATEjobAUpHO53yAKTnoeh5y0nFTbA/sHG2IxJ0gi2x4hgiHMX6XUxoTjQpkXYdpOzAtC5o8RuQZKFIfCd3zE+xOtryhVQtJI1U3oFuMGPvIVitU+wL55xJ5np+3y9+/72gF97SK58QXveQ4pQHVl5oAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;George Washington Carver as an adult&quot;
        title=&quot;&quot;
        src=&quot;/static/d42f107a0c5a9dd70197e3a364e306d5/5a190/george-washington-carver.png&quot;
        srcset=&quot;/static/d42f107a0c5a9dd70197e3a364e306d5/772e8/george-washington-carver.png 200w,
/static/d42f107a0c5a9dd70197e3a364e306d5/e17e5/george-washington-carver.png 400w,
/static/d42f107a0c5a9dd70197e3a364e306d5/5a190/george-washington-carver.png 800w,
/static/d42f107a0c5a9dd70197e3a364e306d5/c1b63/george-washington-carver.png 1200w,
/static/d42f107a0c5a9dd70197e3a364e306d5/29007/george-washington-carver.png 1600w,
/static/d42f107a0c5a9dd70197e3a364e306d5/aec66/george-washington-carver.png 3166w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Carver was born into slavery in the American South, just before the Civil War.
As if that wasn’t a rough enough start to life, as a baby
he and his mother were abducted
by slave raiders. His master managed to recover him, but, sadly, not his mother.
When slavery was abolished Carver was raised
as a son by his former master. However, educational prospects
in his area were limited, so Carver travelled across the country,
working his way through school and then university as he did so.
Carver had a knack for plants, so he studied botany and went on to
teach it.&lt;/p&gt;
&lt;p&gt;Even after the abolition of slavery, life was bleak for African
Americans in the South. Cotton is an unusually needy crop,
and generations of cotton farming had
stripped all nutrients from the soil. The survivors
of slavery were left to try and scratch out a living growing cotton on soil which could not support them - or anyone.
The land, and the people,
were exhausted and hungry. It was hard to see a way out from
the vicious cycle of poverty; expensive fertilizers which might have restored the
soil were far beyond the reach
of farmers who could barely feed themselves.&lt;/p&gt;
&lt;p&gt;If you’re a keen gardener, you probably know that peas and other legumes
can fix nitrogen from the air and enrich the soil. Despite the name,
peanuts are related to beans, and also improve the land.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/551676dd9497d17127dec527d017620d/8deec/peas.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 64.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAABYlAAAWJQFJUiTwAAAB+klEQVR42pVTa3OaUBDl//+YTqfTZpx2fCQmigrh6uUhiCDgEzQ2VhyVx+mGTMxY+7D7Ze/e3XvYPXsQcIXleY4sy8n/u1b4E0CeZ9jGGyTJ8bf589r3WHgLfvWW3YXjmsV5tVqBcxVhGF0AZll2DpimKeLdDmmaFRdxHMMbu2h16thsvoN3GSRJgmVaqJUrlN9iEc5xOByKs+Pa9KGXeF8AC17ggg86GHoWaEq4vg1m1yEbd6jUvuLLpw9gigLdeERHqoH1G+B2C33TAGMyvlVKuLsvQZLbBHqEoDsMRiBCdRvwJyOEyxC94QN67i34UITEq5jOAvhTDt2pQuqXIbIysjTHZBrgnt1A0ZpEy/p1ZN2RYPhtKqzA8njBlyjdQrXb1IlE4FUMbAbLodiqomu28chbxWN/PIKolsAM8USZYDoqRksOzWtAsxT01BaiaFZ0MA8XREeZxlPQH3bgjJuUC4m7XfF4u43RkuuwHfN9KdEyomIN7ngIWaHRdfm0tehpQVx+ptEcOL4G26tjvpiebfp4THDYHy5lkyQp/MBB39JJfz+KO9PtgZk3eH5eYzYPwOkcTOwL/f1Vh7P5rABMkgwKLUC36sRPjv1+D2PQRE97oK7S6/+UNHstnkZjNLsfEZJ/sxftPa1XhZivBjx1upgQXxP8r/0EXI3VhVBYDEYAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;peas&quot;
        title=&quot;&quot;
        src=&quot;/static/551676dd9497d17127dec527d017620d/5a190/peas.png&quot;
        srcset=&quot;/static/551676dd9497d17127dec527d017620d/772e8/peas.png 200w,
/static/551676dd9497d17127dec527d017620d/e17e5/peas.png 400w,
/static/551676dd9497d17127dec527d017620d/5a190/peas.png 800w,
/static/551676dd9497d17127dec527d017620d/c1b63/peas.png 1200w,
/static/551676dd9497d17127dec527d017620d/29007/peas.png 1600w,
/static/551676dd9497d17127dec527d017620d/8deec/peas.png 2136w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;This is where Carver comes in. He discovered that by rotating
cotton crops with peanuts, farmers were able to grow more cotton.
Farmers loved the improved cotton yields, but they had a problem. Peanuts.
What should they do with all of these peanuts they were producing?&lt;/p&gt;
&lt;p&gt;At the time, peanuts were barely considered a crop, and were only used
for animal feed. While people were going hungry, peanuts were being discarded
as waste. This is Carver’s second great contribution.
Carver pointed out that peanuts were high in nutrients, especially high
in protein, and that they were also pretty tasty. He catalogued
peanut recipes and invented many more, such as chocolate-covered peanuts.
Carver’s work led to the adoption
of peanuts as an ingredient, which persists in Southern cooking
to this day. He also invented some surprising industrial
uses for peanuts, such as peanut shampoo and peanut nitroglycerine.
(A century earlier, Antoine-Augustin Parmentier was responsible for a similar effort to change the image of the potato.
Parmentier’s work led to the decriminalization of potatoes
in France, which just goes to show the history of food is stranger than you might imagine.)&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/dfd7a82b6bd230f1ebc98fdf7411f1b1/4352a/peanutbutter.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 53%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAABKUlEQVR42p2S3UvDMBTF9/+/Dfawl6FCR3EKQ5BOGgVBkbnNqbWwqavUbmOWMW3pR9om6zGZ+DY/2gOX3JDkx7n3poItyvN8E1JBEIAxhiRJ8B9VfjrwPG8DCcMQWZaBilzuZV4YGEXRVwh3getiZdvwFwvEAk4p/RW6FZgKJ7F4ZBGCca0Gq16HWa1ioutIOQcXLShccsoy2GcEU1XFi6Jg3tqHdaqDrdflekhpjIcuwaRH8CzWx2sdo8E5IlH29+AKAWWfnNtjzHotzIdtvHYPYPcPEUdBOWDKEiyNDq52G2jvNHDR3IM/OkGS0pJA4XBm6DA7Ki6PmrgnCt5MTXydtBxQ3neeDFgDDdM7HfaNBmc8BOMlhyLFGYf/vsLH0kXo++B/wCTwE5J2UBG+rFxXAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;a jar of peanut butter&quot;
        title=&quot;&quot;
        src=&quot;/static/dfd7a82b6bd230f1ebc98fdf7411f1b1/5a190/peanutbutter.png&quot;
        srcset=&quot;/static/dfd7a82b6bd230f1ebc98fdf7411f1b1/772e8/peanutbutter.png 200w,
/static/dfd7a82b6bd230f1ebc98fdf7411f1b1/e17e5/peanutbutter.png 400w,
/static/dfd7a82b6bd230f1ebc98fdf7411f1b1/5a190/peanutbutter.png 800w,
/static/dfd7a82b6bd230f1ebc98fdf7411f1b1/c1b63/peanutbutter.png 1200w,
/static/dfd7a82b6bd230f1ebc98fdf7411f1b1/4352a/peanutbutter.png 1364w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Carver was a prolific inventor, and his innovations improved
many lives, but I think there’s a deeper lesson in his story. The way
peanuts can enrich soil while also yielding a useful crop is
profoundly counter-intuitive. It’s like subtracting one from
one and ending up with four. Bonkers.&lt;/p&gt;
&lt;p&gt;Do we see these sort of ‘should be subtractive but are additive’ effects anywhere
else? I believe we see them in people.
If you ask a team to do the same thing, over and over again,
they get tired. They burn out. Productivity suffers.&lt;/p&gt;
&lt;p&gt;Rest helps revive tired teams, but sometimes a change is
as good as a rest. When a team is following its passion
and innovating, they’re inspired. They get a bounce in their step; their eyes sparkle
and they stay late just because.&lt;/p&gt;
&lt;p&gt;This is why setting up a dedicated innovation teams can sometimes
miss out on the full potential of innovation activities. Siloed innovation teams are a bit like repeatedly
growing cotton on one field, and repeatedly growing peanuts on a neighbouring
field. The innovation team will be having fun, but they may miss out on the experience of real world challenges
which would lead to more meaningful innovations. Meanwhile, the ‘business as usual’ team
risk being ground down by too much work and too little play. Innovation,
particularly Big Innovation, needs to be managed differently and funded
differently, so innovation teams play an important part in an organisation’s
innovation portfolio – but they shouldn’t be the only entry.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/2fc9a4bff55b0b62f66f450e04b2c4f4/1fec9/crop-nonrotation.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 45.49999999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsTAAALEwEAmpwYAAACIUlEQVR42mNgQAXMwsLCvECaBYgZGbADkDgrVA1BwJQYGioKYuzdsVl/946tcSCN8fHxAh4eHuwg8fr6eg5/NzdZkPjeHdsy586dpiQjI8OZlRXKg2HY1oWT1R4dW+txac+KgP1b119ZvLqnNqJF3aSw19fCx8eHq74+l+/stvnOr06tsz+ydf3M7VuWHcmbYG+TN8HFJr3cXwHFGx1luTKXdy52e3hgse3xPdtWrlo1q9sun0GzoM/fNq3cR85Vz5V7/7IZJg8Pr3I9v3dD6r7tG49mNjtapXRYW2S3uBvFx9tzwE2zt7dnqc/PF5jdWy+UmxvNt2bNGo3S0iReKz913qhMb8HQ0FDmmJgYbpB8eVoa/6xZE2VWrVolBwrL2OwAYZ80Hy5cYQgKJ5Ak061bt9h3797NDxH+D4sgoCuE+ECR9///f6YzB89IAmlGpMhCBT31RSL7V0zT2TC5Xmrvlo1L1q6fl2UczSWZ2xyuDPIFKBx3LpllsGNes+y+Leuqt25esdg9X14hq8ZXOz7eXwDFsJk99SJX9yzxfHFqg9/JPZs3bNqwaGtGn5lt0RQX54wad3WgtzmPbZxv/fzUGt/Lh7a07d66+mrNtAi/3KkO9lltXuawVAAGxsbGXMDwUTmyfpbB4fULjHdv3tiYWOmnFV1jpZ5e460Kkq8qKJA8sGqe7t4l3fL7t2/NmDm3z8UiXUg6rd5HIz4f4ToAhiTO54eCYDoAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;two fields, with the crops not changing position over the years&quot;
        title=&quot;&quot;
        src=&quot;/static/2fc9a4bff55b0b62f66f450e04b2c4f4/5a190/crop-nonrotation.png&quot;
        srcset=&quot;/static/2fc9a4bff55b0b62f66f450e04b2c4f4/772e8/crop-nonrotation.png 200w,
/static/2fc9a4bff55b0b62f66f450e04b2c4f4/e17e5/crop-nonrotation.png 400w,
/static/2fc9a4bff55b0b62f66f450e04b2c4f4/5a190/crop-nonrotation.png 800w,
/static/2fc9a4bff55b0b62f66f450e04b2c4f4/c1b63/crop-nonrotation.png 1200w,
/static/2fc9a4bff55b0b62f66f450e04b2c4f4/29007/crop-nonrotation.png 1600w,
/static/2fc9a4bff55b0b62f66f450e04b2c4f4/1fec9/crop-nonrotation.png 3808w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;20% projects&lt;/h1&gt;
&lt;p&gt;Many businesses recognise the value of rotation to spread the innovation fun,
and have adopted different strategies to support part-time passion projects.
For example, Google famously has a &lt;a href=&quot;https://www.inc.com/bryan-adams/12-ways-to-encourage-more-free-thinking-and-innovation-into-any-business.html&quot;&gt;20% rule&lt;/a&gt;
which allows employees to spend one day a week on projects of their choosing. Many Google flagship
products, such as GMail, Google Maps, and Adsense, originated from this part-time employee tinkering.&lt;/p&gt;
&lt;p&gt;There’s a problem, though. Often, &lt;a href=&quot;https://qz.com/115831/googles-20-time-which-brought-you-gmail-and-adsense-is-now-as-good-as-dead/&quot;&gt;takeup is low&lt;/a&gt;, and the program
ends up being a headline, rather than a reality. This isn’t because of leadership malice; it’s
just that there is always more work to do than there is time.
Our day jobs expand to fill the contracted working hours, and then usually
expand beyond them. We’re bogged down by day-jobness.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/baabf619666c50b77f13e481df467c60/17d12/bog.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 37.99999999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAmklEQVR42qWRwQqCQBRF5/+/IdyW0a5aVCiUBBViEREq5MxEZCq1nhlmvJEgtH9n9biLw+Nehj+sdWjbFhRYL8izHN7AgzGGJuyPVRBiNPbBOYfWmiZUSiE6xFhsIlzTFNY5mlA+BPzpEK+qBhcCdylpwm0cYh5M8P40XegoH+7jHZbrGY7nBKdL0oWUpdmvs6pucCsKPMsSVL7g72+6UL5B1AAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;a person wading&quot;
        title=&quot;&quot;
        src=&quot;/static/baabf619666c50b77f13e481df467c60/5a190/bog.png&quot;
        srcset=&quot;/static/baabf619666c50b77f13e481df467c60/772e8/bog.png 200w,
/static/baabf619666c50b77f13e481df467c60/e17e5/bog.png 400w,
/static/baabf619666c50b77f13e481df467c60/5a190/bog.png 800w,
/static/baabf619666c50b77f13e481df467c60/c1b63/bog.png 1200w,
/static/baabf619666c50b77f13e481df467c60/29007/bog.png 1600w,
/static/baabf619666c50b77f13e481df467c60/17d12/bog.png 1666w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;Hackathons&lt;/h1&gt;
&lt;p&gt;To counteract this, some organisations organise hackathons.
The idea is that employees go somewhere, eat junk food,
drink too many caffeinated beverages, stay up late, sleep on the floor, and build exciting
prototypes. The problem is that hackathons almost always happen on the weekend.
The time shortage is being ‘fixed’ by taking a chunk out of
employee’s personal time.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/7e90e921b66094d8ab037b21444c916e/73caa/sleeping-bag.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 51.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAAsTAAALEwEAmpwYAAACBElEQVR42m1TDU/aUBT1/24JbolBtoCCCIgoiAvsI2ZqYoJZTHSRDQhbYWNQ52QFCqXUWoxZIkscOibGlfbsVulGM29y0/f63jnvvHPvG8NI6JoGbTC4SV3X//7/TXOV1u6Kgbl3uH/MQjiycNHp4FRRILMsxJ0dyteQ3r3HYS6HVj4PMZOBxORRyKVRSb3Fr7MzK6FBdt3vQ/5UBLe1hYPIEhj7JIq2cYhOJ+puN/jpaXA0/urxgPf6kfY9Rjq5goxzCq1s9pbQvFr/RxeZ+RC2HzxEicD7BPpos6HieAR+ZgbtaBRVlwvVQABNvx9sKIhCaRO57RWIkSgOd3ehmgoNUnZtDa/u3UfB7QEXDoN1TWFvYgLKwgJqvlm0vF7USB1PZI1ZP5jEM7CfN5GNL6MVnEd1dRWaSaheXqIYiyHlcKCy/IQIIyj7fGiQGonGhqKy3X77JbVCIIg3L8NIJaI48M9hzzGJE64y9HB45eurKwgMg/LzF9inE+uhEJT4UwjkpUQqG2RDPTAHnrJNagrk74dxG74sLuKb0DQLYS2KET+7XcilEjgCiaRajsUhk38nNDaK0iTlx+vrkMizTo2/KeQo3kKoj/Sa0XunkoQjqp6wsQGRSI4SCSjJJL63j6H9A1pw//WhNmxu04oBzXu9Hi7Oz9EnNbp5uPEAVNVCZhD+AdB/r4msknkCAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;a sleeping bag&quot;
        title=&quot;&quot;
        src=&quot;/static/7e90e921b66094d8ab037b21444c916e/5a190/sleeping-bag.png&quot;
        srcset=&quot;/static/7e90e921b66094d8ab037b21444c916e/772e8/sleeping-bag.png 200w,
/static/7e90e921b66094d8ab037b21444c916e/e17e5/sleeping-bag.png 400w,
/static/7e90e921b66094d8ab037b21444c916e/5a190/sleeping-bag.png 800w,
/static/7e90e921b66094d8ab037b21444c916e/73caa/sleeping-bag.png 1110w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;More generally, employee ‘passion’ can be used as a means of extracting
extra labour from the workforce, without extra compensation. Loving
one’s job is good, but it shouldn’t be a lever to enable exploitation.&lt;/p&gt;
&lt;h2&gt;Off-plan post-release weeks&lt;/h2&gt;
&lt;p&gt;“Off-plan post-release weeks” are one of my favourite innovation mechanisms.
The name isn’t great, because I made it up. The origin is an experience
I had in the WebSphere product team, many years ago. Back when we only released
infrequently, releases were a big big deal. There was always a bit of a
rush to meet the release deadline and get as many features as possible onto the train before it left. Here, ‘bit of a rush’ is a nice
way of saying ‘increasingly stressful period of evening and weekend-working’ (this is a great reason to make
releases more frequent, but that’s a separate topic).&lt;/p&gt;
&lt;p&gt;Once the release was out the door, there’d be a collective flop and let
down of adrenaline among the development team. To make up for
desperate weekend-working grinds, we’d get all time off. (Have I mentioned
that more frequent releases are a great idea with many efficiency benefits?)
If the release had just been mildly exhausting, we’d get a different kind of treat.
All plans and schedules and backlogs would be shelved for a sprint, and the team
could work on whatever product features they liked.&lt;/p&gt;
&lt;p&gt;It sounds like a rough deal that we after working really hard our reward was … the opportunity to
do work.
But it was great!
The team loved it, and some of our best features
came out of those off-plan weeks. What makes this model stickier than
20% time is that the whole team took it at the same time. Day-to-day
commitments couldn’t derail the innovation work, because they all went away.&lt;/p&gt;
&lt;p&gt;The success of “free time to do work” as a reward shows the importance of autonomy; allowing teams to decide what to build, even for just a sprint, made people happy and unleashed a flood of innovation.&lt;/p&gt;
&lt;h2&gt;Slack in the system&lt;/h2&gt;
&lt;p&gt;What if innovation could happen &lt;em&gt;without&lt;/em&gt; any 20% rules, or post-deadline-exhaustion,
or junk food and Coca-cola? What if we just … had enough space to come
up with great ideas, and then had enough time to try them out?&lt;/p&gt;
&lt;p&gt;Well, it’s a bit utopian. Most of our workplaces aren’t so luxurious.
But that doesn’t mean we shouldn’t strive for space.
There’s a growing body of evidence that healthy workspaces, with &lt;a href=&quot;https://itrevolution.com/westrums-organizational-model-in-tech-orgs/&quot;&gt;generative cultures&lt;/a&gt;
and happy employees, are associated with higher business performance.
An over-emphasis on productivity metrics, like &lt;a href=&quot;https://twitter.com/holly_cummins/status/1448346379080843273?s=20&quot;&gt;other metrics&lt;/a&gt;, could &lt;a href=&quot;https://web.archive.org/web/20230203140605/https://madned.substack.com/p/the-value-of-screwing-around-at-work&quot;&gt;actually be &lt;em&gt;lowering&lt;/em&gt; productivity&lt;/a&gt;.
Even &lt;a href=&quot;https://www.bbc.co.uk/news/business-57724779&quot;&gt;five day weeks&lt;/a&gt; might be lowering productivity.&lt;/p&gt;
&lt;p&gt;What does this mean in practice? As leaders, we need to re-evaluate how reliant we are on superficial productivity metrics,
and shift to thinking about outcomes instead.
What might look like a spontaneous employee ball-game involving maltesers, comedy hats, and wastepaper baskets, could actually be
an employee wellness experience which is
getting blood circulation going, improving employee health, and averting (expensive) staff burnout. What might look like &lt;a href=&quot;https://www.forbes.com/sites/susanadams/2012/06/18/eight-ways-goofing-off-can-make-you-more-productive/&quot;&gt;goofing off&lt;/a&gt; or daydreaming could actually be laying the foundations for a breathrough innovation.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;In the &lt;a href=&quot;https://hollycummins.com/innovation-fizzles/&quot;&gt;next part&lt;/a&gt; of this blog, I’ll talk about choosing innovation winners, innovation funnels and innovation fizzles and the perils of MVPs.&lt;/em&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[(Developer) Joy to the World]]></title><description><![CDATA[I love this time of year. There
are so many celebrations,
both new (Kwanzaa) and ancient (Winter Solstice).
My friends’ timelines become a…]]></description><link>http://hollycummins.com/joy-to-the-world/</link><guid isPermaLink="false">http://hollycummins.com/joy-to-the-world/</guid><pubDate>Tue, 21 Dec 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/34ec7b8f79c7e0ae99024d45e6612363/f439d/holly.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 44.49999999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsTAAALEwEAmpwYAAABFUlEQVR42p2SYUvCUBSG98uzvxAIYZlo+iHSiEmSrE0mdzZRw0rdBlZbjK1SlFoK2bb7xoZCVBva8+new+HhPedeBhG4rgtFVzB46OPRMsJ7AKUUcTB/FalPUe+KSLI7SFf3kOdzaCltTDUNH46zbKLrCwPMFxOn5CSUlRollCsFyFsJ2ITEJmXi4nu+j/F4hMn7KzSBB9lOYFgs/i9hwOJzgY7aQVliIbZF1K9E9Ia3q8VsJvQ8D42ehAyXRpbLQL65RK3L45gcwXgyIsf+JVw1Td8myAoH2GWTKFwcwnq2cN6sIC/kMND7GwiXozhzB01FhnRNYI/s8OW5VhX7Zymourq+8GfS7+fZfIZ78y5cR9Q//AJQbKsLlkVw2wAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;holly&quot;
        title=&quot;&quot;
        src=&quot;/static/34ec7b8f79c7e0ae99024d45e6612363/5a190/holly.png&quot;
        srcset=&quot;/static/34ec7b8f79c7e0ae99024d45e6612363/772e8/holly.png 200w,
/static/34ec7b8f79c7e0ae99024d45e6612363/e17e5/holly.png 400w,
/static/34ec7b8f79c7e0ae99024d45e6612363/5a190/holly.png 800w,
/static/34ec7b8f79c7e0ae99024d45e6612363/c1b63/holly.png 1200w,
/static/34ec7b8f79c7e0ae99024d45e6612363/29007/holly.png 1600w,
/static/34ec7b8f79c7e0ae99024d45e6612363/f439d/holly.png 2189w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;I love this time of year. There
are &lt;a href=&quot;http://web.archive.org/web/20230329145857/https://www.shondaland.com/live/family/a34874979/a-look-at-the-most-widely-celebrated-winter-holidays/&quot;&gt;so many celebrations&lt;/a&gt;,
both new (Kwanzaa) and ancient (Winter Solstice).
My friends’ timelines become a happy jumble of Christmas, Hanukkah, and the New Year. Imprinted in our modern
traditions we can still see the shadow of older holidays, such
as &lt;a href=&quot;https://theconversation.com/the-holly-and-the-ivy-how-pagan-practices-found-their-way-into-christmas-52343&quot;&gt;Yule&lt;/a&gt;
and &lt;a href=&quot;https://www.historytoday.com/archive/did-romans-invent-christmas&quot;&gt;Saturnalia&lt;/a&gt;. The appeal of celebration is so
strong that even countries with no religious connection to Christmas get in on the Yule fun with showpiece trees and (
slightly
baffling) &lt;a href=&quot;https://www.bbc.com/worklife/article/20161216-why-japan-celebrates-christmas-with-kfc&quot;&gt;Kentucky Fried Chicken rituals&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/reillyusa/status/1469226043575881734?s=20&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 105%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAVCAYAAABG1c6oAAAACXBIWXMAABYlAAAWJQFJUiTwAAAE0ElEQVR42nWV+1OTVxCG+TvaGX+pWqeDrY4DrQyKRTtQEAGlCMqdEK6C3BIxRG4BBCKIYJGbECQoiIBAuVgsU6uIooKACIKAo/VObYWES4CnXyJaLbozO9+eM2ffs++e3f2MRh+MMzDcw8TLp9zu7efOwF3h28eDh494+Odjnj1/weOnz5j46xVardag09PTTE7+g/b1a8GeMaw1wv7U1BRGlbXNRCYm8PLlE3r7Bxgauke/ADp8f4zRsXGD3h8dE3ScMcEef/CQR0/GGbp2hcmh+8zodEwvXaK/zGhycoqJv6cYu9dHU2UudepcasqOUHMqhcrSNK60llFTnkllSQpVpRlUq47S3lBCXVkm/beusrAIWo3GAKhXo+lpLXq5crGO6hPRnDgcRobcm9wkV3IOuaJOdCFH7kKWYGfIfUmWutPReJx9rmY0nSsx+GoEqu8ANZopw2ZrQzlN6kRSD3oSF+1NdpIPJ5M9ke7eRLrEkWMKHxSxAXg4baKrTYXE35721to3gJoPADUs6iNsr6G95gj7xQ6Eip1QKsJQ7LMm3OU7YkTfk54QQmyUL3sdzelsKych2oNffzn7McA3EdbXnqHxzFHkkT/hs9eaQ3ESDortCNxuSpSDOXLpPrzcHLC3MuWPFjXxEhF15yoMvlPvU9ZqNczPL9Dbc104WIE0zImdtiaEB7sR5WGLu8Ua/K3WEyFywmuPFa6Om2mpK+FSWz0D/d0G37eltASoRaebZ/Bun/AwNRyI9ideFsgxpRTRji34ma8lxM6EdFkABXkpJMrEtNaf4vSpAi60NC5R1vwvh0ISL15spblejUwSRHamguL8HMI87PG1NiXCxRLFARHFBdmEBHlw9nQReXlZ1NZ9JIdvItQxMDTEheZaoiShKBKlKFNicdm8kWBbMxzWrSbAxhxFfCQ+gd6o1YVc7uyk984AC/PzyynPzekYGRmhoeEsiclxHC/MJV4qxuVbYzzNvsHTYh2iLSakpsqJTYihoryI5pYmurq6BHaLyynr5XzjeYqKTwhRxBCrPIr/Xme8bUyQ7fkBT3NjfLebIQsPICBETFV1FWGRwajKS5a/sn6hF1VFOWnKdLJTZMgOHxPqzYogBzN8TNfisvpzfLd9TYCXI35euyjJz8LbT0RpmerTgPlFpfj5eFGVl05WehJBjtuQ2G5ll4kxrlbGuG01RrrTBnmoWEhHCLZbLWioqVoO+F9hn0O23x9VdgoSdyfs1q/EZ+MGrDd8hbOdKV47TNltsgG5v4iM+AjCfV1pa6r7ROsJZXP10m8UZiWRHh+N6yZTLL9cgeW6LxA72nPQxQubNavwsLIkJDAA1c9Z5Aip6RR8ltWhfvTMCzOo+/plVDkpKGOCSBHvJtjZGovPVpC8051wK0fsV66iQB5KYUYcBcok4Wyq4NNhGF8fAgqtpxPaZ7j/FuXZhziZJkGdGUO20BEyVyfkzrsQ/biZtEA3TioiKE47QIkylup8JcN3egzB6DE+qMPZ2VlePH/KUG+X4dBw3w0GuzsY6r/Jvf4bDNzsYLDvJt3XLnO783dGBnoYHezj1cQLpjTadxPbADgzM4NeNdppdPr4l2RBsGeEgn9f5oSen56ZE2guGkbe7Owcr4X/ylsMvf4Lh0EEdRVi/VcAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Merry Christmas from the United Arab Emirates.&quot;
        title=&quot;&quot;
        src=&quot;/static/68e733846a5b63fba4aac51a1b31d4f0/5a190/christian-reilly-uae.png&quot;
        srcset=&quot;/static/68e733846a5b63fba4aac51a1b31d4f0/772e8/christian-reilly-uae.png 200w,
/static/68e733846a5b63fba4aac51a1b31d4f0/e17e5/christian-reilly-uae.png 400w,
/static/68e733846a5b63fba4aac51a1b31d4f0/5a190/christian-reilly-uae.png 800w,
/static/68e733846a5b63fba4aac51a1b31d4f0/51800/christian-reilly-uae.png 1196w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As the lights go up and I fill my house with fir, holly, and mincemeat, I feel fulfilled and content. Mostly. There are
some useful lessons for software development from our approach to the winter holidays.
Or maybe it’s the other way round, and we can get better at the holidays by importing some software development
practices.&lt;/p&gt;
&lt;h2&gt;Enabling constraints&lt;/h2&gt;
&lt;p&gt;Why do so many joyous holidays happen in what is, arguably, the worst time of year? December is cold, wet, and dark.
In my part of England the damp gets into your bones and the sun sets at three in the afternoon. Celebrating in this
miserable environment isn’t a ‘despite’, it’s a &lt;em&gt;‘because’&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Many of our Christmastide customs are imported from northerly countries, where if anything it’s even colder and darker.
Our winter traditions are about the joy of light in the darkness; fairy lights, candles, and illuminated garden
displays.
We bring the light not just into our houses but into public spaces, so it can be shared. On my run this morning, I
noticed that someone had done some joyful civic-minded guerilla decorating and hung baubles on the trees in my local
arboretum. No one does that in the summer.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/8eddd0f6ede1ef9a99de78ebd768a46d/951a4/tree.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 59.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAABQ0lEQVR42q2SXUvCYBiG9yf7JiJxYpFKdjAH0oFCNTNB0iQoiTFWPyCQPhCkEyvQWiFJ1EEzZy7oQ1k13e5GtgNBs4nv2ct7vxfX83ATGPAhegW0pgq5fIOGqgwGCP0Lx4csZFlsXXW9P6D5UfmoI7IbBp/ioH4q/Rtqv8DUyQFcMS+obT8y2XTb27+Bpl1NqSOUZDC7Pg9P0gd2nzN2qlk3NIGPkohRagwjq3Z44x64GDeK97d/WhKdx21ZJPa2MM2QcCTcsEXnMBlyIl+4bMv0BJp2DyXRsPLBvubEhGE4Hp/B8JINR6dpa0AzmLu+AL1B/dgNRUmQCRemwjbQO0FojWbXChGd7KrPVaywESxs+rHILSPIhxHgQ3DE3KC5AN5rNWvAl7dXnF/lkBXOIEolVJ4qKMsShLsC8kXB6KbSFfgNv6V+I1AYjjIAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;christmas tree&quot;
        title=&quot;&quot;
        src=&quot;/static/8eddd0f6ede1ef9a99de78ebd768a46d/5a190/tree.png&quot;
        srcset=&quot;/static/8eddd0f6ede1ef9a99de78ebd768a46d/772e8/tree.png 200w,
/static/8eddd0f6ede1ef9a99de78ebd768a46d/e17e5/tree.png 400w,
/static/8eddd0f6ede1ef9a99de78ebd768a46d/5a190/tree.png 800w,
/static/8eddd0f6ede1ef9a99de78ebd768a46d/c1b63/tree.png 1200w,
/static/8eddd0f6ede1ef9a99de78ebd768a46d/951a4/tree.png 1355w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The dark and cold is an example of
an &lt;a href=&quot;https://hbr.org/2019/11/why-constraints-are-good-for-innovation&quot;&gt;enabling constraint&lt;/a&gt;.
Our response is to turn a defect (cold, dark, brr) into a feature (twinkling lights everywhere! mulled wine! thick
socks! hygge!)
The apparently unpleasant external conditions allow a
flourishing of creativity.&lt;/p&gt;
&lt;h2&gt;Why we misunderstand efficiency&lt;/h2&gt;
&lt;p&gt;Every December, I go through the same cycle. In the run-up to Christmas, I get more and more excited.
I start making lists of &lt;a href=&quot;https://daily.jstor.org/the-gendering-of-holiday-labor/&quot;&gt;all the things&lt;/a&gt; I’m going to fit in
this year - Christmas cards for all my acquaintances with long, detailed, personalised messages!
Homemade Christmas cakes with homemade marzipan! From-scratch mince pies! Cranberry and pistachio florentines and
vanillekipferl for all my office-mates and neighbours! Carefully selected, thoughtful, touching gifts for everyone on my
list! Carol services! Skating! A well-architected gingerbread house! This will be the year I really master Christmas
floristry! Meaningful family moments!&lt;/p&gt;
&lt;p&gt;And then there’s the house. Who doesn’t want an insta-worthy home at the holidays? Yesterday I spent £130 on LED pillar
candles to try and
make my staircase look like a photo I saw in a magazine. (Spoiler: it’s still not going to look
like that picture and no one in the household is quite sure where these candles are going to be stored the rest of the
year.)&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/dd8b475d85974f6d7038c2805124a6d6/6fa81/candles.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 57.00000000000001%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB1klEQVR42p2S3YsSURiH/Vuj2yUI6iLCi5B2a6GLIhXaYmvZj9oIUTdYdxNpTZ3d0Rk3v2d0/BhdSwlxwa+ceZrUZKOU6Fycc1445znP+fHaWDZMA8P4jmnOSqu25qVXbIth06WcEbjstCf78Xgwg/4H0DAM8jkJMeIhk4oxHPVRkic0qsrM1pyc+QfgVG04HCJLR5S0CFJ43wIf8FkOk0yc0O125lDTNBcDr776EyglAghRL7LgJykGLOMzGvo53U6LWqvBK88O7469DEaDmYr5J9C0gKZhWnmNSUpB4mdemhdpWl8LaKrIRe0cRcty49Ed7j6+h1Itzu/ODX9ZReIRdn07+I99ZIpptt64SIh+VDVKtSJRUk8taIRavcgnWcD9egPn3jMCseA8LdtVelkvs/58jdsPb7K+cR/Xy1VScgBFiaJpcSqlU0qFCHpd4+0HD1v+XTwhP0JapDfs/y3DqenT7SccBP20mhq59EfaX3J8axdp1NMI0iHesI9raytcd6zgcD5Ab+jzb/8GNGbAvJrnfeiQTe82rj03zn03Dsvc/sLBLZcd++YqR1IIrVmZZD0eG8v7sNe3eq5WJFXKImZl4jmZsByjoKt0e5f0R/2Fjf0DeAspAU4RGPIAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;candles and greenery&quot;
        title=&quot;&quot;
        src=&quot;/static/dd8b475d85974f6d7038c2805124a6d6/5a190/candles.png&quot;
        srcset=&quot;/static/dd8b475d85974f6d7038c2805124a6d6/772e8/candles.png 200w,
/static/dd8b475d85974f6d7038c2805124a6d6/e17e5/candles.png 400w,
/static/dd8b475d85974f6d7038c2805124a6d6/5a190/candles.png 800w,
/static/dd8b475d85974f6d7038c2805124a6d6/c1b63/candles.png 1200w,
/static/dd8b475d85974f6d7038c2805124a6d6/29007/candles.png 1600w,
/static/dd8b475d85974f6d7038c2805124a6d6/6fa81/candles.png 1856w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Sometime around mid-December my partner finds me in tears on the kitchen floor because I haven’t sent a single card,
I’ve missed the last posting date for Canada, my attempt at a hand-crafted fir garland looks like a rat king, I don’t
have any gift ideas for anyone which means everyone will be disappointed with me on Christmas morning, and it took me a
whole evening to half-finish one small batch of cookies and there’s six more batches to go and I don’t even know how to
make Turtles.
Oh, and I’m still catching up on the bulb-planting I should have done in the autumn and also trying to do some coding in
the evening and I have a work deadline. &lt;a href=&quot;https://www.agilealliance.org/glossary/sustainable/&quot;&gt;Sustainable pace&lt;/a&gt; got
abandoned somewhere in November. The ritual Christmas meltdown is as drearily predictable
as &lt;a href=&quot;https://erikbern.com/2019/04/15/why-software-projects-take-longer-than-you-think-a-statistical-model.html&quot;&gt;schedule over-runs&lt;/a&gt;
on software projects.&lt;/p&gt;
&lt;p&gt;Every year I tell myself that if I’m properly efficient, I can fit it all in. But efficiency isn’t doing more with less,
efficiency is just doing less. This is the principle behind lean software development and the MVP.&lt;/p&gt;
&lt;p&gt;But doing less is hard. It’s really hard. Somehow, I haven’t learned the lessons from my annual
Christmas &lt;a href=&quot;https://www.irishtimes.com/life-and-style/health-family/parenting/why-do-some-women-feel-a-murderous-rage-at-christmas-1.3322999&quot;&gt;meltdown&lt;/a&gt;.
Doing less means giving up on perfection. It means living with defects and missing features. Organisations find this
really hard, too. When I was a consultant in the IBM Garage, de-scoping MVPs to be genuinely-minimal was one of
the &lt;a href=&quot;https://www.digit.fyi/comment-why-i-never-want-to-build-another-mvp/&quot;&gt;hardest parts&lt;/a&gt; of my job. As an industry we
haven’t really
got the hang of success metrics that aren’t focussed on doing as much as possible.&lt;/p&gt;
&lt;h2&gt;The value of rest&lt;/h2&gt;
&lt;p&gt;This is a shame, because a growing body of evidence suggests that long hours and piling on the pressure
actually &lt;em&gt;hurts&lt;/em&gt; productivity. In &lt;em&gt;A Christmas Carol&lt;/em&gt;, Bob Cratchit famously
worked &lt;a href=&quot;https://warnerbros.fandom.com/wiki/Bob_Cratchit&quot;&gt;sixty hour weeks&lt;/a&gt; (the standard at the time) in miserable
conditions. Working hours have been steadily &lt;a href=&quot;https://ourworldindata.org/working-hours&quot;&gt;reducing&lt;/a&gt; since the end of the
nineteenth century, as employers figured out that if their employees worked shorter hours, they would be more
productive. This was empirically validated by &lt;a href=&quot;https://ftp.iza.org/dp8129.pdf&quot;&gt;British wartime research&lt;/a&gt; in munitions
factories, which found productivity declined sharply above 50 hours a week. Above 55 hours, productivity dropped so much
that the extra hours were effectively wasted.&lt;/p&gt;
&lt;p&gt;Of course, most of us don’t work in industrial settings, and our output is harder to measure. But knowledge worker’s
hours have been steadily
creeping up. That trend is now at least partially reversing, with some companies adopting a four day week. Paying staff
the same for
working fewer hours seems bonkers, but the evidence seems to be
that &lt;a href=&quot;https://www.bbc.co.uk/news/business-57724779&quot;&gt;productivity stays the same or even goes up.&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;The value of joy&lt;/h2&gt;
&lt;p&gt;A crushing grind hurts employee morale, and that affects outcomes. If a work environment
is &lt;a href=&quot;https://hbr.org/2015/12/proof-that-positive-work-cultures-are-more-productive&quot;&gt;positive&lt;/a&gt;, on the other hand, there
will be fewer sick days, fewer costly errors, and staff will actually work &lt;em&gt;harder&lt;/em&gt;. The business will do better. The
same principles apply even to &lt;a href=&quot;https://hbr.org/2012/01/positive-intelligence&quot;&gt;individuals&lt;/a&gt;; one researcher found people
with a positive mindset
are &lt;a href=&quot;https://www.ted.com/talks/shawn_achor_the_happy_secret_to_better_work/transcript&quot;&gt;31% more productive&lt;/a&gt; than those
with a negative mindset – or even a neutral one.&lt;/p&gt;
&lt;p&gt;I’ve written and &lt;a href=&quot;https://www.youtube.com/watch?v=Ob7PxkPCY8s&quot;&gt;spoken&lt;/a&gt; about this a lot, arguing
for &lt;a href=&quot;https://www.onrec.com/news/statistics-and-trends/new-study-reveals-fun-at-work-can-boost-productivity-and-reduce-sick-days&quot;&gt;fun in the workplace&lt;/a&gt;.
I chose to talk about fun rather than happiness or positivity because it’s less obvious
that fun at work is good; our natural Calvinist assumption is that happiness might maybe be a bit ok but fun is morally
dubious and certainly not the sort of thing we should indulge in at work. Incidentally, the same sort of Calvinist
thinking led to Christmas
being &lt;a href=&quot;https://web.archive.org/web/20230318041714/http://www.uwyo.edu/uw/news/2015/12/uw-religion-today-who-was-against-christmas.html&quot;&gt;outlawed&lt;/a&gt;
in Scotland in 1583, England in 1647, and Boston in 1659. Christmas wasn’t recognised as an official public holiday in
Oklahoma until 1907. Scotland waited
until &lt;a href=&quot;https://www.christiantoday.com/article/a-merry-calvinist-christmas-to-one-and-all/122087.htm&quot;&gt;1958&lt;/a&gt;. The root of
the objection was just that people had too much fun on Christmas.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/becea1989f1319aace7a285a4214cf84/49853/puritan.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 49%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAAsTAAALEwEAmpwYAAABx0lEQVR42o2S/08ScRjH/TNbP/QHVJq1mYo68wsQYctgCiopa6UjZTnb2mhh39ZiKkd1YFM56g7aOIWwX7wOuHt1XoOJ6OzZnu159vk8rz17P+8OLgrTtNNstqadjfp0dJzFqNVqVCoVVFXFMOptkJO1YRhnAxufNE1jbe0Fc7MhZmfmSAkpvn35SqVctt/V4j5ZSbLrnFwg9yPfMt8GzOcLzD9awO+bwu+fJvL4CcrSIsqzZb5nMhSsrXOyTCKVJiYWiW4pyMVyk9EENlZPCZ9t2D3PBJ67XqangkiRCAeBAMLqKuUjDfVgnzebIi+3fxH6ICPs/fzHOAlsaBN/vW6DnONuXE4r3V5iC2HEcJiddIackmdnL0tmN0s8uUtiW0HXq60aVnWd5FaSxadLDA+NcO1qFyN3RnG7PHR13sQxMEzwWNPQPB8/JdCrVerWsbQ/R9TrtfajCEmBYGAG36SP3p5+Ll+6wtiok/sTD+i+cYvO692Mj7msrV2srERPucpsB0pZiUhkmYeTfnuwr3cAR/8gt3v6bOCgYwivpWk0+pxSqXSuB1uufHj4G8myw7FN4vF1YrFXvHv7no2NTUQxbfvyf+IvX1rEGnl3XEwAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;puritan hat and baubles&quot;
        title=&quot;&quot;
        src=&quot;/static/becea1989f1319aace7a285a4214cf84/5a190/puritan.png&quot;
        srcset=&quot;/static/becea1989f1319aace7a285a4214cf84/772e8/puritan.png 200w,
/static/becea1989f1319aace7a285a4214cf84/e17e5/puritan.png 400w,
/static/becea1989f1319aace7a285a4214cf84/5a190/puritan.png 800w,
/static/becea1989f1319aace7a285a4214cf84/c1b63/puritan.png 1200w,
/static/becea1989f1319aace7a285a4214cf84/29007/puritan.png 1600w,
/static/becea1989f1319aace7a285a4214cf84/49853/puritan.png 2224w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;At Christmas, actually, we go beyond mere fun, and we strive
for &lt;a href=&quot;https://www.ted.com/talks/ingrid_fetell_lee_where_joy_hides_and_how_to_find_it&quot;&gt;joy&lt;/a&gt;. Just like fun, joy at work is
&lt;em&gt;good&lt;/em&gt;. Think about that amazing feeling of
finally finally &lt;em&gt;finally&lt;/em&gt; figuring out a thorny bug: what you’re feeling is joy. Some businesses place so much emphasis
on employee
joy as a strategic advantage
they’ve &lt;a href=&quot;https://www.forbes.com/sites/kevinkruse/2015/02/05/richard-sheridan-menlo-innovations/?sh=3611b5195144&quot;&gt;encoded it&lt;/a&gt;
into their corporate identity.&lt;/p&gt;
&lt;p&gt;There are a lot of words for ‘good feelings’. I sometimes use them interchangeably, but there are nuances and a range
of ‘exactly how good do we feel?’ and ‘how much would Calvin object?’ values. I’ve tried to untangle some of them below.
My categorisation of ‘perceived utility’
is pretty unscientific, but the important thing here is that there are two axes, not just one. Being useful and feeling
good is a (possible)
&lt;em&gt;and&lt;/em&gt;, not an &lt;em&gt;or&lt;/em&gt;. I did include the opposites, but not too many of them, because it’s Christmas, and who wants to look
at a big list of miserable things?&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/e7dbda24ce02608feba8648be13c8e1d/aae30/funtinuum.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 67%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAABYlAAAWJQFJUiTwAAABgklEQVR42p2TCY+CMBCF/f+/ThI13rByQzlaaMshvu00i8mu6x5OMpEU+82bN8MCT+J2u2EcR5vTNOGvsfgeNiFnORzHwXK5xGazsQVeAtJF2UmkRQI/9MFYgTzPoToF3Wn0Q/87kCCzAq01LuEFjRZQvbJnBCtFiaqtULe1ufAPhVmewVk7kL2E1BJKKwOpUDUVGGcQDScFPwMZYzYp+r5HksZouxYpSy00K1Kc/RNKXtoBTbfpZyBBKCna1oDSFILXiKLAWKAsVCqJrusgpURRFE+H9NAyFwJhEKA2KaIIRZIYmLIQLrgFUnFSer1evwcOw2Cr085xzhEaUFeZIYQBzt4J+/MeQRLg4B4QpxGEKUpgGmBd11BKfQbGcQzP8+xLej4cj2BZhsSo9Pw37I5brHYrbE9b7N09wji0isuyhO/7WK/XdwsskKTPPlLS3s3rZD0eezSqQatbDONgz6jl+SuiDh88pEP14ZXruvdLz4L+T21/Hc59sclD+p3Br8Y7hzr0dyMcdasAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;funtinuum quadrant diagram&quot;
        title=&quot;&quot;
        src=&quot;/static/e7dbda24ce02608feba8648be13c8e1d/5a190/funtinuum.png&quot;
        srcset=&quot;/static/e7dbda24ce02608feba8648be13c8e1d/772e8/funtinuum.png 200w,
/static/e7dbda24ce02608feba8648be13c8e1d/e17e5/funtinuum.png 400w,
/static/e7dbda24ce02608feba8648be13c8e1d/5a190/funtinuum.png 800w,
/static/e7dbda24ce02608feba8648be13c8e1d/c1b63/funtinuum.png 1200w,
/static/e7dbda24ce02608feba8648be13c8e1d/29007/funtinuum.png 1600w,
/static/e7dbda24ce02608feba8648be13c8e1d/aae30/funtinuum.png 2080w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Joy and fun are good in corporate cultures, and they’re also good in products. I loved seeing IBM’s Code Engine
introduced with
an article inviting developers
to &lt;a href=&quot;hhttps://web.archive.org/web/20220518012926/https://www.ibm.com/cloud/blog/ibm-cloud-code-engine-enjoy-your-cloud-again&quot;&gt;“enjoy your cloud again”&lt;/a&gt;.
Quarkus have &lt;a href=&quot;https://quarkus.io/developer-joy/&quot;&gt;developer joy&lt;/a&gt; as a core requirement. James Governor has been pointing
out for a while that prioritising developer experience (DX)
is &lt;a href=&quot;https://web.archive.org/web/20250716170852/https://redmonk.com/jgovernor/2021/03/18/the-developer-experience-multiple/&quot;&gt;good business sense&lt;/a&gt;.
Frankly, some of
the tools we have to use every day are definitely not
frictionless, so I’m not sure everyone is listening - but it’s good to see momentum picking up in this area.&lt;/p&gt;
&lt;p&gt;I hope you have a wonderful holiday, however you celebrate; and I hope you find light in
the darkness and joy in your middleware.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[What How Why - Quantum explained]]></title><description><![CDATA[IBM is working with businesses embracing new challenges and part of this investment is focused on high quality STEM education.]]></description><link>http://hollycummins.com/what-how-why-quantum-explained/</link><guid isPermaLink="false">http://hollycummins.com/what-how-why-quantum-explained/</guid><pubDate>Thu, 16 Dec 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;IBM is working with businesses embracing new challenges and part of this investment is focused on high quality STEM education.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[How this site is built]]></title><description><![CDATA[A long time ago, I used to write semi-regularly on Blogger. But then I stopped. What was up? Was it that
I wasn’t making time to write? Was…]]></description><link>http://hollycummins.com/tech-stack/</link><guid isPermaLink="false">http://hollycummins.com/tech-stack/</guid><pubDate>Mon, 15 Nov 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A long time ago, I used to write semi-regularly on Blogger. But then I stopped. What was up? Was it that
I wasn’t making time to write? Was it that I needed to form better habits? No. Clearly, the problem was
that I needed a newer, &lt;em&gt;shinier&lt;/em&gt; blogging platform.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/aschmelyun/status/1363471281371439104&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 516px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 127.49999999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAaCAYAAAC3g3x9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAGfUlEQVR42o2VCVBV1xnHr6NSDDsIPAER9IFAUAsWUBLDEvZFFARFQohWgkahWiWJwTTRpMZBSRQRjSKLOgYQ47RqrEtxSQRZRUT2RUUiBouAjx389bxnpu20zbRn5j/nO+eec77/mXu/+5OGh4cZUvQyODREb18fCoWC3t5envX0MDw8grK9ePHin1KO/4vGxbOx8XGkivJSvvgsmbYH7dypqaOmrpH6hiYePHhIf3//Pw78X025ZmxsDOlx5xO+L66kf3BIuBxWaWBggNGREYaGX46HhHvVTUQ8/vPhKmcv/tOp9LSri4f326ivr6epsZFHHR00NN/nXn0LTS2ttLa2UVffQG1tnVjToEr2iy6VB1a3d5N2qYEj15qEWsm6UsWR3BMcOpHNn24Uc6PuEdfvtfHX6hYuV7VQ2dpBzcNOfqh9wNW7bdysa6e0qYNr99pp/1sf0l+qO4g/Xs5H+ZUkfVvLutR8XAMdcfG2IyElnb2Xm9lztoIvz5aTer6crMI7ZBfeJe1CBfsvlJNZWE329ToOXrnH7ftdSDUPn3L0ah1ny5s5drOF+CMXsFgSgWnwMhxi4nBZE4/T6vUsjF2P8+o4nFa9i2P0KjalH6ew7ke+KVLeroGvr9Zz+8FTpOZHP3LicjHHLhaTe62SxEN5GPsHMS0oGEMfP36zYiUyL28Mvd/E6bcxvBa3BgMvd2L+sIOLpTWcvFJMzuUScq+WUdHcgVR05x7b9mezLe0Yu7NOk/DFlziviSXsk0/w2JBAyHsbWfhWDNMDA/CIX09oUhKmgX4EJiSy6+gpdmeeJO3kGaHT1DS1IBVcukHUB3t499O9rN2RSnjidizDIrAIX45tVDRea9ah5+HBjKUhuK6LU8k+eiVea39H4u7DbE4+yKadaazdlsz10ttIx/JO4b44lMVRbxO0fCW+EZE4BAUx1z8AO28fnAJF7OuLvY8PtuLaNm96YiN6z9AwlkRGESj2+cTE4hISSt6580gpaamo6WhiYGKCrswIPWMjjEymYSiTYW5hiaWVFTPlVsitbLESklvbYj3bllnWNsy0no3czg4r+zkYW1pwJCcbqbK6hv0ZmWTknCAr5zjZx46TJXQkKxv/peHMmjcfW2dnzOxsMH/VGjNbK5HYHA2tqWhq66OhrYOuviGvaBqQmnYQSVnQ/16Tynb/8RP8V0RjPd8ZCwd7dCyFa7kJOtOnMllXl4lqGkyYMAlJkpg8WR01NV3S0g4jPelRcLe1i6qmJ9xp/Ymqlk7qO3pIOZSD+RxHZtjbY2AxA3U9PSZrT2GSjjpGptoYWugyXW6AbKY2+qaaqKlrkZGRg3S7oY2LJc38UP2Ea1UPKaxs5XpVG0vfeQ8NmRm6ZmaYWJhgKhOuNKegPvVXmMu1MH1VA8u5esycp4ex/BWV07QDXyNlncwnbNUGEj7eKfQ5m7bv5sPkVDxCo5H/ehE+YVG8HhCO0XRb9EwssJ4nZ95rdrj7uOK6yBW5jXhpduboGGqRmX0UKa/gW7wCFhMeFUPC5q1s25HChg8+I/b9XcR9tJew2B3I5gQxQcueSVNsmDDRHONpVixZsgJHR1fmOi7E3S8IZzc3vik4hXTuu0vExm0kZV86X+0/zK49B/k8OZ2ED3fj//YWZjj4o65tjcFUK3R0ZjBrlgNefsF4KstywQL0ZdPQlhmirq8nvoxMUSln/synf9zJnn2pbP14OwcOHxVxOhu3JBH5TjyhUbEEL47AP3ApvoEhhIVFsnnL+4Qvj8TT1w83b29mz7FFmiix78A+8VKqqzh/qYDc/KN8dy6XlK/2ELN6LRGRMawUNfxWdAxRogRDli7DLygEH/HjCFm8jPiE37NMHOrq7i7m/LGxsePAwUNITc31nD6TwbmzmSRtTRRuVuDpHYyPTxBBYrOfXwDe3v64LHid+S6uOC1chIurGwvdPFkuEoaLZAveeIO5DvPJyy9AUtKtsbmBxqZGikvKKSmr5Pubt0RcRlHRLYqKS1QqKS2nrLyCisoqKm+/VGlZuQoTd2tquVVaRvezZ0ijglSDw6MMj4yqMDgyOib6l0gcGRtnVMTK/v8in5IpPcLh485OevoUPFcM0Pf8OZ0/ddGn6Becfi7m+nku5pTwetrdo6Lg+PiYCplKjYvE/xpLCsHe7mc9KAYGX2J0cJCe3j4GRNw/MPQzVgfp7n4mxoOMKt3+AuyVDv8OuISMAQpu4VIAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;tweet&quot;
        title=&quot;&quot;
        src=&quot;/static/5af8c009881606851ea4b4506386e98c/75dcb/rebuild-tweet.png&quot;
        srcset=&quot;/static/5af8c009881606851ea4b4506386e98c/772e8/rebuild-tweet.png 200w,
/static/5af8c009881606851ea4b4506386e98c/e17e5/rebuild-tweet.png 400w,
/static/5af8c009881606851ea4b4506386e98c/75dcb/rebuild-tweet.png 516w&quot;
        sizes=&quot;(max-width: 516px) 100vw, 516px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I’d been inspired to think about self-hosting by Trisha Gee’s switch from &lt;a href=&quot;https://trishagee.com/2014/03/20/atom-to-hugo/&quot;&gt;Blogger to Hugo&lt;/a&gt;. But of course I couldn’t just create a Hugo site. Instead, I had to investigate lots and lots of various tech stack
options.
&lt;a href=&quot;https://twitter.com/vvoyer/status/1087705536714412032&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 518px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 68%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAAsTAAALEwEAmpwYAAACEElEQVR42o1T23LaQAzlu/sd/Ze+twkECLdgMOAANrHxBeO71xhsTqRlwgwtbdkZzWpW2qOzR9qG9aFDiBx5LshyxHGC8ngEr/P5fGt89herKc7W+PH9GxbDNtR3Hepcw3K1QpqmV8BHV1VVF8DgQ4NIY5SnCsXhcA2eTqfr/mVfBa77b0XZb6z0DWYLDYoywXD0hqk6w2w2x3A4Qq83wGy+QH8wxJxyqqrGkeQoy1IWr+r6hqUE1DQNY0VBrz9Ap/uKt7FCe1eC9+ms2XrB03MTk6kKlYpxfLlc4bnZgmFsUAghi1wBJxMVr70+Vus1LGsrkxbEZq3reKeLDKQbBmzbgeO4Mr7WDZiWhSnFOCfLMgkoNWRmDLi1baQUCMKQOh0jThJqToacGIRRJDUUokAUxdjvg7sNu2hIzPipzGRAujE4P4sLtTtdjMn/+etJ6sqMOLfV7sA0Tcn4j6bwZRZd05Yk/IL0nBD4VLIIgvDCKAiw3dpwXBeet4Pv7+WLdHr6HcCxZDWnbo6oEcyo9dKGsdlIAJ7LMIwemkUJGFCyt/NJpxiu58MhBo7rke/J3aRGcQ4n1/Xtz6nvjU2WFzRTJYl/gCjIyC/LIzJqQJpfjGMM9hBDj5hESSov8rDufB9chAEzAmJw07QkSy6Mf/xnCchPTbKcAAUO9AMiGhn2c3EB5TOXZEhohIry+F/AT4wUJaAFNNiQAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;tweet&quot;
        title=&quot;&quot;
        src=&quot;/static/8066421b7617805651078d099bd2a974/6b9fd/developer-blog-tweet.png&quot;
        srcset=&quot;/static/8066421b7617805651078d099bd2a974/772e8/developer-blog-tweet.png 200w,
/static/8066421b7617805651078d099bd2a974/e17e5/developer-blog-tweet.png 400w,
/static/8066421b7617805651078d099bd2a974/6b9fd/developer-blog-tweet.png 518w&quot;
        sizes=&quot;(max-width: 518px) 100vw, 518px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In my defence, there was a seven year gap between when I read Trisha’s post in 2014 and when I actually took the idea to action. I’m slow. So it wasn’t unreasonable to assume that the static site world might have moved on while I was busy being slow. (It turns even &lt;a href=&quot;https://trishagee.com&quot;&gt;Trisha&lt;/a&gt;’s moved on from Hugo, to Wordpress.) Trisha’s site rebuild notwithstanding, Hugo is still a popular static site framework. But &lt;a href=&quot;https://mtm.dev/static&quot;&gt;not the only one&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://rakhim.org/honestly-undefined/19/&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAABYlAAAWJQFJUiTwAAADsklEQVR42nVViW7bRhD1/39Ii6KtG8AB0qaOXaWOVfmIJcs6zEO8dFCHRS4pHuL1+nZlNXDREhjNcrj7ZubtzOhkl5aYeBniOMZsPoe/XGLh+5jO5kovFj7mi4VaZ8ESTV2jaUDhDxql5bKmvapqnGyCEu9bAkEoYEwceAQSkcA2CBCGIYSIEKp1gCJYQZ3+j+fo5CSOIsxmPjarNQQB4niHUAiCRkqSJEW4h5KkAl6yBmHeIMgPOi4aZSvqg6MTfxPg810fLUpft7Ber2GYE4zGGnTDgO16MIIatqjhRjXMkOuogUHtUB9tWfkKWFb0lJVIihpil6Is9t+4kXzVFaWglErX1V5JU+UHe0N7U9EmNTnM0h0ebtsY9h/Q/tKCN7VhWzoMbQh/5sKfu5h6lpKZ55DPF6SJwNKb8N2C51pwbJPaRJ6lOCmKHA4BlNHS0L1v46bTxl3nGsOnHu5u2ko67SsM+o8Ity/IU4GMcvnpI375+UdcX7Vg6qNXwH3GDRGqMsNq4UEzhmjz8MP9jQL5etthJDaSeEuwNVb+knoDEWy59rleYZ/F2BOjLAsJmGMXbZHJNGYOnkc9Rsjo+j30Hu7Q/XoL/XlIwICpRug/6ox4hMeuxu8aKVkSMEJMjIL8K0C5WUa5WkwxtZ4x1ga4YXQS7J78Xpz/hjvq4GVN2SDdCfI8g+fMYeiOKrkij9WFvgGUEfok2nQn5KvLaJ8Uj/rzAKPBI1OXl+TDtW3aDIyHOiaGDdedYsJSS5P0X4DkMKP3rdgg2oXsJ5ZIfSiTskgVLSLYEOhJOZBV8deXz7BJkz4eIM+zb4BysyRYXkDr8hzf//Ad3p+9w1XrEp45RiLWBM7VHsmxLKshgaO5CeGM2FHR25SP3h1LptJXqXbI25frP1VZTZ2JunlDG0EbP+Hy4nfoQ0Y26OH09BRn707h+4u3Kb+sFxiROwnoEUBy2O3dY+5PYZHX8agPnem5LP5rOtLHfQy6HZyf/aSiFhwgbyKMww0m9G5PNBJvwjKf4Ux0zEmD5x46Y0rt0tmKTjQ66LTOcfXpA0xjfOjlPQHTnQQMFWixTw6FSpGl8M/6+P5qq3hJ0unHXz+g9ccFZmxB2c+q9WauC0s3qD3VVilvWIp0cJQkDlUmR5Hf18s5+RwokRVSKcCy5DANOQMjRJyFIoqpY+xYU/I94vtul7CtSh6o3khdV2pSy8l01ApQ8GCSpoh5MIoTBZakGac4pzWHbCiYIg/833P8G5Ac/g02DdFsKMYeHgAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;tweet&quot;
        title=&quot;&quot;
        src=&quot;/static/7ea6ccdf79219c751c3c0645c1578c31/5a190/nixcraft-tweet.png&quot;
        srcset=&quot;/static/7ea6ccdf79219c751c3c0645c1578c31/772e8/nixcraft-tweet.png 200w,
/static/7ea6ccdf79219c751c3c0645c1578c31/e17e5/nixcraft-tweet.png 400w,
/static/7ea6ccdf79219c751c3c0645c1578c31/5a190/nixcraft-tweet.png 800w,
/static/7ea6ccdf79219c751c3c0645c1578c31/c1b63/nixcraft-tweet.png 1200w,
/static/7ea6ccdf79219c751c3c0645c1578c31/84f4d/nixcraft-tweet.png 1208w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I’m a coder. &lt;em&gt;Of course&lt;/em&gt; I wasn’t going to use an antiquated, simple setup, even if it was actually very productive. I needed continuous integration! And complex dynamic behaviour! The leading static site generators were Hugo, written in Go, and Gatsby, written in React. I need to improve my Go, and building a Go blog would have been a great way to do that. I resisted temptation and decided to (sort of) prioritise productivity by going for Gatsby.&lt;/p&gt;
&lt;p&gt;It took me a while to settle on a platform, and then a while to find the right starter, and then I spent several weeks adjusting the starter to support unit tests, and setting up a CI/CD pipeline with integration tests. I didn’t quite get to the point of setting up a Kubernetes cluster to run my static blog, but I wasn’t far off.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/richburroughs/status/1383092015580123136&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 521px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 73.00000000000001%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAACXBIWXMAAAsTAAALEwEAmpwYAAACbElEQVR42pVUyY7TQBDNnyIhwTfwFRxHnLhw4cwBJEDcmBmGrHYyScge2/Ee21kc74+qykyUjECClp66urr7da1dU79/hDbpYaEZWC6XBA2zxRLRdo9ot0cQbRFGO8IW+/0BPKqqwtORFwVK0tdev3qJrx/eY7rQ0Gq1cd8fCMaTKUbjicyrlQmDoJkmbNsRuK4Hw1hhZR734jgW4tp2F2NHsOiQaVl00EUQBHTJJp0tMttT5jlSP0Ke5chJLsiiLMsEvGar+VytKEsIivLClSwnF0j/OComWtrEXJ6dycXV0xl2+e27T/j2+Qs8f43JbAbdMDCdzbHZbP8arz+NUwxfPHuON1dXWEcbLCgZOsVF1w1x5ZxQXCqPXrDq6UNHPRGajoeQrNmlBULi2GQVgrRCXOC/hxB6a0qA48KwXOjOGqYfYmo40E0HYRhKYvz1Gr7P8BGEwcPap1KKLiwVQlXtotFs4e7uJ5qNBtrtNm5ubqUmHcehmlxgqWnQNB3T6UzCYZOeZ8uyKcMFM0mGJcue58uLHr3I9eV5nsxy8B/dvLCQC5Ld4tfYCo1elsQQ5vP5ybIFWczyhAqdi13TdbHcoKoYUwM8JrE2Go3RUVQ0Wy1cX9+KXK83oChdDH+NUG80oXZ76FBoFNobDIZoUVg4TL1eHz8oVKZpScmIy+2OQhv30nYNIh0Mh7LuEgm3HrfhhCxUVFUe6yjHmPeZmO44lNALl13KHoNLhz8Azw8Qkex6FFeqAP4ctvRJPLZYkiT0ScRI01Tki25iwiTNcKDNOElxeEBKbbY/JIIdXU5oHw9ZPF0+m0+oKvwGzCJuQFL91scAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;tweet&quot;
        title=&quot;&quot;
        src=&quot;/static/5ce4ff8904cd255a7fdb355de10a1e27/bb9c5/tdd-tweet.png&quot;
        srcset=&quot;/static/5ce4ff8904cd255a7fdb355de10a1e27/772e8/tdd-tweet.png 200w,
/static/5ce4ff8904cd255a7fdb355de10a1e27/e17e5/tdd-tweet.png 400w,
/static/5ce4ff8904cd255a7fdb355de10a1e27/bb9c5/tdd-tweet.png 521w&quot;
        sizes=&quot;(max-width: 521px) 100vw, 521px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Once I had a unit test skeleton in place I felt able to start adding new capabilities to the platform. A lot of my writing is published elsewhere, and some of my content isn’t even writing, it’s slides and podcasts and external media. (I got profiled in &lt;a href=&quot;https://www.forbes.com/sites/adrianbridgwater/2021/02/18/ibm-developer-lead-what-software-does-next/&quot;&gt;Forbes&lt;/a&gt;! That has to go in somewhere!) So I needed a hybrid between a blog and a portfolio site. I wasn’t just looking for an excuse to code, honest.&lt;/p&gt;
&lt;h2&gt;The tech black hole&lt;/h2&gt;
&lt;p&gt;Now that things are up and running, I’m trying to balance time spent on writing and time spent on improvements to
the base platform. I wasn’t going to be That Developer:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/theolognion/status/1394242709372772352&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 521px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 137.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAcCAYAAABh2p9gAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFRklEQVR42pVWWWyUVRT+O9NpQWJiDDGaiEZ8oJBSgvHBN6PGhJi4PLg9EB/EqCBGIonG6APRhNQW0YBWyjItUKBMV6G0Fkta2iDYUtppp7SddtZ/9n1fOjP9POfOTDsSE8JNz5zz33vud89y7zmVMtksEokE0ktLiESjCIfDiMXjWF5efiDK5XLIEZfcHg9OnTwJj9eHKd1d3J7QYtFoxoOOXG4ZWQKVkqkUgsGgsDCeSBLPYIkonU4jRWtLNM+UyWQEz5JHTMW1TDYjZF5nSyWb3Y7p6RnodDPQarWYJLo9Po7FRQMWDUbcmZgUpF9YxPy8XswZjSZMTevEt8Vqpf06mExmASr5AwFSMmBmdg4GkwXzCwboSGZL+URWymZz4FhznChiQhZzmWxBzgp3hYUOh4yha70YHR6A7tYQDNp/YJq8icVZHSwWMxw2O2wWGT63B1ay5pPdu7Hx2Sps3rINVZu3YVPVVkHPbNyEoaFhSOapm7j841701O6BVn0ArqtNsF86Cle/Gq1n1djx9vv4ufEEunt68eJLL0OSJJSVlQleJIVCIXjrRQ2kuZE+dH3zLgZ/+BDnvtyJCwc+R8v+nXB1H8Wu994ixQo8uaUGDz+ynmQl1qxZh4qKtVCp1hSoEpWVD9GaApq2DkjDPe04v/8duNvqcK35F1y+cgV7PtuLr3a8gAHNWRz67TgeXf+Y2KAqX0fWVKJMUU5WKldIqSwXFl7UtEE63aTGK1s24OBHb+LwrtdxR12Lga5WtB6px/iff8BP9/T7g3ViQ3l5JZSKtVCUVdwDqFoFbDihFq5sr96Mn/Z9gOmWOjj6mxGbHER0fhzeO4OIzI5h38e78qDKSgJkUv0/4M2R6zj27W7oNfXw9v4Ka08D5L5TlJQzCNzohvOvFgQGNYjcHcWrr71RAqoi9/OuM18BjMt3ERk5B/eAGpae3wnsBBwD5+Ad6URwuBMTTfXoOPg1xpoOYWJ0FFXV2wvuVxBQHlRZrlrNcsikg62vEbYrDZhvOwRTTyP07Ucw194A7/UOaNsa0Xf6GGq/+BT93Z3outSLx5/YsHJ9ildow1NPi1cmeRe00BOQvvMwRk/XQtd1XNCt5nrcaDmK83Xf4e/mw3CNDaKzvQPXhkbQfKYVNTXPobq6BtVba1Cz/XlyV4NELAYpkUzC6XRClmXIVllwu8MBA79ZfooGE4xmKywmI7yUcaPZQpXJS3tc4Dogyzb4A0F6dhBPUUqll2B3eWF1uIl7YLY5YSOuNxEIyXanBzYio5U2kw6vy3aX2GOWSdfphtcfRDyZEiVM4iLgcPsIkDaSEiv6AiFEYnEqZylE4wlEY3ni8sY8Eo0LHo7GkCAgLhj8J+oh/7CpSap/yVRa1EWuIKIKr1Rkob8qLxdk5GW2rEhSmlz2B8MIRWIIhqPiVMHp2+MLink+lMcq6H+pOET54srMrqQKlZpjylZyKNjSOPUbtj67YlGBlx5QIktJyrLXF0AgHBGboxS7UCSKEFnJB/kDfuEBH3a/IQDZbx5sGVtUusiZK7rEv+y6mCt8i33cfzKZVUBW4maTIrf4TnII8mU/A7ZeNCdKGieIdXlzqcu8tlQAFG10TDuLpgtdmJrRw0SXdo4aj5mukCMQhcMfQTBK8aXs37+N5kSfkfiiXr46LC6p2WqDzeHEgt2LebsfekcAdg/FlxoZt9pIJHL/GBZjFKcLHKAnFKP3GA6FECIABgqR7PP7BWAgGBLJWYmr6IrZe5JSiE0mm/9XonSR47NcYgG7xPHKFS4666co/sV4cgz/BRq1NyhtdfVIAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;tweet&quot;
        title=&quot;&quot;
        src=&quot;/static/65779d58196f43020c382787e0ee9a15/bb9c5/olognion-tweet.png&quot;
        srcset=&quot;/static/65779d58196f43020c382787e0ee9a15/772e8/olognion-tweet.png 200w,
/static/65779d58196f43020c382787e0ee9a15/e17e5/olognion-tweet.png 400w,
/static/65779d58196f43020c382787e0ee9a15/bb9c5/olognion-tweet.png 521w&quot;
        sizes=&quot;(max-width: 521px) 100vw, 521px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I was also determined that the things I wrote about were going to be things &lt;em&gt;other&lt;/em&gt; than my blog tech setup.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/shunghsiyu/status/1333045772124704771&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 512px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 54.49999999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB9klEQVR42pVS2ZLaMBD0j+dpPytVSahkt5LlsPEJGLC9C9isDcGnLB90RjJsbR7ykKnqmpY0HrV6rFSMYe1ukBcFLmkqc5bn6PoeVwDX61Wiv+U77/+xpyzsJR4+PUBVdcxNBwatN16AruvwPyGaChFKVVXvCuuag7EaTdOCc05oiDeSVxWTuW1bqmES4luxJ3hPzUQoyemE8XQKVZtD1w1ocx0zVYNlO3CcBcaTCUzLhu04xKewaX+5crFyXWy3Hjzfl7VZlg8N0zTDer3Gbn+Q8P2A1huEYQTP8yWC4IXO9sOazsUL8MFf4XV/y0rbXXGMSxwOIcLoiEtWIC8rFCUjGyqkeSnxMfr+ekP/zuVghIc1+eSsAqi6CZee4G4DUvEyqA1e8bojZUGAiBTHcYJDGErP7gr/vogaNl2PqGhxyDhOrMMu5RCXdF2LliYtpi0G0RDu+T6AoekAER0plVM+Rjvk2Rne1iUVITWpaeLFADZkzssBkpMllxic0f/acVnPeYGG11AYq6DOnjH+9YS5OoZuqtAoP/4YYeEYsCwNhj6TNaahInmLwMoLzkmI2eQnvn39jKfHEebaGOdzQk9uOKk7och/I4leoGvPMEwNjjXHamHJRjbx5cJE4K+pUUy1Z1JTwLENfB99gbu0EL/tydsSfwDjlj3D5p32hwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;tweet&quot;
        title=&quot;&quot;
        src=&quot;/static/48685e4113077e8c6e1b0ca031094829/01e7c/gatsby-fan-tweet.png&quot;
        srcset=&quot;/static/48685e4113077e8c6e1b0ca031094829/772e8/gatsby-fan-tweet.png 200w,
/static/48685e4113077e8c6e1b0ca031094829/e17e5/gatsby-fan-tweet.png 400w,
/static/48685e4113077e8c6e1b0ca031094829/01e7c/gatsby-fan-tweet.png 512w&quot;
        sizes=&quot;(max-width: 512px) 100vw, 512px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;No no, no snake-eating-its-tail blogging for me!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/Naher94/status/1363982984626454534&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 519px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 22.499999999999996%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA5klEQVR42oWQPU7EMBCFc/+GjmtwBCooaCkWNqy1RAtxbG3iJOO/2MnDdqqlgJE+ezzyPM2bipSCdx7DoDBNU8EYC2stvPewboGxDuu6Ydv+Jv+pHu7vwE4Mh/cab8caR3YG4wqfYsTlSlBkQNqUhv9iXVdUj0/P+Go7sHODjyTWfHMcGoH6IsvNZY+h7yGERCcE+pR3nUDLOaSUEPIK3b3C85ciWuVjCQFqHOGcS1gsCU0zaJ5LTRtTVjCOE/q0IiJK6L02E8zQIk7tLpjHjHEnR3aWzYX0DiH+srTBL+HGfojxpvcH0G6BAqae5B0AAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;tweet&quot;
        title=&quot;&quot;
        src=&quot;/static/05524a24db33e309fd461bb1cb95d222/b23ad/article-about-rebuild-tweet.png&quot;
        srcset=&quot;/static/05524a24db33e309fd461bb1cb95d222/772e8/article-about-rebuild-tweet.png 200w,
/static/05524a24db33e309fd461bb1cb95d222/e17e5/article-about-rebuild-tweet.png 400w,
/static/05524a24db33e309fd461bb1cb95d222/b23ad/article-about-rebuild-tweet.png 519w&quot;
        sizes=&quot;(max-width: 519px) 100vw, 519px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And I was going to write actual posts about actual things!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/Coding_Career/status/1327326881096421376&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 511px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 74%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAACXBIWXMAAAsTAAALEwEAmpwYAAABv0lEQVR42qVT21LCMBDl/2f8Md98FBEshWKl95akuR53A7FUccZLZk7TveTsaXa7cFbAFfeoijcsVyu8JAk2Lwl2uz3Wm02w34oKZdOhaXvUhEFItP2AphtQE3h576G1wcLWD3CPd6jKEqvnNdI0RZJssd9nSHc7bLdkE/bZAYfXHHlOhZdPIX4syhDjPCklPBEvvFUAqRRyRNd16PseJZEfi4L2inx9QFXVqOs65HC8aRryVRBCwFgLRwpZ5YIfvIZhwPFYIDscSE2G1zwPB9q2I7ThnQtwQSZrmhYFKWRlcblrQkEBJmSikg6znyMeN5afvzrnL3BEeAkY6zAqA6Ut7RZyNFREo+1O6HpBTeD9FBoxiDHkcg7vnM/nFDclEmpzduqIi80HJtvM7IgzGefqOSEn3lqW1EfEK5rF6VNj8R8RbtOMZjLB43JNXZUfc/cnQr5orTXGURJGUmm/qPwVoSISngBWdqKZ47njIv/6ZCZQSgV1N+/4O8KRusjjE2Fptgz5A64a8zknkp0JL4w6jISeJQupQnK0z7OnQ/HJp2fFrhSa8E9+/AEU4GTnp/syYeb01BTalJps/vXeAV6/ktIKxdLWAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;tweet&quot;
        title=&quot;&quot;
        src=&quot;/static/3bc8db5b4d0d2c0ce519697cb123e495/92e00/writing-tweet.png&quot;
        srcset=&quot;/static/3bc8db5b4d0d2c0ce519697cb123e495/772e8/writing-tweet.png 200w,
/static/3bc8db5b4d0d2c0ce519697cb123e495/e17e5/writing-tweet.png 400w,
/static/3bc8db5b4d0d2c0ce519697cb123e495/92e00/writing-tweet.png 511w&quot;
        sizes=&quot;(max-width: 511px) 100vw, 511px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If anything, I’ve probably done too good a job of focussing on content in the past year, at the expense of sorting out the platform capabilities. I still need to figure out the right solution for slides. At the moment they’re hosted separately, and I pay for that. They’re not even cross-linked into the main content feed. (I like Notist, but the price of Notist Pro pains me, because I am a cheapskate.) Several people have asked for RSS feeds, so I need to sort that out. And my search is a bit busted for external links, so I need to change what gets fed to the indexer.&lt;/p&gt;
&lt;p&gt;So if I wasn’t going to write about my tech stack, why have I just written an article about my tech stack? Well, um,
people asked. And, you know, I worked hard on it and wanted to share.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/holly_cummins/status/1383034689821106181?s=20&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 27%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAABYlAAAWJQFJUiTwAAAA90lEQVR42lVQy1KDQBDkkz179+BRv0opJOFlCSEBeVlFJOABdsnu0s5uDOpWdU137bx6rLpq8HD/iCiMke73eIsT7NIUZfOBY3dC+9nh1A/oCP3whb9vWZaVCykhpYKVHzLc3d7A9328FyUOWY4k2REvUJQVMtKax0mCqqrBOQdjzMRxmgwY45cBBEspZUTbHmHbDpwXF0/PNhzXNdzdeMjyHJutR0MDBEGIrefDpxhGkfkPo1cM5ADXhkotGMcRdd2gIjRktybojXtK1Na0JSEE2ZIGmgshV61xaUjJuqEuYHxeb8PnXz5piz9aF165XmY+n//d9Ruht3gJjiw1jgAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;tweet&quot;
        title=&quot;&quot;
        src=&quot;/static/3b6a4128ed1d03a6fb7d3d06171931ce/5a190/someone-competent.png&quot;
        srcset=&quot;/static/3b6a4128ed1d03a6fb7d3d06171931ce/772e8/someone-competent.png 200w,
/static/3b6a4128ed1d03a6fb7d3d06171931ce/e17e5/someone-competent.png 400w,
/static/3b6a4128ed1d03a6fb7d3d06171931ce/5a190/someone-competent.png 800w,
/static/3b6a4128ed1d03a6fb7d3d06171931ce/c1b63/someone-competent.png 1200w,
/static/3b6a4128ed1d03a6fb7d3d06171931ce/bb051/someone-competent.png 1212w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Ok but what is the stack?&lt;/h2&gt;
&lt;p&gt;The source code for this platform lives at &lt;a href=&quot;https://github.com/holly-cummins/gatsby-platform&quot;&gt;https://github.com/holly-cummins/gatsby-platform&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This blog is a &lt;a href=&quot;https://www.gatsbyjs.com/&quot;&gt;GatsbyJS&lt;/a&gt; blog, based on Greg Lobinski’s &lt;a href=&quot;https://github.com/greglobinski/gatsby-starter-hero-blog?tab=readme-ov-file&quot;&gt;HeroBlog starter&lt;/a&gt;. I’ve extended it to make it easy to embed external content and to add
different forms of content. There are &lt;a href=&quot;http://microanalytics.io&quot;&gt;microanalytics.io&lt;/a&gt; Analytics and Algolia search integrations. The &lt;a href=&quot;https://github.com/holly-cummins/holly-cummins.github.io/tree/platform-source/README.md&quot;&gt;README&lt;/a&gt; has getting started instructions and more technical details.&lt;/p&gt;
&lt;p&gt;I pull some graphics from &lt;a href=&quot;https://unsplash.com&quot;&gt;unsplash&lt;/a&gt; and draw others. A lot of the visual design is the same as in the starter.&lt;/p&gt;
&lt;h3&gt;Testing&lt;/h3&gt;
&lt;p&gt;I’ve got the TDD habit, so it made me feel a bit itchy that all the gatsby code I was looking at was test-free. I added some Jest unit tests, and also some puppeteer integration tests. It would benefit from more tests, but at least it has some now.&lt;/p&gt;
&lt;h3&gt;Hosting&lt;/h3&gt;
&lt;p&gt;I use &lt;a href=&quot;https://www.namecheap.com&quot;&gt;namecheap.com&lt;/a&gt; for my domain. For a while I had hollycummins.fun redirecting to this site, although I never publicised that awesome URL, so I let it lapse. (Remember, fun in the workplace is &lt;a href=&quot;http://hollycummins.com/category/fun/&quot;&gt;important&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;I use &lt;a href=&quot;https://pages.github.com&quot;&gt;GitHub Pages&lt;/a&gt; for the hosting and &lt;a href=&quot;https://github.com/features/actions&quot;&gt;GitHub Actions&lt;/a&gt; for the CI/CD. It’s free, and I am a cheapskate.&lt;/p&gt;
&lt;h3&gt;Work tracking&lt;/h3&gt;
&lt;p&gt;I’m using Apple Reminders as my work tracking system, but I should probably switch to GitHub issues.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/1b19153b7f63b34375891816e5b319f2/47f6c/reminders-work-tracking.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 57.00000000000001%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAAA/UlEQVR42pWS2W6DMBBF8/9/V1V96DtSk8p4wft66yEyaSpQw0hHjAQc7ni44E/ZBHxpgFlgdoDwDa3dqbX1JxpMbAi5Ya8uoxm3Taj4mAzepoD3yePzmsBtgU/18dEujOUf4VNKLaGVgBIMepGw1sG6jrUrpRQc1a5Q95eUWhBiRKm1CzJyflBKXY/gJSFNwpSHkgLOeaSUVgldBzkXHEy8L+QmwTuLGNPuePd0JxLOOiIG37daN0hMUD+2fkLYR4vh6dzG2CQ9JewBwLiCEBzLsmybJYwxq3SkfFFY8X27gTEGKSXmeQbnfOtJelpIAoKkBPWu/4e/0x0JfwCupGKYcL49WwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;list of tasks&quot;
        title=&quot;&quot;
        src=&quot;/static/1b19153b7f63b34375891816e5b319f2/5a190/reminders-work-tracking.png&quot;
        srcset=&quot;/static/1b19153b7f63b34375891816e5b319f2/772e8/reminders-work-tracking.png 200w,
/static/1b19153b7f63b34375891816e5b319f2/e17e5/reminders-work-tracking.png 400w,
/static/1b19153b7f63b34375891816e5b319f2/5a190/reminders-work-tracking.png 800w,
/static/1b19153b7f63b34375891816e5b319f2/c1b63/reminders-work-tracking.png 1200w,
/static/1b19153b7f63b34375891816e5b319f2/29007/reminders-work-tracking.png 1600w,
/static/1b19153b7f63b34375891816e5b319f2/47f6c/reminders-work-tracking.png 2206w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;Ok but can I re-use it?&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://github.com/holly-cummins/gatsby-platform/&quot;&gt;platform code&lt;/a&gt; for this blog shares the &lt;a href=&quot;https://github.com/holly-cummins/holly-cummins.github.io/blob/platform-source/LICENSE&quot;&gt;MIT license&lt;/a&gt; of the source &lt;a href=&quot;https://github.com/greglobinski/gatsby-starter-hero-blog?tab=readme-ov-file&quot;&gt;starter&lt;/a&gt;. If you use my fork I’d love to know about it.
You can see what the starter looks like without my content at &lt;a href=&quot;http://gatsby-platform.hollycummins.com&quot;&gt;gatsby-platform.hollycummins.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Most of the personalisation is in the &lt;code class=&quot;language-text&quot;&gt;content&lt;/code&gt; folder, but there are a few bits and pieces elsewhere, like &lt;code class=&quot;language-text&quot;&gt;avatar.jpg&lt;/code&gt; and &lt;code class=&quot;language-text&quot;&gt;src/images/jpg&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The content itself is not open source.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[A Journey to Automation from Observability to Sustainability]]></title><link>http://hollycummins.com/journey-automation-observability-sustainability/</link><guid isPermaLink="false">http://hollycummins.com/journey-automation-observability-sustainability/</guid><pubDate>Thu, 04 Nov 2021 00:00:00 GMT</pubDate><content:encoded></content:encoded></item><item><title><![CDATA[Why I never want to build another MVP]]></title><description><![CDATA[Holly Cummins, Innovation Leader at IBM, discusses the benefits and challenges of building minimum viable products (MVPs).]]></description><link>http://hollycummins.com/comment-why-i-never-want-to-build-another-mvp/</link><guid isPermaLink="false">http://hollycummins.com/comment-why-i-never-want-to-build-another-mvp/</guid><pubDate>Tue, 02 Nov 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Holly Cummins, Innovation Leader at IBM, discusses the benefits and challenges of building minimum viable products (MVPs).&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Software Engineering Unlocked: Driving innovation and engineering practices]]></title><description><![CDATA[In this episode, I talk to Dr. Holly Cummins. Holly was the development practice lead for IBM Garage for Cloud, before becoming an…]]></description><link>http://hollycummins.com/innovation-engineering-practices/</link><guid isPermaLink="false">http://hollycummins.com/innovation-engineering-practices/</guid><pubDate>Tue, 28 Sep 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In this episode, I talk to Dr. Holly Cummins. Holly was the development practice lead for IBM Garage for Cloud, before becoming an innovation leader in IBM’s corporate strategy team. She drives innovation for companies in various industries, such as banking, catering, retail, or even nonprofit organization. She is also a Java Champion, a JavaOne Rockstar,…&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Nine ways to fail at cloud native and how to avoid them]]></title><description><![CDATA[Cloud native is a perfect recipe for innovation, adaptability, and engineering excellence … when it goes right. Dr. Holly Cummins outlines…]]></description><link>http://hollycummins.com/008-cummins-nine-ways-to-fail-cloud-native/</link><guid isPermaLink="false">http://hollycummins.com/008-cummins-nine-ways-to-fail-cloud-native/</guid><pubDate>Tue, 31 Aug 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Cloud native is a perfect recipe for innovation, adaptability, and engineering excellence … when it goes right. Dr. Holly Cummins outlines potential cloud native disasters and how she and her team can help you avoid them.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[DevOps and Cloud InfoQ Trends Report - July 2021 ]]></title><description><![CDATA[This article summarizes how we see the “cloud computing and DevOps” space in 2021.]]></description><link>http://hollycummins.com/devops-and-cloud-trends-2021/</link><guid isPermaLink="false">http://hollycummins.com/devops-and-cloud-trends-2021/</guid><pubDate>Mon, 19 Jul 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This article summarizes how we see the “cloud computing and DevOps” space in 2021.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[WTF is Cloud Native Quantum?]]></title><description><![CDATA[Quantum computers represent an extraordinary feat of engineering. Dr Holly Cummins explains their potential, how they work, why they are…]]></description><link>http://hollycummins.com/wtf-is-cloud-native-quantum/</link><guid isPermaLink="false">http://hollycummins.com/wtf-is-cloud-native-quantum/</guid><pubDate>Mon, 05 Jul 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Quantum computers represent an extraordinary feat of engineering. Dr Holly Cummins explains their potential, how they work, why they are such a great fit for the cloud, and what they have to do with cats.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Cloud Tech Thursdays: How To Love Kubernetes and Not Wreck The Planet]]></title><description><![CDATA[Cloud Tech Thursday explores the full modern open source cloud stack, from hardware to serverless. Learn about new ideas, projects, and…]]></description><link>http://hollycummins.com/chris-short-amy-marrich/</link><guid isPermaLink="false">http://hollycummins.com/chris-short-amy-marrich/</guid><pubDate>Thu, 10 Jun 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Cloud Tech Thursday explores the full modern open source cloud stack, from hardware to serverless. Learn about new ideas, projects, and releases around Kube…&lt;/p&gt;</content:encoded></item><item><title><![CDATA[In the Open with Luke and Joe | Holly Cummins | Innovation Leader (a podcast, but with pictures)]]></title><description><![CDATA[Please join us for a conversation with IBM Innovation Leader Holly Cummins.]]></description><link>http://hollycummins.com/luke-and-joe/</link><guid isPermaLink="false">http://hollycummins.com/luke-and-joe/</guid><pubDate>Fri, 14 May 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Please join us for a conversation with IBM Innovation Leader Holly Cummins.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[WTF Does Tech Have to Do With the Planet?]]></title><description><![CDATA[Our industry consumes around 1% or 2% of the world’s energy. If you consider the broader IT industry, our energy usage is higher still.]]></description><link>http://hollycummins.com/wtf-does-tech-have-to-do-with-the-planet/</link><guid isPermaLink="false">http://hollycummins.com/wtf-does-tech-have-to-do-with-the-planet/</guid><pubDate>Fri, 30 Apr 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Our industry consumes around 1% or 2% of the world’s energy. If you consider the broader IT industry, our energy usage is higher still.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The InfoQ Podcast: Software Architecture and Design InfoQ Trends Report—April 2021 ]]></title><description><![CDATA[An overview of how the InfoQ editorial team sees the Software Architecture and Design topic evolving in 2021, with a focus on what…]]></description><link>http://hollycummins.com/architecture-design-trends-report/</link><guid isPermaLink="false">http://hollycummins.com/architecture-design-trends-report/</guid><pubDate>Mon, 19 Apr 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;An overview of how the InfoQ editorial team sees the Software Architecture and Design topic evolving in 2021, with a focus on what architects are designing for today.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Software Architecture and Design InfoQ Trends Report—April 2021 ]]></title><description><![CDATA[An overview of how the InfoQ editorial team sees the Software Architecture and Design topic evolving in 2021, with a focus on what…]]></description><link>http://hollycummins.com/architecture-trends-2021/</link><guid isPermaLink="false">http://hollycummins.com/architecture-trends-2021/</guid><pubDate>Mon, 19 Apr 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;An overview of how the InfoQ editorial team sees the Software Architecture and Design topic evolving in 2021, with a focus on what architects are designing for today.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Serverless doesn't have servers, except when it does]]></title><description><![CDATA[There are only two hard things in Computer Science: cache invalidation and naming things.                         — Phil Karlton…]]></description><link>http://hollycummins.com/naming-serverless/</link><guid isPermaLink="false">http://hollycummins.com/naming-serverless/</guid><pubDate>Thu, 15 Apr 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;There are only two hard things in Computer Science: cache invalidation and naming things.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;                        — Phil Karlton            &lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 66.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAMEAv/EABUBAQEAAAAAAAAAAAAAAAAAAAAB/9oADAMBAAIQAxAAAAGXcjpHiA//xAAXEAEBAQEAAAAAAAAAAAAAAAARAAEQ/9oACAEBAAEFAnJnrf/EABURAQEAAAAAAAAAAAAAAAAAAAEQ/9oACAEDAQE/AWf/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAUEAEAAAAAAAAAAAAAAAAAAAAg/9oACAEBAAY/Al//xAAaEAACAgMAAAAAAAAAAAAAAAAAARFRQWGh/9oACAEBAAE/IdmCF8GgiyR//9oADAMBAAIAAwAAABBU3//EABYRAAMAAAAAAAAAAAAAAAAAAAABEf/aAAgBAwEBPxBoVn//xAAVEQEBAAAAAAAAAAAAAAAAAAAQEf/aAAgBAgEBPxCH/8QAGhABAAIDAQAAAAAAAAAAAAAAAQARITFRQf/aAAgBAQABPxAYW4W8jW5vIem9S3YYKXrsYf/Z&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;shipping containers&quot;
        title=&quot;&quot;
        src=&quot;/static/10209464ea86d6d9074751c53b9bcf98/4b190/boba-jovanovic-FtRkRespN24-unsplash.jpg&quot;
        srcset=&quot;/static/10209464ea86d6d9074751c53b9bcf98/e07e9/boba-jovanovic-FtRkRespN24-unsplash.jpg 200w,
/static/10209464ea86d6d9074751c53b9bcf98/066f9/boba-jovanovic-FtRkRespN24-unsplash.jpg 400w,
/static/10209464ea86d6d9074751c53b9bcf98/4b190/boba-jovanovic-FtRkRespN24-unsplash.jpg 800w,
/static/10209464ea86d6d9074751c53b9bcf98/e5166/boba-jovanovic-FtRkRespN24-unsplash.jpg 1200w,
/static/10209464ea86d6d9074751c53b9bcf98/b17f8/boba-jovanovic-FtRkRespN24-unsplash.jpg 1600w,
/static/10209464ea86d6d9074751c53b9bcf98/12609/boba-jovanovic-FtRkRespN24-unsplash.jpg 3000w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;
Photo by Boba Jovanovic on &lt;a href=&quot;https://unsplash.com/photos/FtRkRespN24&quot;&gt;Unsplash&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Naming things is &lt;a href=&quot;https://martinfowler.com/bliki/TwoHardThings.html&quot;&gt;hard&lt;/a&gt;, and bad names make developers unhappy.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/gunnarmorling/status/1381959454032228352&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 505px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 29.000000000000004%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsTAAALEwEAmpwYAAABGklEQVR42lVQ2U7DQAzMnyJUfoA/RBSeCwnkELmzuVMKKmnOzeA1iQBL1o7H16y129017vYPCMMItuPAth28kB+CEGV1RNkof0dZH/F5/sI4TpimCfM8Q0rJ7zCMxI+EJbTd1Q3u94/UXOHNdSFEiihKECcCnu+TB8jygnFAS4UQXJMXBfE54jhBQfjSXqBMm+SCtm1Z3atpskLlpmVB1w2YpkW8hcPTM3TDgOt5XKd4y7JZhE/LTqePdSDJ7LoOnufzt9M0Q900KMsKWZYjJ3VRHDOu64bVqVxRlKiqmlWqnDrFOnDmICXyTDdStiwL32OcZsabcy3d7yf+rftrmmqSlBjWDZupQ3f9wE3bEhX3xG+mhvXD8G/gNyMnwjxwkkA7AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;So whatever the next big thing in software will be, my no. 1 request is this: give it a well-understood, unambiguous name. Conflicting interpretations of terms like &amp;quot;Microservices&amp;quot;, &amp;quot;Serverless&amp;quot;, or &amp;quot;NoSQL&amp;quot; has caused so much useless debates, frustration, loss of time and money.&quot;
        title=&quot;&quot;
        src=&quot;/static/10217c99deba87a71bdcb1021d12b88e/c0cb9/gunnartweet.png&quot;
        srcset=&quot;/static/10217c99deba87a71bdcb1021d12b88e/772e8/gunnartweet.png 200w,
/static/10217c99deba87a71bdcb1021d12b88e/e17e5/gunnartweet.png 400w,
/static/10217c99deba87a71bdcb1021d12b88e/c0cb9/gunnartweet.png 505w&quot;
        sizes=&quot;(max-width: 505px) 100vw, 505px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Some things are easier to mis-name than others. Let’s talk about the naming challenges around serverless. For a while, we stopped calling it ‘serverless’ and started calling it ‘functions as a service’, or FaaS. I don’t have evidence, but I assume that everyone just got tired of people piping up with “but actually serverless does have servers, you know” every time anyone said “serverless”.&lt;/p&gt;
&lt;p&gt;But there was a problem. For some use cases, running a function is fine. There’s still a server, of course, but the cloud provider takes care of defining it and provisioning it. But these free-floating functions aren’t so great for running locally. They’re always going to be tied to some execution framework, like Amazon Lambda or OpenWhisk. On the cloud, the user experience is frictionless. But to run the function on your machine, you either need to run the whole framework, or you need to roll your own lightweight harness to stand your little functions up and drive them. If your code has dependencies, that also gets awkward. Most FaaS frameworks have some packaging syntax for expressing dependencies and other metadata, but there’s usually a limit on how big those dependencies can be, and if you want to switch framework, you may need to rewrite all your metadata.&lt;/p&gt;
&lt;p&gt;Managing free-standing functions just starts to feel like a lot of work. Why insist on trying to make functions, when we have containers? They’re light, portable, totally encapsulated, and ubiquitous. Containers were so great for this use case, some FaaS frameworks retrofitted the ability to run code in containers as well as loose functions. Then Knative appeared on the scene, and it could &lt;em&gt;only&lt;/em&gt; run containers.&lt;/p&gt;
&lt;p&gt;The problem? What do we name our new way of doing things? Every container file explicitly declares and manages a server. For example, I’ve just written this in a Dockerfile for a demo
I’m doing on &lt;a href=&quot;https://cloud.ibm.com/docs/codeengine?topic=codeengine-about&quot;&gt;Code Engine&lt;/a&gt;, a managed Knative:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;CMD [ &quot;node&quot;, &quot;server.js&quot; ]&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;That’s a server! And I decide what it looks like and how it runs, so I own it. Serverless is a ridiculous name for something which has a server, if the user is the one managing the server. Serverless-but-with-a-server doesn’t roll off the tongue. Function as a service makes no sense, because it’s &lt;em&gt;not a function&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;In this layer diagram, grey parts of the stack are controlled by the provider, and blue parts are controlled by the developer. In both cases, there are servers
in the stack, but in the model where containers are the units of deployment, the user controls them.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 500px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/957d2639554eeb4db92be3b7316eaf03/0b533/serverless-layers.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 94.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAATCAYAAACQjC21AAAACXBIWXMAAAsTAAALEwEAmpwYAAAC1klEQVR42pWUWVPaUBzF/fKd+hH60PbB2o44WpQtgBL2JewgIIQdRFYJyL6E03svgsTgQzOTuYGc+8v5b/dkA+B/78Pr47sT9rDZKIS734e3/CaQhiO4EnlExBrEagOr9UoJpKLlao3JbI7haIznVhvzxUL1dXmzJRYqdXw5M+D0txlXFgdm0wn7X34zwYD5pzZONTy+Xrnw0+hGp9NRiA6Bvb4Eq5DEjSMIvTuCPnGsAnZe+rD4Y+C8MQTiabQ73U8dPnd6uLaHcGYV8M3gQ7nRVgOrtRrurBYYdLfQarXI5cRPHTZ7EkxCCjpPHD+4AIRMUQ18bjYRicYQTyTh9fuRE8UjRdkCG+0url0x/OHD+M75EUhmmUJRlPpTAxcaDX6dn0OjuYTX68N4okz2DjgajSAE/NDrdLi8uADP2/A6es8jAzZbLQRDYcTjCTxms8jmcphMp0eBL/0+fAEBoXAE0Vic7etLkhI4IW4i0SicLhd8JGS7w0kKo640vRbLJTKZR3hIFDRNdO31XvZF3Fa524XT6YIgBJFIPuAhldqLPgLn8wXCkQgzIIp5Eo3IXCuAw9dXhEkI1KGN53Fv41nYnzmkEJ8/AKfbzfbstAqHNgLh7Xb2dSEYQuYxi7Usq2Z4Mp2xvFFtjOQ8RvJIu2I6m7H3DCgNBgQShNlihcFogonjWG52Ivlg1perFQv37t4GjjODM1tIRDbG2ANpDmgOqUsHWd0eLwKCAEkaqICLxZKFSYEOp5NoPezjtFP2QNpHWu0Nbm510BuMuNXrWaULhaIKuFqvYTSZ8JfodQYD01L4Qyr9DlytZTJ+dZTLFeQLBaTSadTqddZOOHIW0pYqV6ooFEusb4tkHQyH70Cal2q1yiDUeoU805VWnzraQeU3IG3kCgG2yFFXKpXIpD1hPB5vgbspoJtpYmkh6HlIJ4W2iHzksB2TM5DmnY4hXem+3aj+A3qjg+x41xNKAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Layer diagram of serverless with servers, and serverless without servers&quot;
        title=&quot;&quot;
        src=&quot;/static/957d2639554eeb4db92be3b7316eaf03/0b533/serverless-layers.png&quot;
        srcset=&quot;/static/957d2639554eeb4db92be3b7316eaf03/772e8/serverless-layers.png 200w,
/static/957d2639554eeb4db92be3b7316eaf03/e17e5/serverless-layers.png 400w,
/static/957d2639554eeb4db92be3b7316eaf03/0b533/serverless-layers.png 500w&quot;
        sizes=&quot;(max-width: 500px) 100vw, 500px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;One name which got floated for this model was &lt;a href=&quot;https://thenewstack.io/funtainers-beauty-running-containers-functions/&quot;&gt;‘funtainer’&lt;/a&gt;. This was pre-Knative, and waaay before last year’s Amazon Lambda container-support news. At the time, it was OpenWhisk, Spotinst, and OpenFaaS. Funtainer isn’t ‘a container which is lots of fun’, it’s a mash-up of ‘function’ and ‘container’.&lt;/p&gt;
&lt;p&gt;But there’s a new problem. SEO.&lt;/p&gt;
&lt;p&gt;Try googling for ‘funtainer’. You’ll get a lot of cheerful-looking Thermoses, and nothing about the cloud architectures. Apparently ‘funtainer’ is Thermos’s fun-container (as in, actual fun, or as much actual fun as you can have with an insulated drink container).&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/0cbecbf7f65b55590c5f0e41ec837d7e/74d4e/funtainer.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 83.50000000000001%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAARCAYAAADdRIy+AAAACXBIWXMAAAsTAAALEwEAmpwYAAAC20lEQVR42o1Uy4rUQBTtz/AD/BJx59aNCz9AQQQ3grgWREFBXYggIuKsFGahQzOOL7TFFw6irW2P3el0HpWuJJXO+1HJ8aZ6ZphW1Ck4XJJUnXvuvafS0UZ9aTmWZDaT0+lUWpYpTYvJT0Muh4aQU2cuJyxYwF7EsSmkppvSMAwF0zQlY7Y09YnsxHGGMstQ5DlSinVdQ8qaokRVVQpSSoUsL1BWNZoGfyyZpajMETrN9tesrJEVJTIizbIcOSUoy1JBUpKqagkXCXdWe3QveU1JOzsPSZLBMGxw7hJZ1n5GmpdQCWssnSzKape4fdskOWpKWNOeXYWaIXDmwgZsy8L7tSv4/KGHszd6GGxsQj92EZsrL/Dy43usv3qHo6ceYPXJN/SMGE+3bIwe9+D+NBVPp94mHOoCx8918dPycej0Jdy6v4YTV96gd7eLJwcO4+rJ67h8/R5WVlZx8MgdnL/WxY1n7/Bmq4/uox7Go23CnUrYLMXdh18gogq3u318+qJjZe072MCEcXMd47dD6FMP1lTg9oOv6D7dxOvnLzEXMcYbfarMXRDu9EX4EXw3VDEKEoRhCmZxRNTbqReraJkCUZTCZTMVbTuk3heYaBZkKVW/dwmzrEQc54QEQZCiKKTarKZLsSAHqOeyQCB8ZaE4LpBnBaJ5oGy1RBiQsonGoeseHCeE76fgswSzWUwEmZrn7/773TZLhGVBBwMPQswRzEPMCWEUKcWtL/f6729riVCIBNqYkxc9mIavlDIWKoVtOyrZeq/ZP2GapvA8QSrnCr4IqGwaQhyrW1MUxX9VLhH6fozJhGOqtyp9muhc9dLl1EcnItJyfyXXizqaNBYNd8zGcXjDXbdJkrSh3jWkTIF+Ek2791+gSTd77nJBShJS1Jaew3NTUp0jCiWhQhLL/SkMgmBGPePM0vjWjz4fDIb82+AHH43GXNMm3GaMM+YoeJ7HhRD/wuwX71YDt/Dr5oQAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Search results for funtainer&quot;
        title=&quot;&quot;
        src=&quot;/static/0cbecbf7f65b55590c5f0e41ec837d7e/5a190/funtainer.png&quot;
        srcset=&quot;/static/0cbecbf7f65b55590c5f0e41ec837d7e/772e8/funtainer.png 200w,
/static/0cbecbf7f65b55590c5f0e41ec837d7e/e17e5/funtainer.png 400w,
/static/0cbecbf7f65b55590c5f0e41ec837d7e/5a190/funtainer.png 800w,
/static/0cbecbf7f65b55590c5f0e41ec837d7e/74d4e/funtainer.png 1157w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;No problem, you can refine the search. What about ‘cloud funtainer’? You get a Thermos with a picture of a cloud on it.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 156px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/28aac5e72e64c997f22829891ec5ac10/680fe/cloud-funtainer.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 256.4102564102564%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAzCAYAAACXICiDAAAACXBIWXMAABYlAAAWJQFJUiTwAAAN70lEQVR42k1XaVRUZ5q+mZ6ZP9N95uSczqSnZzLp0xqjSVwie1VRQBVUse/KWhT7vi+1UHtRFBSrICBgIajBGEQERAVFjSZurbHjFhVF9mJfBNSJt+CZD3L6nKlzvnOLy/2e+7zv+7xfPS9FkQ+ADzav4cf+zeRV6D/O09SPc9Q/DrPlLwdZ0vlXbPn7ESfl+2FHxfwIW/7CxNXenvLQN894Fe+fjTb8YWOvilL9E7UJQlGbYGOu2vAhtsw0yVLAxJCtj9vlY8hGjBcWuXiwPQk//TWWfM/GHEeLebYGS/ba9RVHHaad1NNTfF3s/8eixlxUga/5eozay9af2eaZXzIl9Ct2Pk3Yrb1gSsk9ArorDa/YsvVJZ83amL2cHraW0EOWIvM8S73+nmvArGthOPWPz5KrvueNuwGDrHz6BVNCNubjlQNZLClesvIxSP4ed9Fg2q0Qk85qjDkoMWwjxYi1GFP2SprmFuMdv+TaJtjjL1T/OsfTPZ/nF5LN0rVBppQASDHkIMMAU4w7n8fjxpYo3P4shrBMwThHiQkH1W+AVpuAayscPZZdikcWitv+nVpwVv3PDL9gacpFC8Ju/SXzN7CXBLR3uwCnfXLQkWXAOckB9IUo8f3OaJBiYcSWPGcpgomlWF9w1GKJq3u/HFb1BbXE01mveBhgctGsD9nnr5PCwOSswe1dCejwz0V7bw/O9J5D/83ruPbTHfSGKHD3q0QCpNxkOM1SYcGpYG2NX4aVfQdcqGGeJmCKo8YTu1zz360y8XfLDPxsk4Wr2yLRVVCLjvNn0XW6A5f7LuL6nVvor2jBD9ui8MgiC4/2pOOZZQ5e2orNi/Ykxz4lkdSUW2HGa9eijTDNAwwiE5ZkswiPSWW7G46jq4cAdpzB5YuXcOPWTfSf6MCAdd6mpAYt8zBK5DXNVtLvSWEWfMoU1LyLrpD2rsCEs5oespdhxEGOcWcVBq1F6NbWou3yBZzpO4dLJOQrD/+G/rJmjFqIMMaQYZiEbGIosMDR0uBXYtWjvJqa4xXUvvcqxxhHQb8iEhlxlGOUq8QoyeVTOxEuCTS4IKrE98p63Ewq21ACTEwFRgizYUsxJuxkmHMigLwyAljaSs3wda3/ACRF2QTckMYoh2wiLxjdk4PRXdkwEVYztjJMO6owTtboJqAIE4TprKPWDF4JASzppqb5umtvPUoJgNK8IWjSrwScADop8MqRaNGB5JRcR0kaJngaogYibEci7A1AKxHGCcNZJ+3ae+divOYX3aWI/l4suuk3GK4NE8BRwnCCq9pkOULCfkU6Z4iEOeGkxCRXjWkuASWAYwRwdCOHdvKNkNdXODosuRSOU4s8/aMFTgFpO8naM4YIzwjAU9IhT+zy8MiG9LBVDp7Y5OAXcu8ZeeHARm7JMwOkygMbVbaRbIS9vuqgwSpHN0iVxRUcFUXIEeiSSHMZQjCsg8FziIabYxxc7KPAtBVi994o8Dnx8HJJINc4uDnFg8mMAsMmBta2UQj1zKQzg1SoSTa0Usqi5tqauktgB2TTu8mGvMzj4AXmwdo9ATtdkvEZOxJfc/bB2jMJW9xi4OuTi6W0duT6afChXSQE7vnwDMunfRKLkampbaYUioP1VaVdKMg9QYtTjkCR2QonLzF2cqLB9wxFoK8XbDiB4LmnQxmiRbB3LpZT2vGDsBFBLrlAUg/EkSW0d7QWKk3dN1RjVVd9ruwQUhMa6aCgMnzOCkRYSAROy5PQnJuGz5iR+KNVBOL8pICUdEucEe0RVXgcdRSngw7CnNiNkFA5HZZswKmms62UWtnQIJXVwNF/Px2fFInMOCFEsdF419SG76Q1+LO1ANsI6B5+PGrCS7CW1YXe8GZcEdRjTHgCet8i2Pln0nFpFTh79NwJ6nBDaWPtAR0eqKvphezT8PPKxeecBHj6piM2NBtbGVH4yDoM2uBCDKW3YiT+FAZVSjzs/xB3q93Ru78F05Ie+oC4GWVVLd9Std1djcnaQxC55dK9AQHY7hAJa14cbFwTsdMpBp4ewXDkBUDgK8blhEM4E3wE1w9xMT5K4dHFT/FUeAwouE1fUHZCoaz+lhJXNDRmkMPTwjOOFvrHQJZYBEGMAlak4lzXaIjS+eiu/29kRHpgKzcB3oE5cBGm42ilE0zaTPQFGdGYWEdr0mtRoTh0khJJyw8n5JXiuLCSfhN/Gqs9t7H0430c1NZjGysWpanWQAeFmkw7uHhJIUhQ4pOAVKQ66zEc1oa3SV3oy/iG3helxX1123dUgqTwcIP6CJDWSc/rujB88QZmL93BGwIaF1eArTYhiNzPh29kCoRCFWxixPAMyUG0dxaGYo9B76fHlcxWOii6GFc0rd9R8WKt8V5RF5HEOfrh0fMYaLuMuat3sXz1J9yJrMVWUuUPLeNhF5YHhiAHvDgZPHzz8BdGEmL4cmxnx4O9P5tOSSvALSVhmCgpMU4YLuJt0/f0vRPnMX3hBmZu3sd89Xm8YVZCHRCO3Y77YBOUC8dkGYKD8+HqGYOkMDci/mBsYSYgJCaVjs2UoVBpbKMkYoPR1PgDVi/fpye7r2P6+j3MtV3Dsl8dVm3riUT4aC/4D7BCc8FNU8ApTI121U686/tnJCT4Y699KmKEcjolqRwybUMbdbBEZxzrvovVHx/QE1dvY7alH8uB9VhxrcAy6zAWw4S4oPkI9pES2IZl4TNuLBIFPjgq2wF7vjd2OZMuipHQCYmlKC892EaVldQbf+kjRfjbY3pGdwrL3GosOx/Ga+ejMDtXo89TiD95xMMiIgdREQZkJTZgGzsOX3PFEAgaSdiJ8Bek0zEZ+VDqqk9RcSl6Y2/7ZZire+mFnQewwq3FqkCElSxv4MDH6JP/Jz5ySoZjkgI18gtQ57bBwSMdLLcMZCe1wpKXDQ/Sy1GJBhTpjKeogxUGY33pISy5H6GXfdOwWv5nvD1CYbXlA6CZwndZW/Axg1QyLBcW3EhY8GJRln8OfD85gkIqwXDLQ2paA52YdQj60qZ26unVEqO+pAQtftk0av6ApQYKb4wfYOHIv+B/T1LQpVvgj1+TEJ0FkGYeQ4X8PPY6x2EXOXCtCDt7j3wYlN30vthC6A0EsONoh1GmboCdVwzdr/oEb3soPL/yOwzc+AAjP1PwjXDHf1nEE5FXoEjagZzUZhzSXIEjOTNFKSeRGGtEXvYxWphcjqbDp9qpjHqjMb2sAUxeKr2HEwtj4+cYfUQanwDWVW/FDnshvnRIQoGoHTExFXDzFxOm34Dlno2k2CaECaoQlVBpjk2rxIPOG6cp8ak2Y1Z/H5yixfROclR9zUhAXAofrVU89NRlkQM3Amx3MYryO+EfqsQekkcGPxXl+RdJhVPx+13eMKjOmzXqNvxcd66Dyus8Zcy+dgnWQZn0Loco2OWo8SU/B4LQeOSmxWOLXQRcfdTIS22BO2H3FVsIX+LAggUGfMFKQYn0IoIiC83hScV4cPIaATxxwph++gy+za6hORlq7D7VDIf9qbAkSf/SIR7byC/hbl4CAmKk8AoX4Zv2Xjz65Tke/vIUsqIjSIlrQXpmg9knSoXW5q4OSqKvMyrqm9EpKaWZxQewp7gUrLoa2EsKSPgRcAsW4+GDJzCZTBibGMfgk+e4deMnvBoawbOBQbDJ+WjFSzIHJ+hRWt5yhrqj6TB21RyGICqc/mu2BtbGOjBbGmAfnoPtViFQVR7H1NwkBl8MYmJiAqbBITx9/ByX+29g4N5jdPRcR4ak2rwvphC60qYz1GN9h7G5+iS4fmn0l8pCWLY2wf5YI5iR+fjUJhoq72y87bgH07t5jE4SluPjmJycxNzsNKYnTFheXsLK6qo5Mr0cSn3DGeq04oRRomiEj0BMs6Il2B2eDbtcNRgkj1XVDrh/8nOIMuS403Yf7+68wMKbRUzMTJEUTGBicRKLrxcxOTJrFqaVoPJgcSd1tD7ZaCgnVUssp52JHNzck8FzTEeAfzR6u3bgZv8W7OB74ZyBgWOFhs0Qp6rOY2h4BBMXnmL65wFc0jeYvYQaFNc2dVLH28KMB+tlSMmS0X3qYnSpD4MfKADLNRW2rkIERDqg88ROrE5+ArfwQMjzueitYoEbLMPZnBCkJYbh4jmGOSBGi4LGb7uozILapnztEVQW5NGhhJVfQDp4ftGI3Z8Bt4AwMNmpiEtn4nijJVRKZ6wMf4Wes5aITmJj8uVfYDTuxeyLHeboVCnJYUs3FScrakhSVcEuRER/TGTC2B+EEP98UqRU2Afvg7NLOqwZGfjUKQWc0Eioy+wgN1jBJ9EdlY27EZrNRUiW0OyaoEGe4XAndcuv4HGbtxyV7JQ1LSMRcvLjo3NIQx4rHiJi55ItopFnHQsxmzgzVirSLDKRa5uCjL1pSPkqGZI9aShnSddb+VLcC9CPUstuxe/e8AqJC1VhmkwAs8SpTpM1Q1yqiSXHJJmsJojXniX/XyR2eJmsBfJ9ninHvK0ES8Rjv3PUgHbSgeYbQM266eZmyVA44qRYf0VGMnLFOLHEY2QS2BjRBu2lm8PkGLm34a8nyRA5QQBHGXIy70nIeCHHjJMWi5yC9VXX4l+pXz3Lpt4R027iqNZHCcMNw/6bx1aRmUW2OZFujGsbL5namEjJIs9inDAcs5Zgyk6BpQ12LsUwe1a+oxY8ikvIeDs7z9OtzHC0v045qulJtspssleayaa1jWVyUK4Rs74256Jbm3cuXJvjFJhnHbTmWbaGJob9/QJXt0rYzS37lFX9Hz/Kwxgia0ZuAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;a Thermos with a picture of a cloud on it&quot;
        title=&quot;&quot;
        src=&quot;/static/28aac5e72e64c997f22829891ec5ac10/680fe/cloud-funtainer.png&quot;
        srcset=&quot;/static/28aac5e72e64c997f22829891ec5ac10/680fe/cloud-funtainer.png 156w&quot;
        sizes=&quot;(max-width: 156px) 100vw, 156px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;And this is why Knative describes itself as ‘serverless’.&lt;/p&gt;
&lt;p&gt;Another way of describing serverless, which involves less head-warping ‘there are no servers visible to the developer, but there are servers underneath, and actually the developer sees and defines those servers’, is this: &lt;a href=&quot;https://twitter.com/tef_ebooks/status/1339151538917355520&quot;&gt;“Billing per request rather than per instance”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/tef_ebooks/status/1339151538917355520&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 519px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 62.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB9UlEQVR42p1TCXLaQBDUS52POe/gBTnMISQk2xATIhIJ0LnovkCdmcFOqBxOVbZqamev3p7eXm00GuFpvUbbthiGAdyG/4jT+Ywzndfe3Nzg9vYtgkghVkckx+wHsIBf5X9qvM5xOp1wJlBts9kgSRJi2KEoStR1Q1FLNE0jzHmO+67rZL6qKvR9j7IsBegaXHt4XGJumDBNC9OZDsNcQJ8bsO17LCwLy9UnGLT+tP4M+/4Buj6XfRwzXcd+f0CapmjpMm4aHx5PpjAXloA9Llf44ji0cQ/H2UrueTvsaMxab7dfJfgi1/We8xWyLLsA8kZvt5PD6nj8Sf9Kn1c1/EVPjfULwxAx9UzdDwIpI89zmQ9orJSS+cPBRxhFcIhVFMWI44TWQyHEZ4Uh67ewbCmXYzKd4W48wZR6loJz3vPxbixrM9JwTHM85nUev3v/AS7JIoCWbZNuS1gEyrlhmvB9X25XiRIZuAru0zRDQKx5LJUR24TYX1zSXgAPfoiIDr/E3g+Qkx16sgO/XNv1ZJdeTPs3b75oLRrW5L+Svde0KCryGOUceVEhzQuoLEdGOZuWn4D73+Ia8JvrQlEpaU6mJiOHYSR5UdYC1NBFnudRqTFd1P7z12isATPj4PJyYpWX1TPjBg1pwy+aZgW4mlf/9DDgO0o02Jz1MuYcAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;thinking about that time i was in a meeting with amazon engineers, and my co-workers asked &amp;quot;what&amp;#39;s serverless&amp;quot;. i said &amp;quot;per-request, not per-instance billing&amp;quot; and there was an awkward silence like all the hype had been let out of the room&quot;
        title=&quot;&quot;
        src=&quot;/static/3db7d9308e2498aeb8ecee285850ce4e/b23ad/per-request.png&quot;
        srcset=&quot;/static/3db7d9308e2498aeb8ecee285850ce4e/772e8/per-request.png 200w,
/static/3db7d9308e2498aeb8ecee285850ce4e/e17e5/per-request.png 400w,
/static/3db7d9308e2498aeb8ecee285850ce4e/b23ad/per-request.png 519w&quot;
        sizes=&quot;(max-width: 519px) 100vw, 519px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;But there’s still a problem, even with that name. Well, the first problem is that it’s a bit of a mouthful (BPRRPI, anyone?), and the second problem is that it’s not even accurate. A managed &lt;a href=&quot;https://knative.dev&quot;&gt;Knative&lt;/a&gt;, like Code Engine, has billing, and it’s per request. So we’re good there. But if you run Knative in your own cluster, what you’re paying for is the cluster instance. Unless you’re really really good at FinOps, requests won’t be billed. Knative itself doesn’t ship with any billing support, so any name involving ‘billing’ is a non-starter.&lt;/p&gt;
&lt;p&gt;What about ‘Container as a Service’? It’s a good name — but it’s been taken. Container as a Service describes a general managed container platform with per-instance billing. For example, Kubernetes could be described as CaaS-ish. (OpenFaas, which is all about running containers, not loose functions, is still a FaaS, not a CaaS. Did I mention all this naming stuff was hard?)&lt;/p&gt;
&lt;p&gt;And this is why Knative still describes itself as ‘serverless’.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[When TDD gets hard]]></title><description><![CDATA[Test-driven development (TDD) is a core IBM Garage practice. It provides the foundation for the other practices such as continuous delivery…]]></description><link>http://hollycummins.com/when-tdd-gets-hard-fc14136c3f44/</link><guid isPermaLink="false">http://hollycummins.com/when-tdd-gets-hard-fc14136c3f44/</guid><pubDate>Wed, 14 Apr 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Test-driven development (TDD) is a core IBM Garage practice. It provides the foundation for the other practices such as continuous delivery, DevOps, and automation. When you work in a test-driven…&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Scaling your enterprise innovation with start-up speed]]></title><description><![CDATA[Practical strategies to accelerate the delivery of your future growth initiatives A collaborative chat between Sabine VanderLinden – CEO…]]></description><link>http://hollycummins.com/scaling-your-enterprise-innovation-with-start-up-speed/</link><guid isPermaLink="false">http://hollycummins.com/scaling-your-enterprise-innovation-with-start-up-speed/</guid><pubDate>Thu, 01 Apr 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Practical strategies to accelerate the delivery of your future growth initiatives A collaborative chat between Sabine VanderLinden – CEO &amp;#x26; Managing Director – Alchemy Crew and Holly Cummins – STSM Innovation Leader – IBM Garage We do not have a choice. Our world must become comfortable living with a heightened level of uncertainty. Learning from the recent crisis has helped businesses digitise faster than many others have in the past. Still, we now need to digitise consistently with internal and external experts eager to engage, learn and execute together really cool solutions and solve some of the most pressing societal problems we have yet to encounter. Both Holly Cummins, Innovation Leader and strategist within the IBM Garage and I had t&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Cloud-Native Is about Culture, Not Containers ]]></title><description><![CDATA[At QCon London last year,  Holly Cummins, innovation leader in IBM Corporate Strategy provided a session titled: Cloud-Native is about…]]></description><link>http://hollycummins.com/infoq-cloud-native-culture/</link><guid isPermaLink="false">http://hollycummins.com/infoq-cloud-native-culture/</guid><pubDate>Wed, 17 Mar 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;At QCon London last year,  Holly Cummins, innovation leader in IBM Corporate Strategy provided a session titled: Cloud-Native is about Culture, not Containers.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[What do fashion and programming have to do with one another?]]></title><description><![CDATA[Last night I dreamt that Roger Daltry’s wife told me to write about fashion and programming. We were in a small
skate-punk shop. It was…]]></description><link>http://hollycummins.com/programming-and-fashion/</link><guid isPermaLink="false">http://hollycummins.com/programming-and-fashion/</guid><pubDate>Wed, 10 Mar 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Last night I dreamt that Roger Daltry’s wife told me to write about fashion and programming. We were in a small
skate-punk shop. It was never made clear how she knew me or why she cared.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/c0825be8747d19423e4446eaaf978324/f4c81/flaunter-2KbjY_7c7to-unsplash.jpg&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 66.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAQCA//EABYBAQEBAAAAAAAAAAAAAAAAAAEAAv/aAAwDAQACEAMQAAABt6wVWTBP/8QAGhABAAMAAwAAAAAAAAAAAAAAAQIDEgARJP/aAAgBAQABBQKd5B1s2PLDz1ndVga//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFREBAQAAAAAAAAAAAAAAAAAAABH/2gAIAQIBAT8BV//EABsQAAICAwEAAAAAAAAAAAAAAAABAnEQMVFy/9oACAEBAAY/Ao8aE1eH5I0aP//EABoQAAMBAQEBAAAAAAAAAAAAAAERIQBBMWH/2gAIAQEAAT8hNKsK75kbgPpb2gCS6gyxgDC6HdC4G//aAAwDAQACAAMAAAAQ3z//xAAVEQEBAAAAAAAAAAAAAAAAAAAAEf/aAAgBAwEBPxBH/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPxAf/8QAGhABAQEBAQEBAAAAAAAAAAAAAREhADFBkf/aAAgBAQABPxBluzAVAk6e4c6JMH985WxE6TRj8473ACvmB3rBcvM7YFgEZ3//2Q==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Models wearing black and white on a zig zag runway.&quot;
        title=&quot;&quot;
        src=&quot;/static/c0825be8747d19423e4446eaaf978324/4b190/flaunter-2KbjY_7c7to-unsplash.jpg&quot;
        srcset=&quot;/static/c0825be8747d19423e4446eaaf978324/e07e9/flaunter-2KbjY_7c7to-unsplash.jpg 200w,
/static/c0825be8747d19423e4446eaaf978324/066f9/flaunter-2KbjY_7c7to-unsplash.jpg 400w,
/static/c0825be8747d19423e4446eaaf978324/4b190/flaunter-2KbjY_7c7to-unsplash.jpg 800w,
/static/c0825be8747d19423e4446eaaf978324/e5166/flaunter-2KbjY_7c7to-unsplash.jpg 1200w,
/static/c0825be8747d19423e4446eaaf978324/b17f8/flaunter-2KbjY_7c7to-unsplash.jpg 1600w,
/static/c0825be8747d19423e4446eaaf978324/f4c81/flaunter-2KbjY_7c7to-unsplash.jpg 4500w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;em&gt;Photo by Flaunter on Unsplash.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;By the end of the dream I’d almost written a “why fashion and programming are actually connected” blog, so I woke and
made frantic &lt;a href=&quot;https://owlcation.com/humanities/Novels-Inspired-by-Dreams&quot;&gt;notes&lt;/a&gt; to try and remember it before
it &lt;a href=&quot;http://web.archive.org/web/20250211132224/https://www.medicalnewstoday.com/articles/326421&quot;&gt;slipped away&lt;/a&gt;. Although
on the surface they seem pretty distinct, there are actually some interesting links between fashion and programming - or
at least, I think so. Let’s talk about gender, creativity, labour ethics, climate, and trends - all in the same blog.&lt;/p&gt;
&lt;h2&gt;Gender&lt;/h2&gt;
&lt;p&gt;Fashion is strongly associated with women, and being a woman in tech can be uncomfortable. One of my coping strategies
has been to not be excessively girly. Talking about &lt;em&gt;girl-topics&lt;/em&gt; like fashion makes me feel vulnerable, so this may be
the most personal blog I’ve ever written. (I nearly threw the whole thing away several times because I was so nervous
about outing myself as &lt;em&gt;GIRLY&lt;/em&gt; and being perceived as vapid).&lt;/p&gt;
&lt;p&gt;I love being a woman, and I love working in tech, and I’ve been lucky that I haven’t had too many problems with the
combination of the two.
One of my coping strategies is that I try keep a strict separation between my work side and my girly side. I have a set
of ‘work’ clothes’ and ‘home’ clothes, and they live in different chests of drawers, on opposite sides of the room. At
home I have fun with skirts, sometimes quite short ones, but when I’m at work, I wear loose fitting tops, and always,
always, trousers.&lt;/p&gt;
&lt;p&gt;Honestly, I don’t think anyone’s actually fooled. A few years ago
when I had booth duty at a conference, I was the only one on our work slack channel who asked what colour the booth
t-shirts would be so I could pack coordinating eyeliner. I just like high heels
and &lt;a href=&quot;https://www.theguardian.com/commentisfree/2021/mar/10/make-up-not-frivolous-allows-us-to-rebuild-ourselves&quot;&gt;makeup&lt;/a&gt;
too much, so I’m probably not &lt;a href=&quot;https://link.springer.com/article/10.1007/s11199-019-01115-y&quot;&gt;blending in&lt;/a&gt; as much as I
imagine.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/siantownson/status/573466622846988289&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 519px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 69.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAAsTAAALEwEAmpwYAAADmElEQVR42lWTa0zTVxiHGzQoA7eIgoPSpaA25aYIUdYqIhcLBSqFLQi4ZeqSLXFbspF92AcTNz4s2T1ZtuwDugxsAcHhmBWVhnFLmHUCwSLXgaUMKNDC2FoEaXn2p5jA3uSX95yc8z7n+hMtL7kYH+jkn7/ncTjmmJ2d9cput+N0unC6FnE9WWJpaRnX4iLOxSfetjdWV9clhNvjwe32IJqbmaCt4lMGzV30Dwxh7u2jc3iSRxYbg1MLDE06GB19zMhjK6PjkwwJeWrGLizuYFZY1DY9w9DQn8zPz3vBoqdPV1gQBp1OJ5axMUaEYstfk1gnphgTZLGOY7FYGJ2YYXh6gT7rLFabgzmhxm53eME2m82bPcJuRW6P20s293RzpjCX4qJc8rUqCgs05OSkoko/SuoJBcnJSlKSlKQfU5KqSCRF0FpWJx3lnFbN2Tw1D7u7EK2srHiBvzU2ErLDH7lUSmJsHCkvJ5OboeW0pojX81/jwhvvEB0hQ/ZiMFFhYmIkocRKxGgVB7n7VQk95aXMjPQJQPf6DtuaWwja/hwXSj6jweSg9qaJsiu11N0x0dK7QFvfv6izXhEgL6GIjEQhl5EWF03JqyrKP3oTvaDx/h7hyM+A7S3N7PHz5ePvvqEXD5XGGxRp87j0yRdUGDt4sOJCpdEIc/w4eUBO/uFozp9I4MNTyVwsOMkH2UmYTR0bwHutzezdsY3yH76E5RE6rl/BqKujraoDs7GLR6YGVIfj2bnNj1R5OBmxMjITDpJ5KIaMAzLeOn6IvvubgA/aW4kLfJ7L3/+MfXiO6tKvKbuko/T8bRqqJqn+sR6lcNx9u3YRHPACykg5b2uyeS9Py/5QCWkyKcOd9zaA5t/bOSYO5HJNHVahb+p/yA1DE2X6AZqty3QJb5eqUrNzqy9hgUFczDvCyLfv0vP5+5yKj0IpFTPafX/THTYZCfP3RZWm4OwZLeeKtRQXZFF4OhNtThpZGSmESyQE+QeQIA0hSrqf/DQ12vRsIsThHI8QM/hHx8a3MRgMiEQifHy2EODjQ1ZEKHlyCZl7Q8mQhaGJCeeIANrt70eidA9b/QIJDosjVBpPyG4xIdu30NR4F5FH8OBaTAsWqvipHL1Oj05XifHXX2i9VU/r7ZuCDLTduUVD3XWqKnQYamu4Wl5B9dVKQXrqa65xTa/3Oke0Zpc1e3s2fL7u+2eG3xxr457Nk/h/f3V1lf8AWJcWG4CQ57wAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Tweet: &amp;quot;My friend @holly_cummins is a god of soft dev, so why do I, feminist, notice that her outfit rocks? Photo @techiewatt&amp;quot;&quot;
        title=&quot;&quot;
        src=&quot;/static/a7dc0a72a694a086c509d3b7b69e8491/b23ad/siantweet.png&quot;
        srcset=&quot;/static/a7dc0a72a694a086c509d3b7b69e8491/772e8/siantweet.png 200w,
/static/a7dc0a72a694a086c509d3b7b69e8491/e17e5/siantweet.png 400w,
/static/a7dc0a72a694a086c509d3b7b69e8491/b23ad/siantweet.png 519w&quot;
        sizes=&quot;(max-width: 519px) 100vw, 519px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I had pink hair when I interviewed at IBM, and blue hair for many years. My dad points out that pink hair is definitely
&lt;em&gt;not&lt;/em&gt; blending in at all, but my crayola locks felt &lt;em&gt;punky&lt;/em&gt;, not girly.
This is me, just before my interview with IBM, doing a quantum computing experiment and being an unwitting-stock-photo
for the BBC.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://news.bbc.co.uk/1/hi/education/374507.stm&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 640px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 69.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAAsTAAALEwEAmpwYAAADZ0lEQVR42kWTa0ybVRzG36/6aepgLPGDm9/5thlj4oy3ZCb7gpcP0zG2zE2yzSkleI0jXmIimRizJZszbDHTxImM4gYKtJSlpZTeL1Davl0vTC4toxDohbbw85xDmG/yf8/Jec/55TnP/3m17u5henosDAw46e210d/vxmaLYzQ6uHXLrsa+Pocae3vtosa31ozj9BidmPqsWHvN2G+Psl5cRzMYbnLmzO8cOnSR+vrz7N5tYMeO96mtNbBrVys1NQY1366dOz+ktqaFutoWHn2shbNPvMzo43U0171Gan4NzeHwCXUW7t6dYGjIyuioA7vdi9MZEErdjIzYMZlsmM1jWK0uxsd96vuwXBu04BkewtV/G7vNRalcQatWq6TTKeLxOH6/T4AmcLudal4o5FlfL5HPr4nKU6lUkE+hUCAUCuFyu1hYXCTz4AHVjar6pslNc3NzJJNJAXILJWYmJiaEshHC4TDT09NEIhHiepzJyUnm5+fZ3NwkGApjNpmYEmvykWsKWCwWFSCRSODxuPn7n0FGLKNEY7pQnmbm/n0BWVDzuK6TW1qiWt3A5fIIqwZEg4xKbblc3gJK8qRYiERj3Oy6xMfvvMhXza9zreNzurt+5NfLF7jc+SXXrv+ERfhnHnMrC3QBdzgcAuzC6/Wyurq6BZTeBIMB9ESaOz9/zaXm5+n64gSdJw5wpf0cFz59j7NNBzl1uIHDz73AyeNvky8WlFqn06lsymazD/3VZmZmFHAqEidt/w39xgdEjN8SFNV66hiNb77BwB+/YGhs4MlHNE4ebaBYLCHPBQIB0Ty/8n9JWCFvq4Bej4dU+l9ifguuOz+Q9/xJLjnGudPv8klbOwvpWVoNrWiaxvGmt6hWyqpZPp9PNSwajbK8vLylUL4ikWkmw1Fizr/ov3iM4j0zgzc6+O6zJq5f/Z5vzrfxzP59CvjqSwcUcBuUSqVUSmSUFHBjY4PFbIb57BJTfVcIdh4lfLWN7s6P6Gg/zcFXnmX/vnr27HmKvXufpvHIEZHNdQW02WwqXvLqpVLp/xxKubLSyRR6RCeh31NdlFGKxeSYVD7Nzs6SyWTUYZlJCZRXl/vW1ta2gPJPkYel/JgYQ2KjW3jqENn0+wMqEtJ42VGZVxl2eXhlZYVcLvcw1NvB/g/6rYYkDrjPTQAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;A picture of me with pink hair, in a BBC article about science.&quot;
        title=&quot;&quot;
        src=&quot;/static/38baaae3e0495184b2c7904c48436b07/6af66/hollybbc.png&quot;
        srcset=&quot;/static/38baaae3e0495184b2c7904c48436b07/772e8/hollybbc.png 200w,
/static/38baaae3e0495184b2c7904c48436b07/e17e5/hollybbc.png 400w,
/static/38baaae3e0495184b2c7904c48436b07/6af66/hollybbc.png 640w&quot;
        sizes=&quot;(max-width: 640px) 100vw, 640px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I have such admiration for people like Trisha Gee, who are brave enough to bring their
whole &lt;a href=&quot;https://trishagee.com/2014/02/10/should_you_notice_im_a_woman_should_i_care/&quot;&gt;short-skirted self&lt;/a&gt; to work, and
who &lt;a href=&quot;https://trishagee.github.io/post/st_what_to_wear/&quot;&gt;write thoughtfully&lt;/a&gt; about it. Folks like Chloe Condon and April
Speight go further and directly link their coding and fashion interests in their public persona. Check out April’s
twitter handle.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/vogueandcode/status/1364241435466231810?s=20&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 515px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 66%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAAsTAAALEwEAmpwYAAADTUlEQVR42lWT60+TZxiH+7/sw7J9WFziBz+xLeHDyJYsOtwMZrOAZDJFw5laIVZAqUrXURDl5IBi5TyQUsAqLdhSK4eBOLG0UKSCErUt5WDp+/bai6K4O/nleX7Jk+u5cx9kvnk3444hXgeCLPp8zC88ZfnFCqH1DYKhNQKSVtfW2XwT5uOI7uj9XRBFIoKAbHbEjE1fzvLzF8zPefDMzvDE5cL71Idnziudi/hn3IgR4R0k+l5RohLkrWHHS5JFpIdsbjC5FEZnD9NifcyA0YDN3MKUs4+m2lYeDIwwaX3AzP1JnjjH8E6M43k0zejoFKNjkzjs41jMwwT8QWSC+O6HvpkwaV1bFJihpNlOR5eB28NWFEotqjMa1Gev0FhezXBHB0MtbYwOWvjH7mBs0IqpewCDvoelpZe7QMt8FMVtkSKrSOG9KGonXBv0kK0sIln+GynyE6SfykGdX0jt+VIMV2owX7uOp6eHf/sHMDa1sbjwTALu1MA+F6JoaAPNOPw5IVDlhc5bZjQnUjl44DAJB49QnJmF/kIR2tx8rqrUNJSWMdneynRzA487WwisrGxnKL4FmiwOzv/tpMkroncFMQalMrh9mP4qQ6vIRZGUSEthHvcq1VzPO80FpYqzqnPYbjZiq9Uy291MyO/fBd66O8LFzjsU6LtJK62j2GBEVW/Cet/B3aqL9F3KpVWZQacyHcOZDI4eO87vJ9OZ6OnA3d/Bw95WXj1f/hhoJSEjm0Mns5BnFyDPVJF6uhhFsQZzTQn1p46ii4mj8afDZKcc4avvfuD7H+Npr7jE3J12nM1VrCx6JaA0jNvRKhX3i5hv+DruW+TpeSRmqdifeIyUTCVdl3O4kf0rlQfiqEhNZn9SEp/v3ce+2FjSkg8xfrMMe4OGV8+8uxn2Dw5SWvYHXZ3NdPcaqW7Qo7taQeU5BTdyfqH05xgK4/agS0sgX2pMbHw8n+79kk/2fEZ94XGGa1SsLMwii+502R8MSPMdIBJeRQiHWF99ybxrGmO1FkdbHZb6ckzlJVjqdCy5pqQVddPX34tac5nupipmbT2sBV8jE3eA4a0IwbUNtiIRRGk2t31ofVPywof93RJEQhtvEATxf+v2Yb+jUf4DDnhAzcmBkEcAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Tweet: what a developer looks like.&quot;
        title=&quot;&quot;
        src=&quot;/static/c31efc98afce8aeec5742c03f3dab41b/fbdcb/vogueandcodedevlookslike.png&quot;
        srcset=&quot;/static/c31efc98afce8aeec5742c03f3dab41b/772e8/vogueandcodedevlookslike.png 200w,
/static/c31efc98afce8aeec5742c03f3dab41b/e17e5/vogueandcodedevlookslike.png 400w,
/static/c31efc98afce8aeec5742c03f3dab41b/fbdcb/vogueandcodedevlookslike.png 515w&quot;
        sizes=&quot;(max-width: 515px) 100vw, 515px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For Chloe, very-pink-and-very-technical is part of her brand.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/ChloeCondon/status/1366855558830067712&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 519px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 98.50000000000001%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEg0lEQVR42o2UeVCUZQDGd5qpMa0xtByzUcbQqcFGNJSYFHWwEPCAvPKg0hEdsOGSQLkWM9hluZdrQZZFXEBlUAxGyaxG0zBpspQVMBQzRU45FnaX5dhf78LkH/2hvDO/eb7jned93veb75H09A1wq76FAaMZvV6Pvr8fQ18fvQ/beWKyYB2jAstzGLVYxpDodDfITM+isbmFutv13NQ1oLulo+NeC+3GcUPLuDxzjI6OMiKQ9PfraW5uYnDQJFawvhhfycIEXP43LNaE3T093G2+T1tb+9OHVi+L5T/j8euJIhkyD9Lx+BFt7R10dHby5Ek3vXoD+gEjRtMgAwbTmPIcI+viY1seGOjnjq6O+sZG6hsa+KupiXv3H9AqEv/zqGWM3j790/TPYnhEGJqGR+kwjtAtvmiXYYROgfWArRNGxAQrFsvEznMsYcO9BjTlatKOx5FadARZTiyx30QjPRxDXMLXJBWkkaItJb6wCml+FfH5leOozwr9ljirFlQgVZVRd/cBkpqaq/gG+2K/xgZ7z1d4x/VVpti8xOuzJ2O3ZAorPe3x2bCB1S7rsf/wE2yWb2eqiw/TXHZiI9Rmxae8JpjkvI7TP15F0vrwb3LU+SxYaYv9qhks8Z7F2x7Tmb92Ol6ejny5zAO3N+fiNceOr1w82OCxnnneDryzeQF2XquZ67ENh81bsffeQuXlX5DcaawlPiUMp3W2uHg54LrNiY/2rGBt6HI+c13GF++t4ej2XRzbuYN9TmvZ4uaM08Y5LPKcyWIvW9x3u+L2+TRcd87n4q/VSIq1ShY6viy2NJP9AdvIL05HU5xHYOJWnFfPIsRtFyk+kZSHJSP388d73yI2BzixKWAxGwMXEK7Ywo4wZ973suFijTDMzktmtt0LuC+Zh98+P+TKTIpOliPLiEWtlFOrOUvWDl+yfPzQnajgTFEm7oEOfBz0Lh/sfYsETQzyoiCW7n2Dy398h6TwRCa29pNwX78QaVwUsrgUVFGpnFAUcC7xOKdk2VSHHeRafDh11yv5vfo0aRnRBCv2ske6lfzSQqp+zmXp7hnjhtlqJXOdJuOxyRFlVjwnS0ooCE1BG56OOiSBo0EKymMSuJQrJzMumAh/TypKColJisPngD/SpGRiko8QmxrJrcY/RcISFVNnv4ir1yrk6UloyrTkhCZSFiJShiahDUpEe+AI51QKNPEhJK1z5Nr5sySmR+Eb7c/h1CR8I0KQJshEDdYjufFbDQWJyWSHJqAMlFGereanglKu5GoFx7map6VCkUPhoQiuaBWcid7OheJTFB5LITg+CHl2GjKVDP/I/dysv43kfq2OC1IV58OVXJKp+CFDw/dqDapDkSQHBJEbKeViUSnXy8qoys+lMl9FbVU11edLiEiJIqMwj6ySTA4mB6BrEgkNRhOt7Z20d4mm6eulq7uHrq4uOjo6aW1to+XR47FqM4gmHzabRW8OYTaZMBmNopH6RRsZRNtbGRCNI/7lQfMQxkEzJqEmodZ78/DImJqEgXloGIOoL6tOpGD/BUr2zbW8lol2AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Tweet: a comical photo of a wealthy woman with a candy pink laptop.&quot;
        title=&quot;&quot;
        src=&quot;/static/da8a3001e2d60ca8d0c6f38ee34a662a/b23ad/chloe-canon.png&quot;
        srcset=&quot;/static/da8a3001e2d60ca8d0c6f38ee34a662a/772e8/chloe-canon.png 200w,
/static/da8a3001e2d60ca8d0c6f38ee34a662a/e17e5/chloe-canon.png 400w,
/static/da8a3001e2d60ca8d0c6f38ee34a662a/b23ad/chloe-canon.png 519w&quot;
        sizes=&quot;(max-width: 519px) 100vw, 519px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;While it may feel easier at the time, women blending in with the boys doesn’t really help our industry. We should be
visible as developers, and women, and hammering
the &lt;a href=&quot;https://twitter.com/search?q=%23ilooklikeadeveloper&quot;&gt;#ilooklikeadeveloper&lt;/a&gt; hashtag, until we change the perception
of what a developer looks like.&lt;/p&gt;
&lt;h2&gt;Creativity&lt;/h2&gt;
&lt;p&gt;Gender politics aside, programming and fashion actually have a lot in common. The reason I love both of them is that
they’re creative. I get annoyed when I’m on a team with designers, and someone calls the designers ‘creatives’ to
distinguish them from the lumpen developers. I’m creating too!&lt;/p&gt;
&lt;p&gt;Similarly, sewing
is much more mathematical than is sometimes acknowledged. I sometimes call sewing ‘textile engineering’ when I’m trying
to make a point. I used to sew a lot of my own clothes, before I switched to using the same skills to sew IoT demos that
looked like &lt;a href=&quot;https://github.com/holly-cummins/throwable-application-server&quot;&gt;cuddly versions of product logos&lt;/a&gt;. It’s a
niche hobby, but someone has to do it.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/deonvaa/status/573456718048415744&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 516px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 70%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAAsTAAALEwEAmpwYAAADiElEQVR42lWUa0ybVRjH+e4nP/jJmWiMyZZ+WsxQ49Rt4piLMdNkMGCDOSm0UCiUQhmMi+N+GVtx0DEcDBgC24juIjYb6JzD6cjUSWHQ2ssLTJFiaWgpjvbtz7dlAXZO/jkn55z8nst5zol47F/hL/cci0tenM55FtxunPPzzP/rwrO0jG/5P5aeyOP14Q8EWG3BNYW6PyDiF0UipgWBpppiHDMTmEYfcvvOHYZ/uotpbByL1c6fNjtWmwO7Q8BqF5iSztudHiZcIg53ALPLz7xPDJsIhIArK34eCY9Y9vkQhGkmzRYJYMchTEmjDavVJq1LoCkBt3uB2dl/mHH5GJtxYZp2MbvgYdHrxSt5L4pBIkRxlR6ynpalRa3JIUOtJiMjHXWmCm2WitqKowwa25j7ewT/yiz+x7OYx77D0FRLnq6A/MJStLpSHpgeEhF4AgyFGBt3kMOJiRyMiyUpPobD8bGkyxOoK8/iWv9JfrvXi2X8GxyWGxLwOudba0hJVpCRqSFFkc3P9+6vAycmJlEmy8lWKshJTSbtSCIFKQco1yTTcqqQ/gs1fPtVIzevGRgaaOV7YzsGfSVatYaSY8UczS/m9wej6yFbJifRpMopVCmo1CiJ3/8xBft2o89M4uwJHd3NRfScPc7Fc5WSarncdVLyvIASnY6G6iqqK6oYGx/fkEOzmcL0VMkjJQ26dHZFvYdm704OfRCNvkRFR30efZ8f49KZMnoNFfQ1V2Hs7Kb/TDutjQ0YGvWYJcYa0GYxU6xOpS5fRX2uks1b3+CTvbuQybaiSIylsVhNjVbBuaocOhs+Q5+TjV5XT1eVge7WFtolWa3Wp4FlWiWnS7KolYDv796DMiGG517YQuaReA5JKXhFFklk9Ke8G5dLdHwe2z/M4J09SVIuG+m70IFNKrc1oN1qpq5ARUu5li/KNMhjPmLn9h1slr1KXmoir7+5g5e2RHKluxnjlX4GBwa43NPLa1EJnKo9wcXO8+GaXQM6JGBNrpymkjRaStMpk+/nmWc3cSDqbYpSYtn0soznX5RhGSpiariD0ZtfM9jTxra39lF9vIxOw+nwxUaIwWAY6PUs8uvdHzCN3OaPX24xbLxOW3sXtwau8uOQka4ve2nv6MEpjOJzOvDOCcwJZnouXeX+yAiTplE8Hs8qMBh+h8GwNrZQjQaD62uheegT2HhKFJ/e/x/PRFyb8Wy2qQAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Tweet: IoT: Websphere Liberty app server running on holly_cummins homemade ball on pcDuino over WiFi... Cool!! qconlondon&quot;
        title=&quot;&quot;
        src=&quot;/static/447322d3bb4f104f6cfa4d79b418692d/75dcb/homemadeball.png&quot;
        srcset=&quot;/static/447322d3bb4f104f6cfa4d79b418692d/772e8/homemadeball.png 200w,
/static/447322d3bb4f104f6cfa4d79b418692d/e17e5/homemadeball.png 400w,
/static/447322d3bb4f104f6cfa4d79b418692d/75dcb/homemadeball.png 516w&quot;
        sizes=&quot;(max-width: 516px) 100vw, 516px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;(In case you’re wondering, there was definitely some tough engineering in there, and resiliency was an ongoing
challenge. I never did get the connections durable enough, or find a
good mechanism for heat dissipation. It turns out computers don’t like being encased in padded balls. Who knew? )&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/holly_cummins/status/573389460613795840&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 518px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 71.00000000000001%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAAsTAAALEwEAmpwYAAADLUlEQVR42l2Uy28bVRSH/Q+xRLAqrLND7BBixRKxRqwQ6gakENKqVRriNmkgJXXU4DZxnTap2/hVj+1x/Hb8GsceP5I6wXZaO35+nJk8ClzN0Zm59+qb3/3dc6/l7+6YWEbnuNWh1T6l0+7Q6Zya0Tvr0x8MzRgMR1fvXemfTCYgz2UbjycSYyxhNcW1jz7F49kllc6gRvYkImbWDirkiyWyhaKZi6WyGSXpPzx6Q7N5bMbh4SGtVsv8iaXdOsHl2uH45EQGjqjX6mauVmvnuVYjk9knl8+jlUpk9rO0223O+n16vTP6Zu4xHA5NpZbx5Fx3SyZFE3FiySTJTEbUlVldfcj29g4FTSOTy4rKPJVqhVqjhl7TKZU1qnWdeqPK0ZuG2DIQoKzbaPVGA7ffh08J4A8ooiTHzOwsv87donhwwPbOc25OXxcrQiY4X8yRTMfIF7JoWp5yRRPPe+8VGkCv14cSChMKh4lEooRUlWXHE9LZDFuOu2xu2AhHVMJqyOyLJaJk8/sUCjlKpcJ/gc1mk1gsQSyeJCiggAGV73tbdnw+G6r3KVlVYXt9hcX5X0imEsTFonQ6Id4WxZYc3V4Xy2g0MoFe13N++PZrNtZWUHZdBF+62N2082j2O1zWGRTbn3gfLOP4fQnn08cC2yOVjF9YkBPPi3S7BvDCw7B499VnU0x9/AFfXPuQb6Y+4fsvP2d9+mderTzA85cdr8PB2rKVZ067lFiSeDxKJKqK32lZsiYK/73k4xMZjON0OLHOz7Ow8BsLc7dZuHOL1ZX7omoD55aDpcW7zN2cZm9PRZUIBBXz3YC+MxReAo168/hei+lRVDVKOBTB7w/w2G5nefEe963zPPxjiRs//cjmE1mylJciMLfXje+1l4hA3757+x5YqehsOp+xJXX3wrUrMIVgSBQoISkZF+uP1lmz2bDO3eDOzHWBBQXkExFuXr56gc/voXN6imVyATQ+svmCGKxR1Eqyc2V0OS0VvUpZr1Eu66RSKXNnFb+ber1OTcIo8IpeMQveOC1XCgejMZcbZPQNBsOrg29cCKPR+dhQLgnjIjDa5H/zjLP8Dxp31I8BHKELAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Tweet: Soft-hard connection: strip jumper wire, twist round eye (of hook-and-eye), solder. Sew eye with conductive thread.&quot;
        title=&quot;&quot;
        src=&quot;/static/b6531f56824425f21d722c5884437614/6b9fd/softhardconnection.png&quot;
        srcset=&quot;/static/b6531f56824425f21d722c5884437614/772e8/softhardconnection.png 200w,
/static/b6531f56824425f21d722c5884437614/e17e5/softhardconnection.png 400w,
/static/b6531f56824425f21d722c5884437614/6b9fd/softhardconnection.png 518w&quot;
        sizes=&quot;(max-width: 518px) 100vw, 518px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Although it has its
own &lt;a href=&quot;https://www.edsurge.com/news/2018-06-14-maker-culture-has-a-deeply-unsettling-gender-problem&quot;&gt;gender&lt;/a&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/Maker_culture#Gender&quot;&gt;problems&lt;/a&gt;,
I love the vibrant female presence in the maker community, such
as &lt;a href=&quot;https://www.forbes.com/profile/limor-fried/?sh=7f03ada24ecc&quot;&gt;Limor Fried&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Naomi_Wu&quot;&gt;Naomi Wu&lt;/a&gt;,
and &lt;a href=&quot;https://twitter.com/konichiwakitty&quot;&gt;Rachel Konichiwakitty&lt;/a&gt;. Not all of them are focussed on
wearables - &lt;a href=&quot;https://twitter.com/helenleigh&quot;&gt;Helen Leigh&lt;/a&gt; does amazing things with musical instruments - but clothes do
provide an on-ramp to making for many.
One of my IBM colleagues sewed her own wedding dress and made sure to include a generous sprinkling of LEDs, internet
connectivity, and other tech gadgetry. Even my employer has got in on
the fun and collaborated on a &lt;a href=&quot;https://www.ibm.com/watson/stories/ca-en/dress.html&quot;&gt;‘dress that thinks’&lt;/a&gt; for the Met
Gala.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.ibm.com/watson/stories/ca-en/dress.html&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 700px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 108%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAWABQDASIAAhEBAxEB/8QAGQABAAMBAQAAAAAAAAAAAAAAAAECAwQF/8QAFgEBAQEAAAAAAAAAAAAAAAAAAQAC/9oADAMBAAIQAxAAAAH1q5xq6VRZwJQJ/8QAHBAAAgICAwAAAAAAAAAAAAAAAAECAxESEyIy/9oACAEBAAEFAm8RreYFvip9TjY6zU//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/AR//xAAVEQEBAAAAAAAAAAAAAAAAAAARIP/aAAgBAgEBPwEj/8QAGRABAQADAQAAAAAAAAAAAAAAAQAQETEy/9oACAEBAAY/Alhc6cdu3pv/xAAbEAEAAgMBAQAAAAAAAAAAAAABABARITFBUf/aAAgBAQABPyEmOBE6xKzzD2IfFQhurzNQ/9oADAMBAAIAAwAAABDAGIP/xAAWEQEBAQAAAAAAAAAAAAAAAAABEBH/2gAIAQMBAT8Qia6z/8QAFxEBAQEBAAAAAAAAAAAAAAAAARAxEf/aAAgBAgEBPxDHYKZP/8QAHRABAAICAgMAAAAAAAAAAAAAAQARITFBUXGBkf/aAAgBAQABPxBw0QqFpE8UqqZYpNpZcQytKQV0XzM9kJ+TBFpteioFp9Sf/9k=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;IBM cognitive dress&quot;
        title=&quot;&quot;
        src=&quot;/static/f4760bfaf0f79c7b92ab2bcf118ab135/29d31/story_dress.jpg&quot;
        srcset=&quot;/static/f4760bfaf0f79c7b92ab2bcf118ab135/e07e9/story_dress.jpg 200w,
/static/f4760bfaf0f79c7b92ab2bcf118ab135/066f9/story_dress.jpg 400w,
/static/f4760bfaf0f79c7b92ab2bcf118ab135/29d31/story_dress.jpg 700w&quot;
        sizes=&quot;(max-width: 700px) 100vw, 700px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Even if they’re not behind the sewing machine,
developers can find joy in uniting their professional and sartorial creativity:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/Fox0x01/status/1277962582851153923&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 518px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 87.00000000000001%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAARCAYAAADdRIy+AAAACXBIWXMAAAsTAAALEwEAmpwYAAAD80lEQVR42oWUa0ybVRjH+3Gf/GAWJWTOYFDM1G/qt21xCtFtOJeI4mXG6dx0kU3myMiccplKItFkm4w5BwwYkwItHRQsl7WUcilk4HAXVij0BguF3qG0lMLP8xYZuC+e5P++55w853f+53nf88hCoRADg4P4AwEcE5N4fH68gTlmg/NCIfyzc3h9ASKLi0hteXl5TevGi9EloktLyGbn5ujq6cE5M4PJNILDMYldaCESIRqNxkCRyGJs0f81KUYmPZaEQqEwXq9PyIvf72d2dpZAQFIg9vaIeUk+nw+PxxtTbF68XS434XA4BpWt7iwF3rk7zPA9E1abDfPYOCNmMzbRH7dYMI2MYLFahWy4PR7m5+djJoLBINIppRM9AEpMaQePCAwId263e8WRGM+4XEJuXKIvjV0uZ6zvlpy5PfhEvORwToD/AwyKHa02h3Bixm53YBVOJI2PW8TYjs0+wX27Ge/kTYKhCHPCVUCkRXIofdDwwsJDR/a4GTC0c7Ong6G+bm4NDmAxmbhy+RJ7fywk/UwR+4p+J7O2ke9aO3lfreWgto/TTW20tbSiM3SL3AeQLYlPLbVJ2xiqiiI08jJaFVVoNU3cNvaS/tN5ZGmfELf/cx7bd4gtBzNJvvQHCRerSShTsPtCOSWll6mpb8DpnBbA5RXgffs4TfJSdGoFuiYF+jYNN7oMHPi1nJczviVpx+s8/1Yaz3x2lBeyckkU848WVbK98BxXr8ppaNYwPT2zBpwUwGYBNLQ00qFpwHC9lW59BxcqqzkqFsWn7OLpN94kYesONu15j/jvz/KIUOqpfKrltajUagGcXjuyw2pGVVmM7k8VOk2jcNjCjd5uCot+49XDWbyTU0DSkSzit75Cwq632ZzzMxszsjn+QwE1inqUKhXOaec6oGUUZcV5kbtrQmr0rRp6DZ00q5tIO3aKlK9OsvnICZ5I2U3i3g/ZeCCTlz7YT2VFBdV1ShSKWpHDqXXA8RHqys6hbVHH3HVeb8fY002HVsf2L4+x6fDXPJudx1Ov7STp3U+JS/uYrNx8rqnquSKOrKyrwTm1DjhhHUUhgDqRw26dlp5OPf3GPv4eGCT1mzyePJHHltxCEpN3kpiaznNpH6FQKqiplVMll6NSPuTQLhzWlJyhvUmFQbsCNPYauTc0xJ6TOWz44jhx2fk8vi2ZDS9uI/VQBl3aNi6WXKKsopw6edWKw9UfO+D3MjRgxDR8B5u4szaLuLdCDpudOl0nBW16fmlsp7C4lNNni2nRd2EZG8XY38/gX4PcvX0rdr9lUlWTqk10aVmUqmhMq6UovBBhPrwAq6Vrygv+ecSCBzGL/8avlq9/ALzeZaTq35YNAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Tweet: Omg you guys. Remember when I put my Arm Assembly cheat sheet on a Teespring joggers/pants template and ordered it for lulz? It took a while to be delivered from the US but they finally arrived and I’m obsessed. They’re so shiny, I love it.&quot;
        title=&quot;&quot;
        src=&quot;/static/b6cac725a2773d3f0619e089802d3629/6b9fd/azeria-arm.png&quot;
        srcset=&quot;/static/b6cac725a2773d3f0619e089802d3629/772e8/azeria-arm.png 200w,
/static/b6cac725a2773d3f0619e089802d3629/e17e5/azeria-arm.png 400w,
/static/b6cac725a2773d3f0619e089802d3629/6b9fd/azeria-arm.png 518w&quot;
        sizes=&quot;(max-width: 518px) 100vw, 518px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://twitter.com/search?q=%40shenovafashion%20code%20dress&amp;#x26;src=typed_query&quot;&gt;Shenova code dress&lt;/a&gt; (sadly, no
longer available) could be printed with the wearer’s &lt;a href=&quot;https://shenovafashion.com/blogs/shenova-fashion/my-computer-code-dress-custom-orders-featuring-your-own-code&quot;&gt;own
source code&lt;/a&gt;,
and ensured women speakers did not blend-in-with-the-boys
on &lt;a href=&quot;https://twitter.com/ShenovaFashion/status/738385207238098945&quot;&gt;several&lt;/a&gt; &lt;a href=&quot;https://shenovafashion.com/blogs/blog/123773319-women-in-tech-devon-lindsey-talks-open-source-software-communities-at-react-2016&quot;&gt;conference&lt;/a&gt; &lt;a href=&quot;https://twitter.com/MarieGMoe/status/691399241504296960&quot;&gt;stages&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/reactjs/status/702222725977239554&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 521px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 143.49999999999997%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAdCAYAAACqhkzFAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFeElEQVR42pVW2XNTVRzOX8KgIAy0lKSkC23pnq1J2pKulM1SERUEfFOGcXxwhtF3lS5Aiw5WR8A3HeHFGd8oTCu0WZqkbdImadpmz83dks/fuUkKQXA5M785555z73e/77fdq4onU5hzLiKWSCISiSKdToPjMsjwArgMj2SaozWPXC6HbDaLLM2SJEOSCyZJiomiBJnOVb/8/ge0p85jYf4R/OtBrMQkrCd4bEVjCK5vIBTexNZW/kXxeALxREIBf9Vg+6oo3TRrd2LJ68L10VF8NXoTY2M3MD46hvGxcVz/5jpGJ25g4va3+O7ePYzduIXJqSlMTU7hNtnkzVu4OTFB60lEo1GoRKLLxg/TP+KtnW+g6uBB1Gm1aKiqQX11LaoqtegcGkLPyBnY3j2LvndG0KrX0z3VaKw9jKbaWhw+dAjaigo8efz4OeDP9PaaSg1MbW3oNhrRZTLRuh0DJ05g+NJFDA2fRJ9Zj0ufXcWpc2dhs9lw1NSBgU4Luk1GGFtbMTc39xzwPgPUaGDW6dBJgFaDAcaWVnTTg29fPA9NRTm+GLTiwqdX8MH7xNTKgEwYsJphezXgfVRrKhVWFgJlwIxte0Mjjg2fxoi5BVePH8W54RP48qP30KVrh81CDAnY1mGEiQD/fBlQq9ZA19KCDgJiYPrmZhiYmc24cqwTH/Z3YcRiwCenBmAkwF6LCf3EsJvUGJpbShnevXsPanJsc8MRtDUega6pCe2NjWioqYae1poDFdizex9qtVUwtbeh06AnqQb0kFwzXevo3tnZ2RcAf7qLirIDaKDIHaHItdTXo6muDrWVlRTNWqjLyrFrdxnUai30pMJKDLsMOlgIjKlobWgoBbxz53vs3LGTQMuxb+9eaMrLoSkrw4E9e6Devx8Vu96EftcOXG6qwWBTHao0ajQT+3pKMZY2NWo1Zh7NQMXKiI0HDx5C165Hh8kMq8UKW/dR9Pf0oK+7G/22Xpzp78XHPWZcO3Mcn4+cxED/AI739ePk4CCO9fZiiK7dbjdUrP7YCIZCWPatYcHhQjKZhCCIVMsZ8FTHgiAoxmo7wWo7wyvnbI8vnImimC89Vuz5ws+hKL9YlwxQLCigjTwoxytNgg2ZmgNrHMX72b4qEAhgenoaoVAQwWAQa2ur8Hi8WPGvIkUPs27EjLFjcyJFTYI6EyOgABUIMDCl2zyamUEv+WDmmQPucBLOQBSOQAzejRRWVgPwr65hecWPNXoZa2uCIEFQ5L2m2zBkIcPl+5ycLTlkPTFXcAkbzG88L25fs2d52isBzIgywgKwsbmBNb8PQZLM3MCCwXH5ACjNlthJL/i4KLconc2K5FXfIsYnvsZThxt2fxjPloKYXwnBH+GwQubfTFDj3YRnI41QQkQ4nUU4lc+Al+UylSpRFLAe8IPjJaTELER6oUDKOVpH0gIyEsmi9p6hYMfpmu2lBFmJMANg/iz1IR0IJI3lEcelwZM/ZVkqyJBLWZCkXLbUz8U83ma47FzAtcsXEFj1KUk9v2CniIaUD9DzpPj3se3DSCSCh7/+hjTlVyzJIZ7iEE2kkOYy+L8jH2UKeyKdUZI1nJIQSGUR57MlSfuKR18PGE5LeBLg4IlKsG8IcGzycG6J8EQEmgW4aO2NisreAp0vRmX41iNwOZ1wuhYVY5Xl8/sVN6kisTicniW4PMtwupew6F2BfdELu8uNuXkHnpK5vct4Zncp+09pdtKZw+GEz+enPM1sf+wVhhvE0B7OwEV5xmbGMMEJyMr5mySKPssENjMTX+gusiz/XTJHPtyKU8GneMQoIJFEGkkKSP43JIMk7TFjvxr/KSiMBV/oa8X/GTYzS5OcFJe3YmvL/ZPlcvgLtJ17MgYNoFgAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;devon shenova&quot;
        title=&quot;&quot;
        src=&quot;/static/c029f14232f2b17ae08c632689ef6cd1/bb9c5/devon-shenova.png&quot;
        srcset=&quot;/static/c029f14232f2b17ae08c632689ef6cd1/772e8/devon-shenova.png 200w,
/static/c029f14232f2b17ae08c632689ef6cd1/e17e5/devon-shenova.png 400w,
/static/c029f14232f2b17ae08c632689ef6cd1/bb9c5/devon-shenova.png 521w&quot;
        sizes=&quot;(max-width: 521px) 100vw, 521px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Labour ethics&lt;/h2&gt;
&lt;p&gt;One of the reasons I liked sewing my own clothes, is I knew they were produced under humane conditions, and the worker (
me!) was treated well. The garment industry has some of the &lt;a href=&quot;https://www.vox.com/2018/2/27/17016704/living-wage-clothing-factories&quot;&gt;lowest pay
in the world&lt;/a&gt;, and life-threatening accidents
are &lt;a href=&quot;https://web.archive.org/web/20230401193235/https://www.ilo.org/global/topics/geip/WCMS_614394/lang--en/index.htm&quot;&gt;not uncommon&lt;/a&gt;.
Programmers, on the other hand, are are well-paid and are extremely unlikely to die at work. Nonetheless, labour
exploitation is a concern, even for developers. If they
had the misfortune to create a popular open source project, individuals sometimes find themselves expected to
work &lt;a href=&quot;https://www.ashedryden.com/blog/the-ethics-of-unpaid-labor-and-the-oss-community&quot;&gt;for free&lt;/a&gt; for
the &lt;a href=&quot;https://www.wired.com/story/altruism-open-source-fuels-web-businesses-love-to-exploit-it/&quot;&gt;benefit of profit-making corporations&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/penelope_zone/status/1302732113578528769&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 516px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 24.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA9ElEQVR42lWQiW6DMBBE+f9/axJKaEIOVVUJVzhCAGGMzavtHFJXWnk8qxl71lOzQg0TXdeTZhllVbkurlfTJc3tRt00lKXBbUs3jAyjQCnNNEmHe8PJeUZpjSeLjjFISeKE1XqD/xmwjyKCYOva4o/Vmm0YsosOnL9/8IMHDnd7osOJ4+lMVdUsC3h6mqEV7kcb3zfCL47HE0mSkmU5v3FMlufkRUFd10ZYvfk4vnC5JORmnqYpQgi8xdqa6vreRWzbuxlmSCmZzTq0ifEqrRcmOf/jbPTlie3pPf1cfmvwesCeo5je94dYOc4av0qYPb41wB8iQ3ygtQaDegAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Tweet: Never ever ever &amp;quot;bump&amp;quot; a github issue on an open source repo the maintainer isn&amp;#39;t getting paid to work on. You&amp;#39;re saying &amp;quot;please do work for me for free&amp;quot;&quot;
        title=&quot;&quot;
        src=&quot;/static/f8f2279fed61b86fe413ac6f28d1d797/75dcb/bump-issue.png&quot;
        srcset=&quot;/static/f8f2279fed61b86fe413ac6f28d1d797/772e8/bump-issue.png 200w,
/static/f8f2279fed61b86fe413ac6f28d1d797/e17e5/bump-issue.png 400w,
/static/f8f2279fed61b86fe413ac6f28d1d797/75dcb/bump-issue.png 516w&quot;
        sizes=&quot;(max-width: 516px) 100vw, 516px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Even when there’s a clear compensation system in place, tech workers are increasingly pointing out that the conditions
of their employment leave something to be desired. Although the pay is good, it’s not always fairly distributed
to &lt;a href=&quot;https://www.mercer.com.pl/our-thinking/pay-equity-and-gender-pay-gap.html&quot;&gt;women&lt;/a&gt;
and &lt;a href=&quot;https://www.techrepublic.com/article/men-still-earn-more-than-women-whites-earn-twice-as-much-as-black-and-hispanic-colleagues/&quot;&gt;minority ethnic groups&lt;/a&gt;.
There have been troubling problems with
how &lt;a href=&quot;https://www.bbc.co.uk/news/technology-46054202&quot;&gt;sexual harassment cases are handled&lt;/a&gt;, and employee dismay
over &lt;a href=&quot;https://www.theguardian.com/us-news/2019/jul/11/amazon-ice-protest-immigrant-tech&quot;&gt;ethically dubious contracts&lt;/a&gt;.
As a result of all this, unionization efforts
are &lt;a href=&quot;https://www.technologyreview.com/2021/04/05/1021758/pandemic-amazon-union-vote-alabama/&quot;&gt;gaining momentum&lt;/a&gt; in the
tech
industry.&lt;/p&gt;
&lt;h2&gt;Sustainability&lt;/h2&gt;
&lt;p&gt;Both the fashion industry and tech industry have come under fire for their environmental impact. If you’re keeping
track, the tech industry is responsible for
around &lt;a href=&quot;https://www.nature.com/articles/d41586-018-06610-y&quot;&gt;2% of carbon emissions&lt;/a&gt;, and the clothes
industry &lt;a href=&quot;https://www.worldbank.org/en/news/feature/2019/09/23/costo-moda-medio-ambiente&quot;&gt;accounts for 10%&lt;/a&gt;. Many
clothes are used once and then thrown out or forgotten in the back of a closet. This is bad, but it’s perhaps better
than something like Grimes’ software-enabled NFT artwork, which I’m not convinced will actually be &lt;em&gt;used&lt;/em&gt; at all. Its
main value is its scarcity, as
a &lt;a href=&quot;https://www.theverge.com/22310188/nft-explainer-what-is-blockchain-crypto-art-faq&quot;&gt;collectible&lt;/a&gt;. Because
NFT artefacts are dependent on a blockchain to ensure that scarcity, their electricity requirements are queasy-making.
The production of 303 editions of a single Grimes NFT artwork
is &lt;a href=&quot;https://www.theguardian.com/music/2021/mar/02/grimes-sells-digital-art-collection-non-fungible-tokens&quot;&gt;estimated&lt;/a&gt; to
have produced 70 tonnes of carbon, and used the same amount of electricity as an average EU resident would in 33 years.
With both clothes and NFT artefacts, the root problem is a culture which encourages conspicuously wasteful consumption.&lt;/p&gt;
&lt;h2&gt;Trends&lt;/h2&gt;
&lt;p&gt;The sustainability problem is a symptom of a social effect. We want to impress the people around us, whether that’s with
our clothes, our art, or our work.
One of the best ways to impress others is by showing them things they haven’t seen before. This continuous need for
novelty drives cyclical tastes, both in &lt;a href=&quot;https://ritholtz.com/2010/09/the-hemline-index/&quot;&gt;hemlines&lt;/a&gt;
and in software architecture.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Hemline_(skirt_height)_overview_chart_1805-2005.svg&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 50%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAAsTAAALEwEAmpwYAAACaklEQVR42o1RP2wSYRQ/yt31rjQcHhSEchS0f/ijDTVN2hiQwRAYpNvFgYEmKLWpS5OqiQ4HMkFjhEVyg01KI01uMqRpQhjYCMMNDjcxSGTWUUc+31NIHH3Jy/v97nv3+33fe9R64ZMjsn8mrRdUR+TwTLr75MK7+azpDBYu3MGjczvWjYNL/518yxUunPsih5cS9m8+bwbwbOuo5dk4+uwR09dWCkOWNTMlE/M7TePT9et5CjjisKyxcGhGThVURlY0VlHbCxSlzGla/28vYPejwsLj/af3i8W3b0ql0kPUtECKx8fHIhmNOEPTWF3vCuN+nyeGwQ6Hw3nD0Fjk+F3XVSaTyaw2m00LIWTORbksJycnrUbjA6lUKq9R0AzJnJ6eWnRdZ6DJ1Ol0Zhhuo5mnlR2Pxzz2BoPBe36/f0WSJA9wqVgsfqzVagTqC2oWvV6Pw59nGEWof2IqioJcKBRa43l+h6bpB8DDINSo1+tEUZSX/y2Isb29LUEJJZNJpyiKXo7jkFvK5fL7RqNBoP4RXIb0pVIpt9PpdAG+mc1m3SC+GI1Gl1Aca7vdXtjb29vw+XyBq6urG2DITiaTeRSoVqsHcMsfkHnkImYul7Ol02lsYNF9d3eXZxgmOv22hTOMx+MBwPQIlqeqKgPYBIY0miUSCXr2QpyLkM/nxREh+FRTLBa7ZbVaVx0OxzoO3W63BwVBCER3dtbgnO52uwKKoEkftj8YDKwEloiLpBLgiK5fXC7nT7vdg7P7trR0WxEEGwWuK7AErK/A9KvNtgKTp78vL3uNcHgRbzNKJLhfbrfPkGVWIWTuN0VaBWdhE047AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Line graph of skirt lengths&quot;
        title=&quot;&quot;
        src=&quot;/static/a7e39f550a1744b7b77963fa8028c3b3/5a190/hemline-chart.png&quot;
        srcset=&quot;/static/a7e39f550a1744b7b77963fa8028c3b3/772e8/hemline-chart.png 200w,
/static/a7e39f550a1744b7b77963fa8028c3b3/e17e5/hemline-chart.png 400w,
/static/a7e39f550a1744b7b77963fa8028c3b3/5a190/hemline-chart.png 800w,
/static/a7e39f550a1744b7b77963fa8028c3b3/00d43/hemline-chart.png 1000w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Coco Chanel said “Fashion is architecture,” although I’m taking her slightly out
of context, since she wasn’t thinking of microservices or edge computing. We all know the Gartner hype cycle, which
shows how a technology will start out as
‘edgy and cool’, and then become trendy, and then mainstream, and then passé.
Many observers have noted that microservices are closely related to SOA, which were the height of fashion twenty years
earlier, before they fell out favour fifteen years ago.
At the moment, microservices are so popular they’re considered near-compulsory for new software projects, and used in
many contexts where they’re not appropriate.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/simonbrown/status/1087371345904713730&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 524px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 57.00000000000001%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAAByklEQVR42pVS2bKaQBT0/78qeUzVTSoiyCroVWSTi7IJCHT6jOFWTJ5C0XV6Zs70nG31GAbo374gTRO4ng/H9RDsD/jfb5wmTMTq8Rjgvn3F7Vogywuklxx5ccU8z3Sb1Q/hy5qQs78B5TZj1Q8PlG2Hqm6Q1QPidkbcTEjbCadqJB+RkOf3CQl50U2/L/8bpRKsmwZ7pnh4PyLJLgjPMU7E8RQiSS/cy3E4hjiGZ64zhFGEOE4Uooi+9IviGH3fK9FVVdWwLBtb08RGN2gtWLatuOO4MHnmeTvW1/u02kaHbTvq7O37D/xca0iz7ClYVhVMishlTdtguzWxCwL4fgCDXKfwjlyaJX6248Al1w2D3MXtdsOVaO93VWEVoby4ppi8aFoWgmCvBJ5w1Z7riMgWBiH+8phEfApDvLNcIvpMua5V+BZh/5GizyhFWERkz9g+xSQ9eUD4zvdZGh0Za1+W1VNQmiI1W2uaSmOpk+B8jpAkCZ1LXPIPVCxPwZFabNu2qBnQS5c7didix85E/lEoSDfjJMWtrFE3LWS0xnF6ufhp59f16jGOaDiH7b0nOgVZd/2AkrMpuDKde9erok+8tGBe7DLy84xf4hw7bSJpbCcAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Tweet: Perhaps, but there&amp;#39;s an awful lot of hype and fashion surrounding microservices. I do see many conference presentations, etc unfairly bashing monolithic architectures. And I see many organisations adopting microservices for no real reason other than, &amp;quot;our monolith is a mess&amp;quot;.&quot;
        title=&quot;&quot;
        src=&quot;/static/21830ed94094a970dac96683a040b5d3/664c8/simon-brown-fashion.png&quot;
        srcset=&quot;/static/21830ed94094a970dac96683a040b5d3/772e8/simon-brown-fashion.png 200w,
/static/21830ed94094a970dac96683a040b5d3/e17e5/simon-brown-fashion.png 400w,
/static/21830ed94094a970dac96683a040b5d3/664c8/simon-brown-fashion.png 524w&quot;
        sizes=&quot;(max-width: 524px) 100vw, 524px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There’s a
similar &lt;a href=&quot;https://www.information-age.com/edge-computing-technology-cycle-distributed-centralised-14744/&quot;&gt;cyclical pattern&lt;/a&gt;
in our industry’s swings from centralised computing in the 1960s (timeshare) to distributed (mini-computers), and then
back to centralised (client-server), and then back to distributed in the 1980s (PCs), and then on to centralised (
cloud), and then back distributed (edge computing).
Dizzy yet?&lt;/p&gt;
&lt;p&gt;In some cases, when a new pattern gains traction, it’s because something external changed to enable it (like
how &lt;a href=&quot;https://softwareengineering.stackexchange.com/questions/171008/why-didnt-cloud-computing-offer-appear-earlier/171010&quot;&gt;widespread fast network access&lt;/a&gt;
created the right conditions for the cloud, or lightweight containers created the right conditions for microservices).
Chanel had a saying for this, too - she insisted “Fashion is not something that exists in dresses only. Fashion is in
the sky, in the street, fashion has to do with ideas, the way we live, what is happening.” Even in clothes, styles were
heavily influenced by technological innovations.
Lightweight &lt;a href=&quot;https://web.archive.org/web/20240217042758/https://www.racked.com/2017/12/7/16717206/cage-crinoline-feminism-class&quot;&gt;steel for crinolines&lt;/a&gt;
enabled the
huge skirts of the mid-Victorian era. A few decades later, the discovery that brightly
coloured &lt;a href=&quot;https://fashionhistory.fitnyc.edu/aniline-dyes/&quot;&gt;dye could be extracted from coal tar&lt;/a&gt;
enabled “mauve mania”, a fashion for the newly-possible lurid-purple clothes.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://collections.vam.ac.uk/item/O122391/day-dress-unknown/&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 133.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAbABQDASIAAhEBAxEB/8QAGgAAAgIDAAAAAAAAAAAAAAAAAAQDBQECBv/EABUBAQEAAAAAAAAAAAAAAAAAAAAD/9oADAMBAAIQAxAAAAHMe6FFmMk1ej06lEo2Tf/EAB0QAAICAgMBAAAAAAAAAAAAAAECAAMRIQQjMTL/2gAIAQEAAQUC8VWy2JfqsHeJy/oynsrepHi0VkgBR//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQMBAT8BH//EABgRAAMBAQAAAAAAAAAAAAAAAAECEBEh/9oACAECAQE/AVHIGGT/xAAZEAACAwEAAAAAAAAAAAAAAAAAAQIQESH/2gAIAQEABj8C0xq1SjSZso9OxMSw/8QAHBABAAICAwEAAAAAAAAAAAAAAQARIUEQMXFR/9oACAEBAAE/IXN8R7AXxXXuOKaeKoL0Z9lqLaip/GY4o3K7aesrCBon/9oADAMBAAIAAwAAABAcxk7/xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/EB//xAAYEQEAAwEAAAAAAAAAAAAAAAABABEhEP/aAAgBAgEBPxA13wlI65P/xAAeEAEAAwACAwEBAAAAAAAAAAABABEhMVFBkdFx8f/aAAgBAQABPxCrZgv9hq6HV89Ed8RH0KDPcGQA1qO+IuCgg7PyBlQus8P9mMhqjpMYE8DOD7JV4jdP2gzjEFE//9k=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Bright purple victorian gown&quot;
        title=&quot;&quot;
        src=&quot;/static/bcf28eb3bf78d59c1cdbb4df0572d608/4b190/2017KE1116.jpg&quot;
        srcset=&quot;/static/bcf28eb3bf78d59c1cdbb4df0572d608/e07e9/2017KE1116.jpg 200w,
/static/bcf28eb3bf78d59c1cdbb4df0572d608/066f9/2017KE1116.jpg 400w,
/static/bcf28eb3bf78d59c1cdbb4df0572d608/4b190/2017KE1116.jpg 800w,
/static/bcf28eb3bf78d59c1cdbb4df0572d608/e5166/2017KE1116.jpg 1200w,
/static/bcf28eb3bf78d59c1cdbb4df0572d608/b17f8/2017KE1116.jpg 1600w,
/static/bcf28eb3bf78d59c1cdbb4df0572d608/e25b1/2017KE1116.jpg 1875w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;
&lt;em&gt;© Victoria and Albert Museum, London.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;So there we have it. Microservices are the new purple, and programming can be pink.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;November 2022:&lt;/strong&gt; I’ve written a follow-up piece, &lt;a href=&quot;/fashion-and-programming-ii/&quot;&gt;“The Sad Case of the Tech T-shirt”&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;All of this blog is speaking for me, and not my employer, but since I mention them in this blog, I’ll restate - these
are my personal opinions.&lt;/em&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[IBM Developer Lead: What Software Does Next]]></title><description><![CDATA[Working to try and anticipate what comes next, how to harness current programming methodologies and build software for tomorrow and the day…]]></description><link>http://hollycummins.com/ibm-developer-lead-what-software-does-next/</link><guid isPermaLink="false">http://hollycummins.com/ibm-developer-lead-what-software-does-next/</guid><pubDate>Thu, 18 Feb 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Working to try and anticipate what comes next, how to harness current programming methodologies and build software for tomorrow and the day after is Dr Holly Cummins in her role as worldwide development community practice lead for the IBM Garage.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Coronavirus: Managing software development during lockdown]]></title><description><![CDATA[The Computer Weekly Developer Network (CWDN) examines the impact of the Covid-19 coronavirus on the software application development…]]></description><link>http://hollycummins.com/Coronavirus-Managing-software-development-during-lockdown/</link><guid isPermaLink="false">http://hollycummins.com/Coronavirus-Managing-software-development-during-lockdown/</guid><pubDate>Wed, 17 Feb 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The Computer Weekly Developer Network (CWDN) examines the impact of the Covid-19 coronavirus on the software application development community.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The great microphone face-off, or 'how I spent lots of money in 2020']]></title><description><![CDATA[The past year saw an unprecedented flourishing of “photos of home offices,” “recommendation threads for microphones,”
and “microphone review…]]></description><link>http://hollycummins.com/microphone-face-off/</link><guid isPermaLink="false">http://hollycummins.com/microphone-face-off/</guid><pubDate>Thu, 11 Feb 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The past year saw an unprecedented flourishing of “photos of home offices,” “recommendation threads for microphones,”
and “microphone review videos with huge numbers of views.”
I’ve experimented with a few different setups for talks, and I’ve been having to watch my own videos more than I usually
do.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/holly_cummins/status/1359133886215839747&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 524px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 60.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAAB1UlEQVR42pVTyY7aQBDl/w+55geSH8g517lmYOL2brwRYCDGeKO9v1QVIDSRMtFYKtXqZ9d73YvtJsHT929IkhC268N2PPFBGOEjzzhNmMgWv9IYXz5/QpImOGY5suyEwzFDWTUyOM9s87s2TY940Q0jzpVGVTc46REHDRz1jH4SuJs9QN97BLBpGjiOC88PoEwbzjrGy2sH9btHVIywTyP8KIVP/SRN4bg868MPrrkfrGEoE1VVCeiiKEv8NJSYMk2Ylo1ku4cThFhZHoJ0R3WLuHUQ0MvrdSigz8sV1VyppZvN4w/PRSkghlJYh6EA27YNpa7eMAzyjmywJBDX86lnylwUxwTu0YYe9ru9kLPI8zN+PC9JjAx934Mp6Mh3XUfWo21b8ZxzzDNaa5njmGtt20ksgCz1MAxvCP8P9/8U57ZyITzEcUKrW7JGnCRSC+ksMl87WodXjaIY2+1OYu555Pm4GcZKjpuIUpI6rJLredRQMEkA4Se6gnHOPXWrszgsBvO4MixYL084qK/oh+kK2PcDchKGz2FV1cjPJcq6lrzgvKhQlJXQwjyxv8fCoaYLMNaPlfnKNBcNTcRfiODmQiLQRxrdoqb63d5w9Td3d5tn/AHZSYsmpq4EPgAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;I was told by @trisha_gee that it&amp;#39;s important to watch oneself back, in order to improve as a speaker. Pre-COVID, I ignored this advice, because ugh, it&amp;#39;s just too hard. Post-COVID, I don&amp;#39;t have a choice. So the silver lining of the discomfort is that you&amp;#39;re/we&amp;#39;re improving?Grimacing face&quot;
        title=&quot;&quot;
        src=&quot;/static/07cc0b0376456e29d93b39cd421cf929/664c8/tweet-discomfort.png&quot;
        srcset=&quot;/static/07cc0b0376456e29d93b39cd421cf929/772e8/tweet-discomfort.png 200w,
/static/07cc0b0376456e29d93b39cd421cf929/e17e5/tweet-discomfort.png 400w,
/static/07cc0b0376456e29d93b39cd421cf929/664c8/tweet-discomfort.png 524w&quot;
        sizes=&quot;(max-width: 524px) 100vw, 524px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The usual “cringeing at myself” was compounded by “cringeing at my bad sound.” Since I’ve had a chance to
accidentally-compare different microphones, here is an accidental-review.&lt;/p&gt;
&lt;h2&gt;The tests&lt;/h2&gt;
&lt;p&gt;Here’s what I’ve tried this year:&lt;/p&gt;
&lt;h3&gt;Sennheiser Game One&lt;/h3&gt;
&lt;p&gt;We use these headsets in the IBM Garage
for &lt;a href=&quot;https://web.archive.org/web/20210915172925/https://www.ibm.com/garage/method/practices/code/remote-pair-programming/&quot;&gt;remote pair-programming&lt;/a&gt;.
Because the
headset mic only picks up noise right near the microphone, typing is almost inaudible. This is a must for pairing, where
people need to type and talk simultaneously and definitely don’t want to be always fussing around with mute buttons.
These headphones also very comfortable, even for long periods (another must for pairing). One of my favourite features
is a mechanical mute, so to mute you can just lift the mic boom. This is usually way easier to activate and de-activate
than an on-screen control, and it’s way more obvious when you’re muted. When I listen back to recordings of me talking
on conference calls, the sound is rich and natural.&lt;/p&gt;
&lt;p&gt;All in all, I love this headset … or at least I did, until I started listening back to my presentations. If I get
animated and start projecting my voice, having the mic right next to the mouth becomes a liability. All the ‘p’s and ’
t’s turn into big &lt;em&gt;PPPBOOM&lt;/em&gt; sounds, known as plosives. Even breathing sounds can become intrusive.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/holly_cummins/status/1319649835298017282&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 517px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 27%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAAAsTAAALEwEAmpwYAAABBUlEQVR42j1Q7XJEMBT1yn2BPkKfSvfXIrbbP0UQQVSHLmuxwWkSU2fmzP0692OuVf/UiGmAumlBEwbOOdKUIeM52luP7j7gptj1Ax7jhH54oO3uGMYR27ZBQ9tlWRUXWJ++g7fXFyRxCMYy0DhBFFHDVMVxkiJSuUQtSRnHVxAiogmEqAx1jxACPM8h9UApJYa+M0XXJUpMEYQhHNeD/X7C+eyAEILLxxWuR2DbJxD/Ao/4xuqBpeotyxLrusL6P7vrehSlUIV9W67IMr77RaHiAlX1DVFVRpMyZvJt+4umaUy/xjFwfkqM02x8ffo0P7FjU7+bIeVy6PSvNPRF0zwff9T8AzjadYw1vO0SAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;I love my Sennheiser gaming headset, especially the &amp;#39;lift to mute&amp;#39; on the boom mic ... but it&amp;#39;s got a problem with plosives. Listening back to pre-records, I see the plosives are even worse than I thought.
Do I just need to bite the bullet and buy myself a Rode/Yeti on an arm?&quot;
        title=&quot;&quot;
        src=&quot;/static/23392e4ab8d3d452da9183e34d58d846/fa2f5/plosives-tweet.png&quot;
        srcset=&quot;/static/23392e4ab8d3d452da9183e34d58d846/772e8/plosives-tweet.png 200w,
/static/23392e4ab8d3d452da9183e34d58d846/e17e5/plosives-tweet.png 400w,
/static/23392e4ab8d3d452da9183e34d58d846/fa2f5/plosives-tweet.png 517w&quot;
        sizes=&quot;(max-width: 517px) 100vw, 517px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can hear the badness in my &lt;a href=&quot;https://www.infoq.com/presentations/tradeoff-climate-change/&quot;&gt;QCon Plus talk&lt;/a&gt;. I can’t
link to particular times, but have a listen around 4:40, for example.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.infoq.com/presentations/cloud-native-culture-2020/&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 55.99999999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB9UlEQVR42oVSTWsTURQd8vUDEshGXLnLKi6CP0FoJ4RgPsgXLShu3AuKurBghUwyYKYFsaVgG2htq6R1oyDYLgRBxJ+RSBO7SGbmzUvm+N41M0kp6oUzl3sv73DuuaPE43EEAgEkk0m0Wi3oug5N0/BsdRX1et2vJfSmjkazCa3RQFNkCcMwkEqloCgKwuEwlGAwSEWhUIAM13XBuYPxmON/MZlMKNdqNeIIhUJQ6COKXC5HQ8dxMBoO0e+fYSgyY4x6HmxmY2Ra1JeQUalUZoSewnw+P1U4gSUedLtdmKYplI5JiQdHqDdtBi76ciajWq1eVjhbWRBaNnq9nsjWBUJpB+MMQ9MWtvyFMBKJUFEsFmk45txX6K00TygVjqx/EF5W6ApCE4PBgDwcTdd2/bWFSodTzyO84KFhtLC+ZmCvvY2jzRc4fnuA0y9f8eHTZ/w6PxeHmD32ID10xCac//kTSqUSEdI9Tk5O8e37D3QO9vHx4RJerTxC+/A9tnb20O39JB/nryxhCkts2ybME5LC3f1DdN51cK+YxeZyGveXy1jbeI2t9huc9QekiE/VSBCh8JAxx/e4XC7PCNdfbmDlyWNcvxLHg1s3cePaVdy+cxdPn2vIZDJQVRXpdNqHqi5iYWGR+hLZbBaJRAKxWAzRaBS/AYXpi4g2FCH7AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;cncf infoq&quot;
        title=&quot;&quot;
        src=&quot;/static/d0a66028954967d815f17d0202e27a66/5a190/cncf-infoq.png&quot;
        srcset=&quot;/static/d0a66028954967d815f17d0202e27a66/772e8/cncf-infoq.png 200w,
/static/d0a66028954967d815f17d0202e27a66/e17e5/cncf-infoq.png 400w,
/static/d0a66028954967d815f17d0202e27a66/5a190/cncf-infoq.png 800w,
/static/d0a66028954967d815f17d0202e27a66/c1b63/cncf-infoq.png 1200w,
/static/d0a66028954967d815f17d0202e27a66/68947/cncf-infoq.png 1281w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;An IBM Fellow told me the headset look dorky, but I’m ignoring him. I think the big over-ear headphones and mouthpiece
have got a kind of helicopter-pilot-cool to them.
If you’re also into helicopter-chic, you’re not doing formal presentations or speaking while standing, and if you’re
willing to make a bit of an investment (at the time of writing, £158), I’d totally recommend this headset.&lt;/p&gt;
&lt;h2&gt;Fifine 669B&lt;/h2&gt;
&lt;p&gt;At the other end of the spectrum, this is a relatively economical desk-top microphone. It’s plug and play, looks quite
pretty, and will pick you up from some distance away, so there’s no awkward hunching over the mic. At around £48, it’s
good value for money. However, of the three mics I tried, it’s got the worst sound. There’s a coldness to the sound,
which might be caused by ambient echo from the room.&lt;/p&gt;
&lt;p&gt;You can hear this mic in my &lt;a href=&quot;https://youtu.be/ZMnTXFDBcQM?t=150&quot;&gt;Software Circus Hallowe’en talk&lt;/a&gt;. (Please excuse the
costume, it made total sense at the end of October.)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://youtu.be/ZMnTXFDBcQM?t=150&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 55.99999999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAAC60lEQVR42mWSa0iUaRTHX51p0jUcp7E2nWbU1MnL4twcHREprXHsIjZhMzk62bi5Kl2xzLBYWTGyHC9TaUP6QaiwID8UfcuCopJKNMOKVgj6UBT0Yb+v8NvnfYVlYR/4c87hPOfP/1ykL+9a+f7hGF8WW/i0cIan06PMPb/C3Ish3sxc5PWzCLPPL7HwapTZmShLb/v5ttTJ54XDfP0zzPLyX7yfn+H108cs//0D6dZYF9XlNbi3ePCUb2fHtip2llcR9B3lYH0XwbpTNAY6qa70UuWuorLCzfYtpTgK0jjR0oT8ek/30Bb4TfGlULMXXaKBzKwc0tIyFKRnbGLDhlQchcW43bvIzf0Fw0Yja9fqKSiwEh//E5Ik4bQ7eLF4h8HxI3RdDPJy6Q5Sc3sz+qSfsdkKsFot5OXlYc7OxmQyUlLiwuOpFL6JrKwsjEYjRUVOdDqdQugqK+P2fB9THy5w7+MAN2a7kQKtTaSsN5GTs1kpyMzMVIozMoTS9HShOE2JZVKZJCYmhliVSvHtrlImF6NEHnUz/LCbW+8iouVTbaQkG9mcYxYkm8gW6pxOp2gzF7PZTH5+PhaLRYllktjY2H8JLc5SLj8Z5uxEB713u4k860cKth8VSRXJ6/RotVpU4rMMtVqtQFYkF/8XMqlsbSVbOX8/wh9TFzg72UPf9DDSzv1tJGgSMIqWDIaNpKYaVmxKqhiBCb0+mYSENSQl6dAmahWbqE1SCPPtZQxM3+b8g+t03hzk96kRpJKyJlQiGRevQaNRiw1qWL1aTVzcKjSr1P9TtzLHFYUWaynnJiY4fu0y7eNRTo5FkXz1bVRU1FLsbMRV3EChowGrJYDdERRbD4gzqcNq34+jyI/NIWD3U+QKYCv0cyjUQVd4nFBvlOa+MQ4JSHu8LYQae8TxXqUpOIzPG8ZbO8KuujF2+KJ4aq/h8Y1Q8+soHv8glf5+doeGcNcNcORMmMCBDvYdG2Lv4TA1rZf4B7Ddo4H5b9KlAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;software circus video&quot;
        title=&quot;&quot;
        src=&quot;/static/54cbb75f6b656945a736a41f7ada6e56/5a190/software-circus-video.png&quot;
        srcset=&quot;/static/54cbb75f6b656945a736a41f7ada6e56/772e8/software-circus-video.png 200w,
/static/54cbb75f6b656945a736a41f7ada6e56/e17e5/software-circus-video.png 400w,
/static/54cbb75f6b656945a736a41f7ada6e56/5a190/software-circus-video.png 800w,
/static/54cbb75f6b656945a736a41f7ada6e56/c1b63/software-circus-video.png 1200w,
/static/54cbb75f6b656945a736a41f7ada6e56/9cea8/software-circus-video.png 1278w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Although I liked the price of the Fifine, I wasn’t happy with the sound. Judging from my twitter feed, absolutely
everyone had already bought themselves a fancy boom mic, so I decided to Invest.&lt;/p&gt;
&lt;h2&gt;Røde PodMic&lt;/h2&gt;
&lt;p&gt;My current set up is Røde Podmic. At £99, it would be the mid-priced option of these three, except that it needs a &lt;em&gt;lot&lt;/em&gt;
of supporting equipment. There’s no stand, so I got a Røde boom arm to allow me to move it around. The Podmic uses XLR
connections, so I had to buy XLR cables. I imagine sound engineers just have them lying around, but I certainly didn’t.
It needs a &lt;a href=&quot;https://focusrite.com/en/usb-audio-interface/scarlett/scarlett-solo&quot;&gt;preamp&lt;/a&gt; to convert the analog XLR
signal into a computer-friendly USB-signal. Because I wanted to make &lt;em&gt;sure&lt;/em&gt; there wouldn’t be any plosives, I bought a
Røde windshield. Oh, and I needed separate headphones to make sure I couldn’t causing echo for anyone else on a call.&lt;/p&gt;
&lt;p&gt;At this point, I thought I was done, but I wasn’t. It turns out I speak quietly. My sophisticated semi-pro sound setup
meant … I couldn’t be heard on calls. The only way to be loud enough was to put myself an inch away from the
microphone. I didn’t want to be right up against the microphone while I was talking, because that looks ridiculous on a
video call.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/3a214ab61d9905043e102de6c5d932f0/fe27b/not-good-look.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 59.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAADrklEQVR42h2QfVCTBRzHH6jusLu6U4qLSkw09VB5CRgbgifqGAoSmgx740UaMnlrY8CAjeEEDoFBICjEREwg2Ji8PEm8NwgvkCG1Cxjg2IGpladhcSX3PM99G/vjc/f5/vO53/2IXye6su6QN4b1urrOmfE+8tHyHKkf6icrrjaSxp+Gyaf3p8j5ST25bBwnF6fGyKV7Y6ROR5LFNS1kdUMLeb21k2xsJTvJnsGhhytLmcT0SJO256oE7apEavL7G1hZnEJ7cwP4ZyXo+LoCn4UcwoHdrvimOAe/3+vHo4nvUFRcCe7nOYhOkUOsKEe6sppq1vXh+eozDZGbEqcpSf8CHXXK9d6mAmawIYnpbr3GRMakMeEBvgz/qD8z3XeTkUaFMD9qapnH491MbWUVEx4nZWJSspl0eQkjyitf/7b9Ntb+ftZK5Ag/0baVy2AaqKUsP6sx1x2DgY5GBB3jw2nTJvReKQCez6ApIx4/tFThieE21NVV+EiQg4R0OaTKUqTnV1BdPQP4d21VQ6ikAm19cRqyhZFUtzofnWoZBm/VY78HC1tedcBkRS6MVQq0ZCeirSIPf97tQmFhKc4IZUjKVCDnYhnEeWVU76Ae6/880RDyhAitShaLDO/tlKHuAhTR/rhVo4CH2x5scXgFfI47vLa9ix2OjijLEOCPCR0uKovAF2ThfIYc2cpLSJOVUMP6ETBrDzWEJD5KW18qxuUINjVcKcIVSQh0KjFcnTeDIAjsdXkD7q6uNo8M5uCu9ivIZRcQEZ2Kc2IpMhWFSJIWUWOjI8DqfQ1xghehDQ08gNMBHpTfvh0QnjyMqEPeeP8dJ/js3gm3rc4QnP4QbttcbFH3nS5ITvoSYR+fQ3yqBOJchfWX+dTEmB54bNQQp44Ha3mBHHA9d1EHP9iD8OMn4Oe+H2xPT/js24tYbiBUSXGI5h2xBV+ys4MXOwhhZ+IRk5iM1KxcJIhl1PQdPdYWDRrC662X21jb7eG7a/ML1lZn2sfJgba3t6Pt7exoa4AO5XjTN/MktOPrr9n2Bm++/R7NCgqjT30aS589n0JHC8Uvfhntx38WYytRkBylbS5NgLpIQFXnJqMk4ST82GwbwUcOg8c9ioDAg/BlseDP4cDXejkvmAuRRIz8wksorayB6nIt9dfKApinv2mI+fn5ULPlgXRp+UGaxWIRzZotIrPZbGNjmxYWRAtWNtxsMolMo0Mis3WbF6xumhWZZmdFczMzaUajUWowGEL/B1fEPBfSnq6BAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Good sound, ridiculous visuals&quot;
        title=&quot;&quot;
        src=&quot;/static/3a214ab61d9905043e102de6c5d932f0/5a190/not-good-look.png&quot;
        srcset=&quot;/static/3a214ab61d9905043e102de6c5d932f0/772e8/not-good-look.png 200w,
/static/3a214ab61d9905043e102de6c5d932f0/e17e5/not-good-look.png 400w,
/static/3a214ab61d9905043e102de6c5d932f0/5a190/not-good-look.png 800w,
/static/3a214ab61d9905043e102de6c5d932f0/c1b63/not-good-look.png 1200w,
/static/3a214ab61d9905043e102de6c5d932f0/29007/not-good-look.png 1600w,
/static/3a214ab61d9905043e102de6c5d932f0/fe27b/not-good-look.png 2532w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Another £40 or so later, I had a &lt;a href=&quot;https://www.klarkteknik.com/product.html?modelCode=P0DPA&quot;&gt;booster amp&lt;/a&gt; and a second
XLR cable, and I could be heard. I can even be heard with the mic fully off camera, although the sound is better if it’s
a bit closer. So was it worth it? Well, you can decide, but I think there’s a clear difference between the sound in
my &lt;a href=&quot;https://youtu.be/ltsoNNTkd_g?t=1444&quot;&gt;WTFinar&lt;/a&gt; and Software Circus a month earlier.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://youtu.be/ltsoNNTkd_g?t=1444&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 56.49999999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAABl0lEQVR42oWSS0+DUBCFL/T9hBbou6WlWBowdmPSuNGFib/A/+DG/78d7zcUEo3GxeQO3Dlnzpm5ptlsijHmz3AcR4M8DENZLpd69vt9GY1GslgsJAoDeXh5k/ePTzGtVks6nY4GIBp0u139dl33G/Fut1MC3/fF8zwZDAZKvl6vxbffWjsej2U2m+kFRJPJRKIokvl8LpvNRsHUtNttBaZpqqSr1UqyLFMsxMbcnKAEMEEHLqfTqSoMgqDsbklpRg2qUbff7+V6vcpwOKydqUI6b7fb+gJb3k0+xNyRMztIyBnT8XiUw+GgzWiCm0ajIQbmJEnUKsWn00nB5FirSPiHRXJsQkQto4KwKIqSEDWwV0qYUQXkf57nNQl3VU0cxzoCTlxeLhdVbuiETQAUU1SRMz9If9rnxC44Zlu51FeBTIBstgKGdhnkbJdtkgMst1nW9Hq9evsoI9ctQ0ghF7olft4eMp2rR/1fuI4rcXIn5t7O4/F8lsxaS+3gY6tuz2O1ilHNKH4LloHNs8Uy5zwv5On5Vb4AuIAFDjCN8uUAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;wtfinar&quot;
        title=&quot;&quot;
        src=&quot;/static/36662bd3dac2f50a22dd206de12db83c/5a190/wtfinar.png&quot;
        srcset=&quot;/static/36662bd3dac2f50a22dd206de12db83c/772e8/wtfinar.png 200w,
/static/36662bd3dac2f50a22dd206de12db83c/e17e5/wtfinar.png 400w,
/static/36662bd3dac2f50a22dd206de12db83c/5a190/wtfinar.png 800w,
/static/36662bd3dac2f50a22dd206de12db83c/c1b63/wtfinar.png 1200w,
/static/36662bd3dac2f50a22dd206de12db83c/9cea8/wtfinar.png 1278w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In hindsight, the Røde Podcaster would probably have been more plug and play, with comparable sound. I’m not going to
buy one to find out, though!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/sebi2706/status/1359896702954729476&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 520px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 69%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAAsTAAALEwEAmpwYAAADm0lEQVR42nWTf0zUZRzHb2PTtP6prZab1eaW1qbLgOlcblJ/JMmPIrshQzwR6ARB7hAifjNyAjIQ0B0kYtxBIFAqK+WHwm0VNAMpOIn7wfHrkIM7fsgVkffr1fegjfijz/bZ8+zZ83k97+f5PG/RxNgond/dZGF+HtPUY6bNM8yYp9GNWtGOjWH7Y4kntmWWbH8K82XsdgcOh3NDOp0unj61Y3c4EDXV13EqTMyQRsPveiM6gxGtXs8j3SQag57RSRPjU9PMWOdwuly4+f9wu92IVlZWMAuKLLYV+gwzDBhnGRTUacYsQlr5dWSWPv00D7RmJswLzMzOY571jAvMWhaxWG2C+mXm5pdWDxR55Hri7g+/ERJfhDg2n2BJNoHhGQSEpXE4JAVxcAoxIQkc+SCRoKMpfChOIfiTc3wk/gz/QCnBJ+X4HAyi++deRA6ncxV4q7WbCFkJcekKTsXnEx6TTbg0l6CAs9zKKGGxtpH8kxlEnPic+DOZHA6IFKBJHNjvzys7fXn5tb10df20rrC1sxdJXCHS5CvEJBQgTy0h6bySY6EyyqJlqAvKKJUmkyQvRCY7T4CgOCfrCsqrTRQXKUiQ5aEZMghA1xqw46GR+PxGzkR8yunYTOS518krrkImTeVS5FnupOVRm5KBLDEXWUoRdTfaWZh7slr7SKsjM6uQkZEJz5XXgA1dowSfvsy+F73w8wsgveRbpGkXiAoPI+pdfyokEhQZaVwqrRC6blmtGTaaaFP3oaq7Q1Ntq9Dc+XVgc9cUuw4l8vwWL3bseIPYL5qQ5ZRTmvMe+/fs5Ij3OxSnRlOpyEapvEpy7ldUKFpQVt+lQdmB6no7k5OWdaCyzcg2nyi8Nm1FtHkbsfGRDKhj6W8LpL7Ul4vy3ehuHsVhCsU1fpyay+lkZdZQcEFFbvY1stIqMRgm14GqtmG2H4hjy6bNbH32JaqL9mIZ+Bhzfzh28zFW9KEM1V9k4b6Mvx++xWN1ENLoVCQnkpELDQk7nkDPgwEB6Fj7NpVft/PCHjHPPbOLgz6+3Gv2ZkgdyES3PzZtIIMt79NfpcLUWIylfTv2nlfJOydm99sS9nkf4vU3/bivfoDI9W+Xh3UjKL6sRlF1g3sdtzGNNKEdvM34cAvWCeF9hr9B8+P3jP7Sy1+mZtyWGmFPD6qGTsrLy6i81ojVuigABf95/Lma/zGqZ93u2Ohcp2dNMILLvb7H5XZt8PI/8w1QmaZVaJkAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;sebi blanc&quot;
        title=&quot;&quot;
        src=&quot;/static/5bb4226f86acd218cd257c45df6fcb7f/69902/sebi-blanc.png&quot;
        srcset=&quot;/static/5bb4226f86acd218cd257c45df6fcb7f/772e8/sebi-blanc.png 200w,
/static/5bb4226f86acd218cd257c45df6fcb7f/e17e5/sebi-blanc.png 400w,
/static/5bb4226f86acd218cd257c45df6fcb7f/69902/sebi-blanc.png 520w&quot;
        sizes=&quot;(max-width: 520px) 100vw, 520px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;But what about you?&lt;/h2&gt;
&lt;p&gt;Clearly, not everyone needs an ostentatious boom-arm mic with weird specialty cables. Arguably, even &lt;em&gt;I&lt;/em&gt; don’t need one.
Nonetheless, if you’re doing video calls with other
people, &lt;a href=&quot;https://enterprisersproject.com/article/2021/1/remote-working-10-lessons-leaders-2021&quot;&gt;good equipment&lt;/a&gt;, and
&lt;em&gt;especially&lt;/em&gt; a good microphone is important. Like headphones, having a good mic just makes life nicer for others on the
call.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/benedictevans/status/1359529351503622153&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 517px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 23%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAAAsTAAALEwEAmpwYAAABCklEQVR42m1QSW6EMBDkdTnnJ3lBLrnnSXPJAyImigKD2cYsA2YTTIABGyptH0aJFEslV5fa5a623t8OiH0HoqqRZhlKIXApBVgn0V0nXMcJw/eEcb5hXlYMVEul8N/RuvX0+IDXl2ek+QW2fcTp5OHzy8FHmIEFESFEFJ8N50mKIIwQkFYUJbI8x5lzZDRI3/eQUsI62jbCKDai47hgfgCf+Ti5LnzNCZ7ngZHmMmZMOE/okxhJmhrOk8TcdV3D0qNu22YiC1HhUhTo2hYFxS6rCm3bUWODhjQRcMhh/BNT0dt93++1pc0UCTfaj8a9UW2YaG/rr32pvIEsW2yrhLbQRvOyUK8yXOMHqsh2nL6uchoAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;It’s easy to see your camera is terrible, and harder to tell that your microphone is terrible. But buying a proper microphone actually makes a much bigger difference to everyone else.&quot;
        title=&quot;&quot;
        src=&quot;/static/868a55dce37e03ce8f1e80530fbe47b7/fa2f5/mic-altruism.png&quot;
        srcset=&quot;/static/868a55dce37e03ce8f1e80530fbe47b7/772e8/mic-altruism.png 200w,
/static/868a55dce37e03ce8f1e80530fbe47b7/e17e5/mic-altruism.png 400w,
/static/868a55dce37e03ce8f1e80530fbe47b7/fa2f5/mic-altruism.png 517w&quot;
        sizes=&quot;(max-width: 517px) 100vw, 517px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A good mic doesn’t need to be expensive, or even a special purchase. Most things will be better than the built-in mic on
your laptop. If you have to take notes, the built-in mic will make the typing noises will be a &lt;em&gt;huge booming
nuisance&lt;/em&gt;. “Could whoever is doing the angry typing please stop?” was the most common phrase on my 2019 calls (in 2020,
in desperation, we finally worked out the ‘mute all’ button, leading to “you’re on mute” taking the number one spot).&lt;/p&gt;
&lt;p&gt;Airpods seem to have good sound pick-up, if you can tolerate in-ear buds for long periods. Be aware, though, some other
bluetooth headsets are pretty awful. It took me a while to work out why no one could understand me on one of mine.&lt;/p&gt;
&lt;h2&gt;Test, test, test&lt;/h2&gt;
&lt;p&gt;Most of us wouldn’t dream of writing code without testing it, but we’ll cheerfully broadcast ourselves without testing
first. It’s easy to do some quick experiments to see what works best. If you’re using a Mac, use Quicktime to record
yourself, either audio-only or full video. Experiment with a few different positions, see what happens if you get
excited or hushed, and try typing. Then watch it back. (I know, it feels awful, but it’s the right thing to do.)&lt;/p&gt;
&lt;p&gt;Once you’re happy, double-check by doing a recording on zoom or webex or whatever you use most often, and then (sorry!)
watch that back too. Your colleagues will thank you.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Programming in the pandemic: personal insights & professional process - CW Developer Network]]></title><description><![CDATA[The Computer Weekly Developer Network examines the impact of Covid-19 on the software application development community. With only a…]]></description><link>http://hollycummins.com/Programming-in-the-pandemic-IBM-developer-lead-personal-insights-professional-process/</link><guid isPermaLink="false">http://hollycummins.com/Programming-in-the-pandemic-IBM-developer-lead-personal-insights-professional-process/</guid><pubDate>Wed, 03 Feb 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The Computer Weekly Developer Network examines the impact of Covid-19 on the software application development community. With only a proportion of developers classified as key workers (where their …&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Remote working: 10 lessons leaders should apply in 2021]]></title><description><![CDATA[In 2019, the Enterprisers Project made a number of end-of-year predictions: One of them was that remote work would increase in 2020. It did…]]></description><link>http://hollycummins.com/remote-lessons/</link><guid isPermaLink="false">http://hollycummins.com/remote-lessons/</guid><pubDate>Mon, 11 Jan 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In 2019, the Enterprisers Project made a number of end-of-year predictions: One of them was that remote work would increase in 2020. It did, though none of us wanted or imagined a pandemic prompting the near-overnight remote shift. I haven’t been in the office since March, even though I love my office.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[No, Really, Cloud Native Is About Culture, Not Containers]]></title><description><![CDATA[For most of 2019 and 2020, I felt uneasy and slightly guilty about the Cloud Native Computing Foundation’s definition of ‘Cloud Native’. The…]]></description><link>http://hollycummins.com/cloud-native-is-about-culture-not-containers/</link><guid isPermaLink="false">http://hollycummins.com/cloud-native-is-about-culture-not-containers/</guid><pubDate>Sun, 10 Jan 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;For most of 2019 and 2020, I felt uneasy and slightly guilty about the Cloud Native Computing Foundation’s definition of ‘Cloud Native’. The CNCF definition had a strong implication that you weren’t Cloud Native if you weren’t using microservices.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Want to Save the World? Start by Cutting Your Cloud Costs]]></title><description><![CDATA[How the IT sector can minimize the damage it does to the earth’s climate.]]></description><link>http://hollycummins.com/want-to-save-the-world-start-by-cutting-your-cloud-costs/</link><guid isPermaLink="false">http://hollycummins.com/want-to-save-the-world-start-by-cutting-your-cloud-costs/</guid><pubDate>Wed, 06 Jan 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;How the IT sector can minimize the damage it does to the earth’s climate.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[97 Things Every Cloud Engineer Should Know]]></title><description><![CDATA[If you create, manage, operate, or configure systems running in the cloud, you’re a cloud engineer—even if you work as a system…]]></description><link>http://hollycummins.com/97-things-cloud/</link><guid isPermaLink="false">http://hollycummins.com/97-things-cloud/</guid><pubDate>Thu, 31 Dec 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;If you create, manage, operate, or configure systems running in the cloud, you’re a cloud engineer—even if you work as a system administrator, software developer, data scientist, or site reliability … - Selection from 97 Things Every Cloud Engineer Should Know [Book]&lt;/p&gt;</content:encoded></item><item><title><![CDATA[WTF is Cloud Native Culture (Container Solutions WTFinar)]]></title><description><![CDATA[It’s really easy to spin up a project in the cloud these days. So easy, millions of abandoned apps are actually contributing to global…]]></description><link>http://hollycummins.com/wtfinar/</link><guid isPermaLink="false">http://hollycummins.com/wtfinar/</guid><pubDate>Tue, 15 Dec 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;It’s really easy to spin up a project in the cloud these days. So easy, millions of abandoned apps are actually contributing to global warming.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The Cloud Should Be Fun - and If It’s Not You’re Probably Doing It Wrong]]></title><description><![CDATA[Is the cloud a fun place? Does the question even make sense? Is fun at work possible? As a consultant with the IBM Garage, Holly has seen…]]></description><link>http://hollycummins.com/the-cloud-should-be-fun-and-if-its-not-youre-probably-doing-it-wrong-keynote-codemotion-italia/</link><guid isPermaLink="false">http://hollycummins.com/the-cloud-should-be-fun-and-if-its-not-youre-probably-doing-it-wrong-keynote-codemotion-italia/</guid><pubDate>Tue, 24 Nov 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Is the cloud a fun place? Does the question even make sense? Is fun at work possible? As a consultant with the IBM Garage, Holly has seen fun in the cloud and … un-fun in the cloud. In this talk, she’ll share how to use fun as a guide to getting the most out of the cloud&lt;/p&gt;</content:encoded></item><item><title><![CDATA[How to Love Kubernetes and Not Wreck The Planet Part I: Elasticity and Utilization]]></title><description><![CDATA[I gave a keynote at KubeCon Europe. Our community should be thinking about climate change and how kubernetes impacts the climate when it is…]]></description><link>http://hollycummins.com/how-to-love-kubernetes-and-not-wreck-the-planet-part-i-elasticity-and-utilization-19fcae120628/</link><guid isPermaLink="false">http://hollycummins.com/how-to-love-kubernetes-and-not-wreck-the-planet-part-i-elasticity-and-utilization-19fcae120628/</guid><pubDate>Fri, 06 Nov 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I gave a keynote at KubeCon Europe. Our community should be thinking about climate change and how kubernetes impacts the climate when it is used inefficiently.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[How to Love Kubernetes and Not Wreck The Planet Part II: Revenge of the Zombies]]></title><description><![CDATA[What are the climate impacts of our technology habits? Part I of this blog discusses the importance of multi-tenancy, utilisation, and…]]></description><link>http://hollycummins.com/how-to-love-kubernetes-and-not-wreck-the-planet-part-ii-revenge-of-the-zombies-9ae8e925c094/</link><guid isPermaLink="false">http://hollycummins.com/how-to-love-kubernetes-and-not-wreck-the-planet-part-ii-revenge-of-the-zombies-9ae8e925c094/</guid><pubDate>Fri, 06 Nov 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;What are the climate impacts of our technology habits? Part I of this blog discusses the importance of multi-tenancy, utilisation, and elasticity. So what happens if we establish good multi-tenancy…&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Stack Overflow Podcast 283: Cleaning up the cloud to help fight climate change]]></title><description><![CDATA[It’s really easy to spin up a project in the cloud these days. So easy, millions of abandoned apps are actually contributing to global…]]></description><link>http://hollycummins.com/podcast-283-cleaning-up-the-cloud-to-help-fight-climate-change/</link><guid isPermaLink="false">http://hollycummins.com/podcast-283-cleaning-up-the-cloud-to-help-fight-climate-change/</guid><pubDate>Tue, 03 Nov 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;It’s really easy to spin up a project in the cloud these days. So easy, millions of abandoned apps are actually contributing to global warming.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Cloud Chaos and Microservices Mayhem]]></title><description><![CDATA[The way we use Java has changed. Applets - or any browser-side Java - are a long, long, time ago. Java moved to the back end, and stayed…]]></description><link>http://hollycummins.com/cloud-chaos-and-microservices-mayhem-jfuture/</link><guid isPermaLink="false">http://hollycummins.com/cloud-chaos-and-microservices-mayhem-jfuture/</guid><pubDate>Fri, 23 Oct 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The way we use Java has changed. Applets - or any browser-side Java - are a long, long, time ago. Java moved to the back end, and stayed there, but the back-end has gotten bigger, more distributed, and more complicated. Some things that were a good idea ten years ago turn out to be a terrible idea in the cloud; and what used to be ‘good enough’ for testing really isn’t anymore. Managing microservices architecture demands a lot of us, to ensure observability, operational resiliency, and organisational agility. This talk will introduce some of the new tools, patterns, and best practices for Java development in 2020. It also gives a tour of some of the most painful anti-patterns Holly has seen as a consultant with the IBM Garage.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[How - and why - to modernize your scruffy old Java applications]]></title><description><![CDATA[Once upon a time, that application was great - it was built using the latest technology, it was easy to understand, users loved it. Now, not…]]></description><link>http://hollycummins.com/how-and-why-to-modernize-your-scruffy-old-java-applications-ibm-tech-tv/</link><guid isPermaLink="false">http://hollycummins.com/how-and-why-to-modernize-your-scruffy-old-java-applications-ibm-tech-tv/</guid><pubDate>Thu, 15 Oct 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Once upon a time, that application was great - it was built using the latest technology, it was easy to understand, users loved it. Now, not so much. It’s grown and looking a bit … unwieldy monolithic. We’ll discuss when to modernise, when to leave well enough alone, and what you need to know before you microservice. Automation and testing are important parts of a modern app, so we will demo how the Pact contract testing framework can save effort, improve flow, &amp;#x26; protect against regressions.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[KubeCon + CloudNativeCon Europe 2020 Keynote Summary ]]></title><description><![CDATA[The annual KubeCon + CloudNativeCon Europe event ran as a virtual conference in August. Key takeaways included: there is an increasing…]]></description><link>http://hollycummins.com/kubecon-cloudnativecon-summary/</link><guid isPermaLink="false">http://hollycummins.com/kubecon-cloudnativecon-summary/</guid><pubDate>Sun, 30 Aug 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The annual KubeCon + CloudNativeCon Europe event ran as a virtual conference in August. Key takeaways included: there is an increasing importance in understanding end-user adoption patterns of technol&lt;/p&gt;</content:encoded></item><item><title><![CDATA[People, Planet, Clouds]]></title><description><![CDATA[The world is changing. The cloud gives us dazzling computational possibilities, and … potentially uses a lot of energy. As climate change…]]></description><link>http://hollycummins.com/people-planet-clouds-b5f181cd58a9/</link><guid isPermaLink="false">http://hollycummins.com/people-planet-clouds-b5f181cd58a9/</guid><pubDate>Thu, 09 Jul 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The world is changing. The cloud gives us dazzling computational possibilities, and … potentially uses a lot of energy. As climate change accelerates, where do we, as engineers, fit in? Are we part…&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Using Lease Resources to Manage Concurrency in Tekton Builds]]></title><description><![CDATA[I’ve recently started using Tekton as my main build system. In combination with Argo CD for GitOps management of the pipeline scripts, it…]]></description><link>http://hollycummins.com/using-lease-resources-to-manage-concurrency-in-tekton-builds-344ba84df297/</link><guid isPermaLink="false">http://hollycummins.com/using-lease-resources-to-manage-concurrency-in-tekton-builds-344ba84df297/</guid><pubDate>Thu, 09 Jul 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I’ve recently started using Tekton as my main build system. In combination with Argo CD for GitOps management of the pipeline scripts, it has some pretty nice features. One of the things I’m…&lt;/p&gt;</content:encoded></item><item><title><![CDATA[How to Become an IBM Garage Developer]]></title><description><![CDATA[The IBM Garage is a highly dynamic, multi-disciplinary consulting practice working with clients and partners of any size across all…]]></description><link>http://hollycummins.com/how-to-become-an-ibm-garage-developer-d2427f57f804/</link><guid isPermaLink="false">http://hollycummins.com/how-to-become-an-ibm-garage-developer-d2427f57f804/</guid><pubDate>Fri, 26 Jun 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The IBM Garage is a highly dynamic, multi-disciplinary consulting practice working with clients and partners of any size across all industries. We combine design thinking, lean startup, devops…&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The Climate Service + IBM Garage: Weathering Disruption to Deliver Results]]></title><link>http://hollycummins.com/the-climate-service-reference/</link><guid isPermaLink="false">http://hollycummins.com/the-climate-service-reference/</guid><pubDate>Mon, 04 May 2020 00:00:00 GMT</pubDate><content:encoded></content:encoded></item><item><title><![CDATA[97 Things Every Java Programmer Should Know]]></title><description><![CDATA[If you want to push your Java skills to the next level, this book provides expert advice from Java leaders and practitioners. You’ll be…]]></description><link>http://hollycummins.com/97-things-java/</link><guid isPermaLink="false">http://hollycummins.com/97-things-java/</guid><pubDate>Fri, 01 May 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;If you want to push your Java skills to the next level, this book provides expert advice from Java leaders and practitioners. You’ll be encouraged to look at problems in&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Cloud Native is about Culture, not Containers]]></title><description><![CDATA[As a developer in IBM’s Cloud Garage, Holly Cummins works with customers who are trying to shift their businesses to the cloud, and to cloud…]]></description><link>http://hollycummins.com/cloud-native-is-about-culture-not-containers-qcon-london/</link><guid isPermaLink="false">http://hollycummins.com/cloud-native-is-about-culture-not-containers-qcon-london/</guid><pubDate>Mon, 02 Mar 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;As a developer in IBM’s Cloud Garage, Holly Cummins works with customers who are trying to shift their businesses to the cloud, and to cloud native in particular. Their dream is more effort higher up the value chain, more innovation, and greater adaptability. What they really want is to beat their competitors to market, with something that’s better than their competitors, and then evolve it to beat any new competitors. What’s getting in their way isn’t the technology—wrapping something in a docker container (usually) isn’t that hard. Instead, it’s the structures that have been put in place to manage risk and the relationships between teams that trip companies up.
Holly shares stories of customers struggling to get cloud native and explains how IBM applied its methodology to turn things around. You’ll learn the ideal team size, the ideal microservice size, what skills a team needs, the role of architects, how to know if something is ready to ship, and whose fault everything is (joke).&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Nine Ways to Fail At Cloud Native]]></title><description><![CDATA[Cloud native is the perfect recipe for innovation, adaptability and engineering excellence – when it goes right. When it’s not right, it can…]]></description><link>http://hollycummins.com/nine-ways-to-fail-at-cloud-native/</link><guid isPermaLink="false">http://hollycummins.com/nine-ways-to-fail-at-cloud-native/</guid><pubDate>Wed, 26 Feb 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Cloud native is the perfect recipe for innovation, adaptability and engineering excellence – when it goes right. When it’s not right, it can be a monster spaghetti, a quality headache, and frustratingly inflexible. Why so negative? The physicist Niels Bohr said “An expert is a person who has found out by their own painful experience all the mistakes that one can make in a very narrow field.” In the IBM Garage, I co-create cloud native applications with clients. We end up in a good place, but sometimes there are a few bumps on the way. 1 – The Magic Morphing Meaning What even is cloud native? Built for the cloud? Running on Kubernetes? Microservices? Modern? Idempotent? If you ask five people to define cloud native, you might get seven diffe&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Garbage Collection Is Your Friend]]></title><description><![CDATA[Poor old garbage collection. One of the unsung heroes of Java, often blamed, rarely praised. Before Java made garbage collection mainstream…]]></description><link>http://hollycummins.com/garbage-collection-is-your-friend-f66ea8387543/</link><guid isPermaLink="false">http://hollycummins.com/garbage-collection-is-your-friend-f66ea8387543/</guid><pubDate>Mon, 03 Feb 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Poor old garbage collection. One of the unsung heroes of Java, often blamed, rarely praised. Before Java made garbage collection mainstream, programmers had little choice but to track all the memory…&lt;/p&gt;</content:encoded></item><item><title><![CDATA[仕事場における楽しさの重要性 ]]></title><description><![CDATA[仕事において笑顔になることや、笑ってしまうことはチームの団結、生産性、組織のパフォーマンスを証明してくれる。楽しさは強制できるものではないが、促進できるものであると Holly Cummins 氏は FlowCon France 201…]]></description><link>http://hollycummins.com/fun-workplace-japanese/</link><guid isPermaLink="false">http://hollycummins.com/fun-workplace-japanese/</guid><pubDate>Mon, 03 Feb 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;仕事において笑顔になることや、笑ってしまうことはチームの団結、生産性、組織のパフォーマンスを証明してくれる。楽しさは強制できるものではないが、促進できるものであると Holly Cummins 氏は FlowCon France 2019 で語った。仕事場における楽しさの重要性の講演である。&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The Importance of Fun in the Workplace (Interview)]]></title><description><![CDATA[Things at work that make us smile or laugh can improve team cohesion, productivity and organisational performance. Fun can’t be forced, but…]]></description><link>http://hollycummins.com/fun-workplace/</link><guid isPermaLink="false">http://hollycummins.com/fun-workplace/</guid><pubDate>Thu, 19 Dec 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Things at work that make us smile or laugh can improve team cohesion, productivity and organisational performance. Fun can’t be forced, but it can be fostered, said Holly Cummins at FlowCon France 201&lt;/p&gt;</content:encoded></item><item><title><![CDATA[People, Planet, Clouds]]></title><description><![CDATA[The world is changing. The cloud gives us dazzling computational possibilities, and … potentially uses a lot of energy. As climate change…]]></description><link>http://hollycummins.com/people-planet-clouds-ljc-unconference/</link><guid isPermaLink="false">http://hollycummins.com/people-planet-clouds-ljc-unconference/</guid><pubDate>Sat, 23 Nov 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The world is changing. The cloud gives us dazzling computational possibilities, and … potentially uses a lot of energy. As climate change accelerates, where do we, as engineers, fit in? Are we part of the problem or part of the solution? How do we balance the needs of people against the need of the planet? Or can they be aligned?&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The Importance of Fun in the Workplace]]></title><description><![CDATA[An in-depth look at what makes software development a roller coaster where the highs of 0 compiler warnings are quickly cancelled out by the…]]></description><link>http://hollycummins.com/the-importance-of-fun-in-the-workplace-keynote-continuous-lifecycle-mannheim/</link><guid isPermaLink="false">http://hollycummins.com/the-importance-of-fun-in-the-workplace-keynote-continuous-lifecycle-mannheim/</guid><pubDate>Wed, 13 Nov 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;An in-depth look at what makes software development a roller coaster where the highs of 0 compiler warnings are quickly cancelled out by the pain of long hours, bad requirements, endless configuration, clueless managers and a plethora of other issues which make death by a thousand cuts seem like a good idea…. They will answer questions such as: “Why is programming often called an art despite having its underpinnings in formal logic?” “How can I rediscover the delight I felt when I first started coding?” “What’s that rush I feel when my test passes? Am I addicted to TDD?” Combining Psychology, Philosophy and Computer Science, Dr Holly Cummins and Martijn Verburg will present a series of practical tips to help you rediscover the euphoria that you felt the very first time a metal box in front of you came to life and cried out “Hello World”.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Java Should Feel Fun]]></title><description><![CDATA[I started my Java career using J2EE 1.2. I had questions: Why were there four classes and hundreds of lines of generated code for each bean…]]></description><link>http://hollycummins.com/java-should-feel-fun-4a81ac931ffb/</link><guid isPermaLink="false">http://hollycummins.com/java-should-feel-fun-4a81ac931ffb/</guid><pubDate>Wed, 21 Aug 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I started my Java career using J2EE 1.2. I had questions: Why were there four classes and hundreds of lines of generated code for each bean? Why did compiling tiny projects take half an hour? It…&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The Future of Work is (More) Fun - Part 1 - IBM UK Blog]]></title><description><![CDATA[The evidence that fun boosts productivity is compelling. A happy work environment means fewer sick days, harder work, and greater…]]></description><link>http://hollycummins.com/the-future-of-work-is-more-fun-part-1/</link><guid isPermaLink="false">http://hollycummins.com/the-future-of-work-is-more-fun-part-1/</guid><pubDate>Thu, 20 Jun 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The evidence that fun boosts productivity is compelling. A happy work environment means fewer sick days, harder work, and greater productivity.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The Future of Work is (More) Fun - Part 2 - IBM UK Blog]]></title><description><![CDATA[Automation eliminates toil When the printing press was invented, it almost immediately eliminated the arduous practice of copying books by…]]></description><link>http://hollycummins.com/the-future-of-work-is-more-fun-part-2/</link><guid isPermaLink="false">http://hollycummins.com/the-future-of-work-is-more-fun-part-2/</guid><pubDate>Thu, 20 Jun 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Automation eliminates toil When the printing press was invented, it almost immediately eliminated the arduous practice of copying books by hand. (Before the printing press, writing out the pages for a single bible would take around three months.) This life-changing mechanization accelerated with the industrial revolution, and many labour-intensive tasks were automated. This included factory activities, such as spinning and weaving, but also domestic activities such as laundry. (Washing a household’s clothes by hand is hard, heavy, soggy, work, and not fun.) As we progressed from the industrial revolution to the computer one, some mental tasks were also automated; I learned when I watched Hidden Figures that in 1950 ‘a computer’ was a person&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The importance of fun in the workplace]]></title><description><![CDATA[A shorter version of https://www.slideshare.net/HollyCummins/software-developers-guide-to-fun-in-the-workplace-euphoria-despite-the-despair…]]></description><link>http://hollycummins.com/the-importance-of-fun-in-the-workplace-keynote-cio-watercooler/</link><guid isPermaLink="false">http://hollycummins.com/the-importance-of-fun-in-the-workplace-keynote-cio-watercooler/</guid><pubDate>Tue, 11 Jun 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A shorter version of &lt;a href=&quot;https://www.slideshare.net/HollyCummins/software-developers-guide-to-fun-in-the-workplace-euphoria-despite-the-despair&quot;&gt;https://www.slideshare.net/HollyCummins/software-developers-guide-to-fun-in-the-workplace-euphoria-despite-the-despair&lt;/a&gt;
An in-depth look at what makes software development a roller coaster where the highs of 0 compiler warnings are quickly cancelled out by the pain of long hours, bad requirements, endless configuration, clueless managers and a plethora of other issues which make death by a thousand cuts seem like a good idea…. They will answer questions such as: “Why is programming often called an art despite having its underpinnings in formal logic?” “How can I rediscover the delight I felt when I first started coding?” “What’s that rush I feel when my test passes? Am I addicted to TDD?” Combining Psychology, Philosophy and Computer Science, Dr Holly Cummins will present a series of practical tips to help you rediscover the euphoria that you felt the very first time a metal box in front of you came to life and cried out “Hello World”.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The Importance of Fun in the Workplace]]></title><description><![CDATA[An in-depth look at what makes software development a roller coaster where the highs of 0 compiler warnings are quickly cancelled out by the…]]></description><link>http://hollycummins.com/the-importance-of-fun-in-the-workplace-keynote-continuous-lifecycle-london/</link><guid isPermaLink="false">http://hollycummins.com/the-importance-of-fun-in-the-workplace-keynote-continuous-lifecycle-london/</guid><pubDate>Tue, 14 May 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;An in-depth look at what makes software development a roller coaster where the highs of 0 compiler warnings are quickly cancelled out by the pain of long hours, bad requirements, endless configuration, clueless managers and a plethora of other issues which make death by a thousand cuts seem like a good idea…. They will answer questions such as: “Why is programming often called an art despite having its underpinnings in formal logic?” “How can I rediscover the delight I felt when I first started coding?” “What’s that rush I feel when my test passes? Am I addicted to TDD?” Combining Psychology, Philosophy and Computer Science, Dr Holly Cummins and Martijn Verburg will present a series of practical tips to help you rediscover the euphoria that you felt the very first time a metal box in front of you came to life and cried out “Hello World”.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The Importance of Fun in the Workplace]]></title><description><![CDATA[An in-depth look at what makes software development a roller coaster where the highs of 0 compiler warnings are quickly cancelled out by the…]]></description><link>http://hollycummins.com/the-importance-of-fun-in-the-workplace-voxxed-days-cern/</link><guid isPermaLink="false">http://hollycummins.com/the-importance-of-fun-in-the-workplace-voxxed-days-cern/</guid><pubDate>Wed, 01 May 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;An in-depth look at what makes software development a roller coaster where the highs of 0 compiler warnings are quickly cancelled out by the pain of long hours, bad requirements, endless configuration, clueless managers and a plethora of other issues which make death by a thousand cuts seem like a good idea…. They will answer questions such as: “Why is programming often called an art despite having its underpinnings in formal logic?” “How can I rediscover the delight I felt when I first started coding?” “What’s that rush I feel when my test passes? Am I addicted to TDD?” Combining Psychology, Philosophy and Computer Science, Dr Holly Cummins and Martijn Verburg will present a series of practical tips to help you rediscover the euphoria that you felt the very first time a metal box in front of you came to life and cried out “Hello World”.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The Importance of Fun in the Workplace]]></title><description><![CDATA[An in-depth look at what makes software development a roller coaster where the highs of 0 compiler warnings are quickly cancelled out by the…]]></description><link>http://hollycummins.com/the-importance-of-fun-in-the-workplace-voxxed-days-milano/</link><guid isPermaLink="false">http://hollycummins.com/the-importance-of-fun-in-the-workplace-voxxed-days-milano/</guid><pubDate>Sat, 13 Apr 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;An in-depth look at what makes software development a roller coaster where the highs of 0 compiler warnings are quickly cancelled out by the pain of long hours, bad requirements, endless configuration, clueless managers and a plethora of other issues which make death by a thousand cuts seem like a good idea…. They will answer questions such as: “Why is programming often called an art despite having its underpinnings in formal logic?” “How can I rediscover the delight I felt when I first started coding?” “What’s that rush I feel when my test passes? Am I addicted to TDD?” Combining Psychology, Philosophy and Computer Science, Dr Holly Cummins and Martijn Verburg will present a series of practical tips to help you rediscover the euphoria that you felt the very first time a metal box in front of you came to life and cried out “Hello World”.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The Hero's Journey to Cloud: Why Star Wars, Prometheus, and Cloud Are All Interconnected]]></title><description><![CDATA[In the Cloud Garage, we see some patterns over and over again—an organisation wants to achieve an improvement and realises moving to cloud…]]></description><link>http://hollycummins.com/the-heros-journey-to-cloud-why-star-wars-prometheus-and-cloud-are-all-interconnected/</link><guid isPermaLink="false">http://hollycummins.com/the-heros-journey-to-cloud-why-star-wars-prometheus-and-cloud-are-all-interconnected/</guid><pubDate>Thu, 21 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In the Cloud Garage, we see some patterns over and over again—an organisation wants to achieve an improvement and realises moving to cloud is the way.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The story of designsparkmarketplace.com]]></title><description><![CDATA[The IBM Cloud Garage worked with RS Components to create designsparkmarketplace.com, a peer to peer maker marketplace. This is the story of…]]></description><link>http://hollycummins.com/the-story-of-http-designsparkmarketplace-com-think-2019/</link><guid isPermaLink="false">http://hollycummins.com/the-story-of-http-designsparkmarketplace-com-think-2019/</guid><pubDate>Tue, 12 Feb 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The IBM Cloud Garage worked with RS Components to create designsparkmarketplace.com, a peer to peer maker marketplace. This is the story of how we did it.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Cloud Native is about Culture, not Containers]]></title><description><![CDATA[As a developer in IBM’s Cloud Garage, Holly Cummins works with customers who are trying to shift their businesses to the cloud, and to cloud…]]></description><link>http://hollycummins.com/cloud-native-is-about-culture-not-containers-goto-copenhagen/</link><guid isPermaLink="false">http://hollycummins.com/cloud-native-is-about-culture-not-containers-goto-copenhagen/</guid><pubDate>Mon, 19 Nov 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;As a developer in IBM’s Cloud Garage, Holly Cummins works with customers who are trying to shift their businesses to the cloud, and to cloud native in particular. Their dream is more effort higher up the value chain, more innovation, and greater adaptability. What they really want is to beat their competitors to market, with something that’s better than their competitors, and then evolve it to beat any new competitors. What’s getting in their way isn’t the technology—wrapping something in a docker container (usually) isn’t that hard. Instead, it’s the structures that have been put in place to manage risk and the relationships between teams that trip companies up.
Holly shares stories of customers struggling to get cloud native and explains how IBM applied its methodology to turn things around. You’ll learn the ideal team size, the ideal microservice size, what skills a team needs, the role of architects, how to know if something is ready to ship, and whose fault everything is (joke).&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The Importance of Fun in the Workplace]]></title><description><![CDATA[An in-depth look at what makes software development a roller coaster where the highs of 0 compiler warnings are quickly cancelled out by the…]]></description><link>http://hollycummins.com/the-importance-of-fun-in-the-workplace-devoxx-belgium/</link><guid isPermaLink="false">http://hollycummins.com/the-importance-of-fun-in-the-workplace-devoxx-belgium/</guid><pubDate>Mon, 12 Nov 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;An in-depth look at what makes software development a roller coaster where the highs of 0 compiler warnings are quickly cancelled out by the pain of long hours, bad requirements, endless configuration, clueless managers and a plethora of other issues which make death by a thousand cuts seem like a good idea…. They will answer questions such as: “Why is programming often called an art despite having its underpinnings in formal logic?” “How can I rediscover the delight I felt when I first started coding?” “What’s that rush I feel when my test passes? Am I addicted to TDD?” Combining Psychology, Philosophy and Computer Science, Dr Holly Cummins and Martijn Verburg will present a series of practical tips to help you rediscover the euphoria that you felt the very first time a metal box in front of you came to life and cried out “Hello World”.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Cloud Native is about Culture, not Containers]]></title><description><![CDATA[As a developer in IBM’s Cloud Garage, Holly Cummins works with customers who are trying to shift their businesses to the cloud, and to cloud…]]></description><link>http://hollycummins.com/cloud-native-is-about-culture-not-containers-devoxx-belgium/</link><guid isPermaLink="false">http://hollycummins.com/cloud-native-is-about-culture-not-containers-devoxx-belgium/</guid><pubDate>Mon, 12 Nov 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;As a developer in IBM’s Cloud Garage, Holly Cummins works with customers who are trying to shift their businesses to the cloud, and to cloud native in particular. Their dream is more effort higher up the value chain, more innovation, and greater adaptability. What they really want is to beat their competitors to market, with something that’s better than their competitors, and then evolve it to beat any new competitors. What’s getting in their way isn’t the technology—wrapping something in a docker container (usually) isn’t that hard. Instead, it’s the structures that have been put in place to manage risk and the relationships between teams that trip companies up.
Holly shares stories of customers struggling to get cloud native and explains how IBM applied its methodology to turn things around. You’ll learn the ideal team size, the ideal microservice size, what skills a team needs, the role of architects, how to know if something is ready to ship, and whose fault everything is (joke).&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Cloud Native is about Culture, not Containers]]></title><description><![CDATA[As a developer in IBM’s Cloud Garage, Holly Cummins works with customers who are trying to shift their businesses to the cloud, and to cloud…]]></description><link>http://hollycummins.com/cloud-native-is-about-culture-not-containers-o’reilly-software-architecture-london/</link><guid isPermaLink="false">http://hollycummins.com/cloud-native-is-about-culture-not-containers-o’reilly-software-architecture-london/</guid><pubDate>Mon, 29 Oct 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;As a developer in IBM’s Cloud Garage, Holly Cummins works with customers who are trying to shift their businesses to the cloud, and to cloud native in particular. Their dream is more effort higher up the value chain, more innovation, and greater adaptability. What they really want is to beat their competitors to market, with something that’s better than their competitors, and then evolve it to beat any new competitors. What’s getting in their way isn’t the technology—wrapping something in a docker container (usually) isn’t that hard. Instead, it’s the structures that have been put in place to manage risk and the relationships between teams that trip companies up.
Holly shares stories of customers struggling to get cloud native and explains how IBM applied its methodology to turn things around. You’ll learn the ideal team size, the ideal microservice size, what skills a team needs, the role of architects, how to know if something is ready to ship, and whose fault everything is (joke).&lt;/p&gt;</content:encoded></item><item><title><![CDATA[What Zebrafish Can Teach Us About Healthy Workspaces]]></title><description><![CDATA[A core part of the IBM Cloud Garage practices is a “sustainable pace.”]]></description><link>http://hollycummins.com/what-zebrafish-can-teach-us-about-healthy-workspaces/</link><guid isPermaLink="false">http://hollycummins.com/what-zebrafish-can-teach-us-about-healthy-workspaces/</guid><pubDate>Wed, 10 Oct 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A core part of the IBM Cloud Garage practices is a “sustainable pace.”&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Cloud Native is about Culture, not Containers]]></title><description><![CDATA[As a developer in IBM’s Cloud Garage, Holly Cummins works with customers who are trying to shift their businesses to the cloud, and to cloud…]]></description><link>http://hollycummins.com/cloud-native-is-about-culture-not-containers-keynote-cloud-native-london/</link><guid isPermaLink="false">http://hollycummins.com/cloud-native-is-about-culture-not-containers-keynote-cloud-native-london/</guid><pubDate>Wed, 26 Sep 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;As a developer in IBM’s Cloud Garage, Holly Cummins works with customers who are trying to shift their businesses to the cloud, and to cloud native in particular. Their dream is more effort higher up the value chain, more innovation, and greater adaptability. What they really want is to beat their competitors to market, with something that’s better than their competitors, and then evolve it to beat any new competitors. What’s getting in their way isn’t the technology—wrapping something in a docker container (usually) isn’t that hard. Instead, it’s the structures that have been put in place to manage risk and the relationships between teams that trip companies up.
Holly shares stories of customers struggling to get cloud native and explains how IBM applied its methodology to turn things around. You’ll learn the ideal team size, the ideal microservice size, what skills a team needs, the role of architects, how to know if something is ready to ship, and whose fault everything is (joke).&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Gatos, Qubits e Teletransporte: O estranho mundo dos algoritmos quânticos (Parte 3) ]]></title><description><![CDATA[Os mesmos fatores que tornam a teoria quântica tão surpreendente também tornam os computadores quânticos em algo muito difícil para ser…]]></description><link>http://hollycummins.com/quantum-computing-applications-three-portuguese/</link><guid isPermaLink="false">http://hollycummins.com/quantum-computing-applications-three-portuguese/</guid><pubDate>Thu, 13 Sep 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Os mesmos fatores que tornam a teoria quântica tão surpreendente também tornam os computadores quânticos em algo muito difícil para ser implementado na prática. Este artigo explora estes desafios.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Gatos, Qubits e Teletransporte: O estranho mundo da computação quântica (Parte 1) ]]></title><description><![CDATA[Há vinte anos, computadores quânticos eram puramente teóricos e existiam apenas em quadros brancos e em trabalhos acadêmicos. Agora, os…]]></description><link>http://hollycummins.com/quantum-computing-intro-one-portuguese/</link><guid isPermaLink="false">http://hollycummins.com/quantum-computing-intro-one-portuguese/</guid><pubDate>Thu, 06 Sep 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Há vinte anos, computadores quânticos eram puramente teóricos e existiam apenas em quadros brancos e em trabalhos acadêmicos. Agora, os computadores quânticos estão disponíveis para locação na nuvem.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[猫、量子位和远距传动：令人匪夷所思的量子计算世界（第三部分）_语言]]></title><description><![CDATA[猫、量子位和远距传动：令人匪夷所思的量子计算世界（第三部分）关键要点让量子理论显得如此惊人的因素同样也让得量子计算机在实践中很难实现：量子现象并未在日常生活中表]]></description><link>http://hollycummins.com/quantum-computing-applications-three-chinese/</link><guid isPermaLink="false">http://hollycummins.com/quantum-computing-applications-three-chinese/</guid><pubDate>Wed, 25 Jul 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;猫、量子位和远距传动：令人匪夷所思的量子计算世界（第三部分）关键要点让量子理论显得如此惊人的因素同样也让得量子计算机在实践中很难实现：量子现象并未在日常生活中表&lt;/p&gt;</content:encoded></item><item><title><![CDATA[猫、量子位和远距传动：令人匪夷所思的量子计算世界（第二部分）_语言]]></title><description><![CDATA[猫、量子位和远距传动：令人匪夷所思的量子计算世界（第二部分）关键要点远距传动是最先被描述的量子信息处理过程之一。它使用纠缠在瞬间远距离传输信息，但它不能用于传送]]></description><link>http://hollycummins.com/quantum-computing-algoritms-two-chinese/</link><guid isPermaLink="false">http://hollycummins.com/quantum-computing-algoritms-two-chinese/</guid><pubDate>Tue, 17 Jul 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;猫、量子位和远距传动：令人匪夷所思的量子计算世界（第二部分）关键要点远距传动是最先被描述的量子信息处理过程之一。它使用纠缠在瞬间远距离传输信息，但它不能用于传送&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Cats, Qubits, and Teleportation: The Spooky World of Quantum Computation Applications (Part 3) ]]></title><description><![CDATA[The same factors which make quantum theory so startling also make quantum computers very difficult to implement in practice. This article…]]></description><link>http://hollycummins.com/quantum-computing-applications-three/</link><guid isPermaLink="false">http://hollycummins.com/quantum-computing-applications-three/</guid><pubDate>Sat, 14 Jul 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The same factors which make quantum theory so startling also make quantum computers very difficult to implement in practice. This article explores these challenges&lt;/p&gt;</content:encoded></item><item><title><![CDATA[猫、量子位和远距传动：令人匪夷所思的量子计算世界（第一部分）_语言]]></title><description><![CDATA[猫、量子位和远距传动：令人匪夷所思的量子计算世界（第一部分）关键要点二十年前，量子计算机还只处在理论阶段，只存在于白板和学术论文中。而现在，量子计算机已经在云端]]></description><link>http://hollycummins.com/quantum-computing-intro-one-chinese/</link><guid isPermaLink="false">http://hollycummins.com/quantum-computing-intro-one-chinese/</guid><pubDate>Sat, 07 Jul 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;猫、量子位和远距传动：令人匪夷所思的量子计算世界（第一部分）关键要点二十年前，量子计算机还只处在理论阶段，只存在于白板和学术论文中。而现在，量子计算机已经在云端&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Cats, Qubits, and Teleportation: The Spooky World of Quantum Algorithms (Part 2) ]]></title><description><![CDATA[The relationship between complexity theory, quantum algorithms and machine learning is becoming increasingly important. This article…]]></description><link>http://hollycummins.com/quantum-computing-algoritms-two/</link><guid isPermaLink="false">http://hollycummins.com/quantum-computing-algoritms-two/</guid><pubDate>Fri, 06 Jul 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The relationship between complexity theory, quantum algorithms and machine learning is becoming increasingly important. This article explores quantum algorithms and their applicability.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Cats, Qubits, and Teleportation: The Spooky World of Quantum Computation (Part 1)]]></title><description><![CDATA[Twenty years ago, quantum computers were purely theoretical, and existed only on whiteboards and in academic papers. Now, quantum computers…]]></description><link>http://hollycummins.com/quantum-computing-intro-one/</link><guid isPermaLink="false">http://hollycummins.com/quantum-computing-intro-one/</guid><pubDate>Fri, 29 Jun 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Twenty years ago, quantum computers were purely theoretical, and existed only on whiteboards and in academic papers. Now, quantum computers are available for hire on the cloud.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Cloudy with a Chance of Meatballs: Cloud Surprises for the Java Developer]]></title><description><![CDATA[Many businesses are moving to the cloud. This journey to the cloud is in fact a quest, complete with a hero (us!), a call to action, a…]]></description><link>http://hollycummins.com/cloudy-with-a-chance-of-meatballs-cloud-surprises-for-the-java-developer-keynote-javaland/</link><guid isPermaLink="false">http://hollycummins.com/cloudy-with-a-chance-of-meatballs-cloud-surprises-for-the-java-developer-keynote-javaland/</guid><pubDate>Tue, 13 Mar 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Many businesses are moving to the cloud. This journey to the cloud is in fact a quest, complete with a hero (us!), a call to action, a perilous journey, and a glittering reward (no more patching operating systems!).&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The importance of fun in the workplace]]></title><description><![CDATA[One of the key elements of the Cloud Garage Method is Culture. That single word encompasses a whole range of practices about how we manage…]]></description><link>http://hollycummins.com/importance-fun-workplace/</link><guid isPermaLink="false">http://hollycummins.com/importance-fun-workplace/</guid><pubDate>Tue, 13 Feb 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;One of the key elements of the Cloud Garage Method is Culture. That single word encompasses a whole range of practices about how we manage our projects, and how we interact with our stakeholders and each other. One of my favorite parts of the Cloud Garage culture is the fact that it includes a fun work environment. Although we all like fun (I hope), it’s often seen as slightly unprofessional – fun is something that happens outside work. Most of us would be a bit nervous about writing, “I’m great fun” on our CVs, or reporting to our boss how much fun we’re having in the office. Nonetheless, fun matters a lot, and not just because it’s nice. Why fun matters The evidence that fun boosts productivity is compelling. A happy work environment mean&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Working out how much a project will cost]]></title><description><![CDATA[When customers visit the IBM Cloud Garage to discuss a potential project, one of the most frequently asked questions is “how much is my…]]></description><link>http://hollycummins.com/working-much-project-will-cost/</link><guid isPermaLink="false">http://hollycummins.com/working-much-project-will-cost/</guid><pubDate>Tue, 06 Feb 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;When customers visit the IBM Cloud Garage to discuss a potential project, one of the most frequently asked questions is “how much is my project going to cost?”. It’s generally accepted that – without a working time machine – at least one corner of the project management triangle needs to be flexible. Trying to nail down scope, cost, and schedule at the beginning of a project is a notorious anti-pattern; delivering a pre-determined list of features on-schedule within a given budget may give the illusion of success, but quality will almost always suffer in some way. These latent problems, or technical debt, can significantly affect the success of a project in the field, and also the cost of future extensions. In the Garage, we’re convinced th&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Chatbot Best Practices]]></title><description><![CDATA[One of the most frequent questions clients ask when visiting a Cloud Garage is “Can you build us a chatbot?” This question is reflective of…]]></description><link>http://hollycummins.com/chatbot-best-practices/</link><guid isPermaLink="false">http://hollycummins.com/chatbot-best-practices/</guid><pubDate>Mon, 29 Jan 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;One of the most frequent questions clients ask when visiting a Cloud Garage is “Can you build us a chatbot?” This question is reflective of an industry-wide trend towards more natural language in computerised interactions, and also more automation of interactions currently handled by humans. Today, there are currently more than 33,000 chatbots on Facebook Messenger alone. Many businesses are turning to Watson Conversation to help take out cost and improve user satisfaction. Our Hursley Labs colleague Simon Burns has written an excellent series of articles on how to write great Watson chatbots, which you should definitely go read. Think of this blog as a supplement, with our experiences from the field. To address this pressing question, I’ve&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Software Developers Guide to Fun in the Workplace: Euphoria Despite the Despair]]></title><description><![CDATA[An in-depth look at what makes software development a roller coaster where the highs of 0 compiler warnings are quickly cancelled out by the…]]></description><link>http://hollycummins.com/software-developers-guide-to-fun-in-the-workplace-euphoria-despite-the-despair-jspring/</link><guid isPermaLink="false">http://hollycummins.com/software-developers-guide-to-fun-in-the-workplace-euphoria-despite-the-despair-jspring/</guid><pubDate>Wed, 10 May 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;An in-depth look at what makes software development a roller coaster where the highs of 0 compiler warnings are quickly cancelled out by the pain of long hours, bad requirements, endless configuration, clueless managers and a plethora of other issues which make death by a thousand cuts seem like a good idea…. They will answer questions such as: “Why is programming often called an art despite having its underpinnings in formal logic?” “How can I rediscover the delight I felt when I first started coding?” “What’s that rush I feel when my test passes? Am I addicted to TDD?” Combining Psychology, Philosophy and Computer Science, Dr Holly Cummins and Martijn Verburg will present a series of practical tips to help you rediscover the euphoria that you felt the very first time a metal box in front of you came to life and cried out “Hello World”.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Innovation Stories from the Bluemix Garage]]></title><description><![CDATA[Everyone’s talking about innovation, but how do you know if you’re actually doing it? What are the ingredients for successful innovation? In…]]></description><link>http://hollycummins.com/innovation-stories-from-the-bluemix-garage-nextm/</link><guid isPermaLink="false">http://hollycummins.com/innovation-stories-from-the-bluemix-garage-nextm/</guid><pubDate>Wed, 05 Apr 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Everyone’s talking about innovation, but how do you know if you’re actually doing it? What are the ingredients for successful innovation? In this talk, Holly will describe how the right combination of people, place, practices, and platform can lead to some pretty impressive outcomes. She’ll also answer questions, such as ‘what happens when we think about our user first?’, ‘is there an app for that?’, ’can a computer really tell dog breeds apart?,’ how can I tell if my idea is great or terrible?’, ’how long does it take to build a minimum viable product?’&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Thinking Strategically About IoT]]></title><description><![CDATA[Cool? Useful? Disruptor? All of the above? IoT is having an impact on more and more industries. As the cost of instrumenting things and…]]></description><link>http://hollycummins.com/thinking-strategically-about-iot-qcon-london/</link><guid isPermaLink="false">http://hollycummins.com/thinking-strategically-about-iot-qcon-london/</guid><pubDate>Mon, 06 Mar 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Cool? Useful? Disruptor? All of the above? IoT is having an impact on more and more industries. As the cost of instrumenting things and collecting data drops, the possibilities for what we can control and the kind of insights we can gather increase. Not only is IoT hardware cheaper and more pervasive, developing IoT software is now far more accessible. That doesn’t mean there aren’t tricky bits. Does Java have relevance in the IoT world? How can you keep the system reliable and handle failure in a cost-effective way? How can you cope with the data volumes? What’s the best way to turn raw data into insight?&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Thomson creates travel search chatbot with IBM Watson]]></title><description><![CDATA[Travel search tool uses Watson’s natural language processing and speech-to-text capabilities.]]></description><link>http://hollycummins.com/thomson-creates-travel-search-chatbot-with-ibm-watson.html/</link><guid isPermaLink="false">http://hollycummins.com/thomson-creates-travel-search-chatbot-with-ibm-watson.html/</guid><pubDate>Tue, 22 Nov 2016 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Travel search tool uses Watson’s natural language processing and speech-to-text capabilities.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[IBM Garage radically changes how you deliver tech-enabled innovation]]></title><description><![CDATA[How well do you know the Bluemix Garage? CTO Rachel Reinitz calls it “a collaborative environment to work as one team with clients to…]]></description><link>http://hollycummins.com/getting-started-with-bluemix-garage/</link><guid isPermaLink="false">http://hollycummins.com/getting-started-with-bluemix-garage/</guid><pubDate>Mon, 14 Nov 2016 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;How well do you know the Bluemix Garage? CTO Rachel Reinitz calls it “a collaborative environment to work as one team with clients to rapidly define, design, develop, validate, analyze, and deploy successful apps.” In fact, she says, “Our Bluemix Garage Method melds industry best practices, startup culture, and IBM’s expertise, and adapts these for the needs of our clients, large or small.” But that’s only the beginning. How do most Bluemix Garage projects get started? Most innovation projects start with a two-day design thinking workshop. Before starting the workshop, businesses have identified an area of opportunity (but not a solution—that’s what the workshop is for). Identifying the right mix of participants is also important. Diverse p&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Microservices: from dream to reality in an hour]]></title><description><![CDATA[Are microservices a wonder-pattern for rescuing intractably complex applications? Or are they just a restatement of the software engineering…]]></description><link>http://hollycummins.com/microservices-from-dream-to-reality-in-an-hour-javaone/</link><guid isPermaLink="false">http://hollycummins.com/microservices-from-dream-to-reality-in-an-hour-javaone/</guid><pubDate>Sun, 18 Sep 2016 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Are microservices a wonder-pattern for rescuing intractably complex applications? Or are they just a restatement of the software engineering best practices we all should be following anyway? Or something in between?
How do they work? How should they be written? What are the pitfalls? What are the underpinning technologies?&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Building Stuff for Fun and Profit - confessions from a life in code and cables]]></title><description><![CDATA[I love making stuff. I’m so happy that my job allows me to make stuff, and when I’m not at work, I’m making stuff anyway. Some of the stuff…]]></description><link>http://hollycummins.com/building-stuff-for-fun-and-profit-confessions-from-a-life-in-code-and-cables-buildstuff/</link><guid isPermaLink="false">http://hollycummins.com/building-stuff-for-fun-and-profit-confessions-from-a-life-in-code-and-cables-buildstuff/</guid><pubDate>Fri, 08 Jul 2016 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I love making stuff. I’m so happy that my job allows me to make stuff, and when I’m not at work, I’m making stuff anyway. Some of the stuff I’ve made has solved real technical and business problems; some of it I’ve done just to see if I can. In this talk I’ll describe some of the valuable things I’ve built for my employer, IBM, and our clients - I’ll also describe some of the ridiculous things I’ve made for myself. 
These are slides for a talk given at &lt;a href=&quot;https://web.archive.org/web/20160818222718/http://www.buildstuff.com.ua/odessa/&quot;&gt;BuildStuff Odesa, 2016&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Putting the 'Micro' Into Microservices With Raspberry Pi - DZone IoT]]></title><link>http://hollycummins.com/putting-the-micro-into-microservices-with-raspberr/</link><guid isPermaLink="false">http://hollycummins.com/putting-the-micro-into-microservices-with-raspberr/</guid><pubDate>Tue, 14 Jun 2016 00:00:00 GMT</pubDate><content:encoded></content:encoded></item><item><title><![CDATA[How the Bluemix Garage is helping a blind athlete run marathons - solo]]></title><description><![CDATA[The Bluemix Garage London has written an application to guide a blind-runner on an ultra-marathon in the desert, using a GPS route and beeps…]]></description><link>http://hollycummins.com/bluemix-garage-helps-blind-athlete-run-marathons-solo/</link><guid isPermaLink="false">http://hollycummins.com/bluemix-garage-helps-blind-athlete-run-marathons-solo/</guid><pubDate>Thu, 12 May 2016 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The Bluemix Garage London has written an application to guide a blind-runner on an ultra-marathon in the desert, using a GPS route and beeps.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[This blind man is running a 155 mile ultra-marathon with the help of an IBM app]]></title><description><![CDATA[Simon Wheatcroft is completely blind. But that’s not going to stop him running a 250 kilometer (155.3 mile) race in the Namibian desert.]]></description><link>http://hollycummins.com/this-blind-man-is-running-a-155-mile-ultra-marathon-with-the-help-of-an-ibm-app.html/</link><guid isPermaLink="false">http://hollycummins.com/this-blind-man-is-running-a-155-mile-ultra-marathon-with-the-help-of-an-ibm-app.html/</guid><pubDate>Tue, 03 May 2016 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Simon Wheatcroft is completely blind. But that’s not going to stop him running a 250 kilometer (155.3 mile) race in the Namibian desert.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[That’s not useless, it’s just … unusual]]></title><description><![CDATA[Talk presented at the London Java Community’s Mad Scientists event: http://mad-scientists.mybluemix.net.
Innovation is the new currency of…]]></description><link>http://hollycummins.com/thats-not-useless-its-just-unusual-mad-scientists/</link><guid isPermaLink="false">http://hollycummins.com/thats-not-useless-its-just-unusual-mad-scientists/</guid><pubDate>Thu, 24 Mar 2016 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Talk presented at the London Java Community’s Mad Scientists event: &lt;a href=&quot;https://web.archive.org/web/20160524152749/http://mad-scientists.mybluemix.net/&quot;&gt;http://mad-scientists.mybluemix.net&lt;/a&gt;.
Innovation is the new currency of business, but let’s not forget the sheer silly joy of creativity. I’ll be the first to admit that the business value of world’s first cuddly throwable application server is pretty low. The application server embedded in a hat is probably even less lucrative. The good news is that I’m part of a long tradition of inventing useless things - and we’re still benefiting today from some of those apparently useless things. So even if the throwable application server never goes to market, lets all keep trying things out just for the wonder of it. Even if everyone else thinks we’re bonkers, we’ll be having fun.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Microservices: from dream to reality in forty five minutes]]></title><description><![CDATA[Are microservices a wonder-pattern for rescuing intractably complex applications? Or are they just a restatement of the software engineering…]]></description><link>http://hollycummins.com/microservices-from-dream-to-reality-in-an-forty-five-minutes-jfokus-2016/</link><guid isPermaLink="false">http://hollycummins.com/microservices-from-dream-to-reality-in-an-forty-five-minutes-jfokus-2016/</guid><pubDate>Mon, 08 Feb 2016 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Are microservices a wonder-pattern for rescuing intractably complex applications? Or are they just a restatement of the software engineering best practices we all should be following anyway? Or something in between?
How do they work? How should they be written? What are the pitfalls? What are the underpinning technologies?&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Microservices: from dream to reality in an hour]]></title><description><![CDATA[Are microservices a wonder-pattern for rescuing intractably complex applications? Or are they just a restatement of the software engineering…]]></description><link>http://hollycummins.com/microservices-from-dream-to-reality-in-an-hour-jax-london/</link><guid isPermaLink="false">http://hollycummins.com/microservices-from-dream-to-reality-in-an-hour-jax-london/</guid><pubDate>Mon, 12 Oct 2015 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Are microservices a wonder-pattern for rescuing intractably complex applications? Or are they just a restatement of the software engineering best practices we all should be following anyway? Or something in between?
How do they work? How should they be written? What are the pitfalls? What are the underpinning technologies?&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Confessions of an automation addict]]></title><description><![CDATA[I’ve never seen a job I didn’t want to automate. Sometimes it’s worked out well, sometimes automation has turned a small nuisance into a big…]]></description><link>http://hollycummins.com/confessions-of-an-automation-addict-voxxed-days-vilnius/</link><guid isPermaLink="false">http://hollycummins.com/confessions-of-an-automation-addict-voxxed-days-vilnius/</guid><pubDate>Fri, 18 Sep 2015 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I’ve never seen a job I didn’t want to automate. Sometimes it’s worked out well, sometimes automation has turned a small nuisance into a big, fragile, free-time-eating monster nuisance. In this talk, I’ll explore why we automate, when to automate, the hazards of automation and the - big - rewards of automation. I’m part of the team developing IBM’s WebSphere Liberty application server. We’ve used a mix of off-the-shelf and home-rolled tools and processes to work smarter and more productively. I’ll describe what we’ve learned as WebSphere has transitioned to DevOps and continuous delivery and why I still can’t resist trying to automate all the things.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Microservices: Storm in a teacup, or teacups in a storm? - JAXenter]]></title><description><![CDATA[Somehow, the buzz around microservices has us believing that every single employee and enterprise must break up their monolith empires and…]]></description><link>http://hollycummins.com/microservices-storm-in-a-teacup-or-teacups-in-a-storm-120388.html/</link><guid isPermaLink="false">http://hollycummins.com/microservices-storm-in-a-teacup-or-teacups-in-a-storm-120388.html/</guid><pubDate>Mon, 07 Sep 2015 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Somehow, the buzz around microservices has us believing that every single employee and enterprise must break up their monolith empires and follow the trend.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The Cuddly Throwable Application Server]]></title><description><![CDATA[Computers are getting small enough and cheap enough that they’re almost disposable. It’s possible to sock computers away almost anywhere…]]></description><link>http://hollycummins.com/the-cuddly-throwable-application-server-qcon-london/</link><guid isPermaLink="false">http://hollycummins.com/the-cuddly-throwable-application-server-qcon-london/</guid><pubDate>Wed, 04 Mar 2015 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Computers are getting small enough and cheap enough that they’re almost disposable. It’s possible to sock computers away almost anywhere, and to connect almost anything to the internet. At the same time, the Java stacks that we know and love are also getting lighter and cheaper. That combination means it’s possible to put a full spec-compliant Java EE server on ridiculously cheap hardware, and then throw it around the room without worrying too much about breaking stuff.
Source code: &lt;a href=&quot;https://github.com/holly-cummins/throwable-application-server&quot;&gt;https://github.com/holly-cummins/throwable-application-server&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Interacting with headless computers (or "How to not keep losing your raspberry pi on the network")]]></title><description><![CDATA[I spend a fair amount of time playing with Raspberry Pis and other ARM-based boxes, like pcDuinos and Utilite. (If my boss is reading this…]]></description><link>http://hollycummins.com/managing-headless-computers-or-how-to.html/</link><guid isPermaLink="false">http://hollycummins.com/managing-headless-computers-or-how-to.html/</guid><pubDate>Wed, 25 Feb 2015 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I spend a fair amount of time playing with Raspberry Pis and other ARM-based boxes, like pcDuinos and Utilite. (If my boss is reading this, I’m not “playing”, I’m “working”.) I still find it amazing how small, cheap, and powerful these devices are.&lt;/p&gt;
&lt;p&gt;One thing it’s taken me a while to work out is how to connect to the computer. It’s kind of a prerequisite for doing anything more interesting, like embedding it in a hat or a ball, or just … using it. It should be so easy, right? A lot of set-up guides start with you plugging the processor to an HDMI monitor and USB keyboard. This isn’t so practical if I’m out and about with the computer, because I’m not going to be lugging an HDMI monitor with me. Even at home, it’s not foolproof - my new pcDuino doesn’t seem able to display a picture over HDMI to any of the (six) monitors, TVs, or projectors I tried. At that point it’s not so much “headless” as “decapitated”.&lt;/p&gt;
&lt;p&gt;Connecting by ssh requires less bulky hardware, but it has its own challenges: what on earth is the ip address of this thing? I used to ensure I always knew the ip address by nailing it down. I’d connect the pi to my laptop with an ethernet cable (no need for a fancy crossover one with a modern computer), configure the pi with a static ip address (for example, 192.168.2.10), and then configure my laptop’s ethernet interface to think it was 192.168.2.1. This ensured I could easily connect to my pi, but it did require some initial set up of the network. For my totally inaccessible pcDuino, this is no good. Even for the pi, it’s not ideal - the static ip address means then even if I plug it into my router, it’s totally divorced from the “real” internet. More seriously, I’ve had a few panics where I’ve loaned the pi out and then found I was unable to connect to it when I got it back. (Curse you, nameless colleague who re-configured the pi to use dhcp and didn’t tell me!) The static ip settings also left my laptop in a pretty messed up state.&lt;/p&gt;
&lt;p&gt;I’ve now found a new system which avoids some of these disadvantages. I don’t touch the ethernet configuration of the arm box, so it can stay using dhcp. I connect it to my laptop with an ethernet cable but I configure my mac to share its internet connection from wi-fi to ethernet. This OS magic enables the two computers to see each other without either having to have crazy network settings.&lt;/p&gt;
&lt;p&gt;I then use nmap to find the pi on the network, as follows:&lt;code class=&quot;language-text&quot;&gt;sudo nmap -sn 192.168.1.0/24&lt;/code&gt;. To work out which ip address to scan, I run &lt;code class=&quot;language-text&quot;&gt;ifconfig&lt;/code&gt; and use the ethernet access of the &lt;code class=&quot;language-text&quot;&gt;bridge100&lt;/code&gt; network interface (but change the last digit to 0). The &lt;code class=&quot;language-text&quot;&gt;sudo&lt;/code&gt; isn’t necessary, but it makes nmap show the MAC addresses.&lt;/p&gt;
&lt;p&gt;This isn’t so useful for the pcDuino, which doesn’t have a fixed MAC address, but it really helps identify the pi, which will always have a MAC address in the b8:27:eb range.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Edit - other options:&lt;/em&gt; I haven’t tried these, but twitter has spoken! If you have a flock (or even a small handful) of identical devices, including &lt;a href=&quot;https://gist.github.com/andysc/5605183&quot;&gt;ipspeak&lt;/a&gt; in the bootable image bypasses the need for any mmap sleuthing. You can plug headphones into the device and it will read out its ip address every thirty seconds. Alternatively, if you have individually configured devices, &lt;a href=&quot;https://www.avahi.org/&quot;&gt;avahi&lt;/a&gt; allows them to be addressed using a memorable name.&lt;/p&gt;
&lt;h2&gt;Acknowledgements&lt;/h2&gt;
&lt;p&gt;There are many similar guides on the internet. I’ve posted this here mostly in the hope it will be useful notes to my future self, since I’ve independently rediscovered my optimum flow about four times. I figured out the nmap commands from a relatively recent post at &lt;a href=&quot;http://raspberrypi.stackexchange.com/questions/13936/find-raspberry-pi-address-on-local-network&quot;&gt;stackoverflow&lt;/a&gt;, and the idea of using network sharing to connect my pi to my laptop without wrecking my laptop’s settings is from &lt;a href=&quot;https://community.element14.com/technologies/open-source-hardware/f/forum/21938/quick-start-of-pcduino-without-a-hdmi-monitor-and-serial-debug-cable?displayFullThread=true&quot;&gt;alvin_jin&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The Wearable Application Server and Other Adventures in Software Engineering]]></title><link>http://hollycummins.com/the-wearable-application-server-and-other-adventures-in-software-engineering-øredev/</link><guid isPermaLink="false">http://hollycummins.com/the-wearable-application-server-and-other-adventures-in-software-engineering-øredev/</guid><pubDate>Mon, 03 Nov 2014 00:00:00 GMT</pubDate><content:encoded></content:encoded></item><item><title><![CDATA[The Lazy Developer’s Guide to Cloud Foundry]]></title><link>http://hollycummins.com/the-lazy-developers-guide-to-cloud-foundry-devoxx-uk-2014/</link><guid isPermaLink="false">http://hollycummins.com/the-lazy-developers-guide-to-cloud-foundry-devoxx-uk-2014/</guid><pubDate>Thu, 12 Jun 2014 00:00:00 GMT</pubDate><content:encoded></content:encoded></item><item><title><![CDATA[Enterprise OSGi In Action]]></title><description><![CDATA[Enterprise OSGI in Action is a hands-on guide for developers using OSGi to build the next generation of enterprise Java applications. By…]]></description><link>http://hollycummins.com/enterprise-osgi-in-action/</link><guid isPermaLink="false">http://hollycummins.com/enterprise-osgi-in-action/</guid><pubDate>Fri, 01 Mar 2013 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;Enterprise OSGI in Action&lt;/em&gt; is a hands-on guide for developers using OSGi to build the next generation of enterprise Java applications. By presenting relevant examples and case studies, this book guides the reader through the maze of new standards and projects.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[OSGi vs Spaghetti - Part II, The Enterprise strikes back]]></title><description><![CDATA[Software engineering sometimes seems like a struggle against spaghetti. Without lots of care, modern projects risk becoming an unwieldy…]]></description><link>http://hollycummins.com/osgi-vs-spaghetti-part-ii-the-enterprise-strikes-back-jfokus/</link><guid isPermaLink="false">http://hollycummins.com/osgi-vs-spaghetti-part-ii-the-enterprise-strikes-back-jfokus/</guid><pubDate>Mon, 04 Feb 2013 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Software engineering sometimes seems like a struggle against spaghetti. Without lots of care, modern projects risk becoming an unwieldy tangle of closely-coupled code whose behaviour and dependencies are mostly unknowable. OSGi can help keep the complexity at bay, but until recently OSGi didn’t play very well with modern enterprise programming models such as dependency injection, WARs, JPA, and application deployment. The Enterprise OSGi programming model is changing all this, and can help keep your applications from descending into a noodly mess. This session will discuss the basics of OSGi modularity, and demo the build tools, middleware, and architectural principles which can be used to turn a chunky WAR into a lean, mean, extensible OSGi web application.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The Wearable Application Server and Other Adventures in Software Engineering]]></title><description><![CDATA[Mobile technology has so far mostly been confined to the client side, for fairly obvious reasons - traditionally, clients are mobile, and…]]></description><link>http://hollycummins.com/the-wearable-application-server-and-other-adventures-in-software-engineering-jfokus/</link><guid isPermaLink="false">http://hollycummins.com/the-wearable-application-server-and-other-adventures-in-software-engineering-jfokus/</guid><pubDate>Mon, 04 Feb 2013 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Mobile technology has so far mostly been confined to the client side, for fairly obvious reasons - traditionally, clients are mobile, and servers are not. However, not only is hardware getting smaller, servers are too. When your application server can run on pocket-sized £25 hardware it opens up some pretty cool possibilities - your server is literally lightweight. Not only can you have location-based services, you can have locatable servers. Servers can run on phones, they can run on the Raspberry Pi, and so they can go almost anywhere you can think of. Modularity gives software the flexibility it needs to cram into these tight spaces without sacrificing power. This talk will demonstrate developing and deploying a web application to an application server embedded in a silly hat.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Building Modular Applications with Enterprise OSGi]]></title><link>http://hollycummins.com/osgi-devoxx-2012/</link><guid isPermaLink="false">http://hollycummins.com/osgi-devoxx-2012/</guid><pubDate>Mon, 12 Nov 2012 00:00:00 GMT</pubDate><content:encoded></content:encoded></item><item><title><![CDATA[Everything I know about software, I learnt from spaghetti bolognese]]></title><description><![CDATA[IBM’s Holly Cummins and ‘Diabolical Developer’ Martijn Verburg discuss ways of overcoming complexity in software development.
None of of us…]]></description><link>http://hollycummins.com/everything-i-know-about-software-i-learnt-from-spaghetti-bolognese-jax-london/</link><guid isPermaLink="false">http://hollycummins.com/everything-i-know-about-software-i-learnt-from-spaghetti-bolognese-jax-london/</guid><pubDate>Mon, 15 Oct 2012 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;IBM’s Holly Cummins and ‘Diabolical Developer’ Martijn Verburg discuss ways of overcoming complexity in software development.
None of of us enjoy spaghetti code, much less spaghetti builds, spaghetti tests, or spaghetti classpaths. Some days software engineering seems like the struggle against spaghetti - modern projects often become a large and complex tangle of source code and resources, and the runtime interactions are even worse! This means many projects are hard to navigate, difficult to extend and problematic to deploy/run. You only have to look at the OpenJDK itself to see the problems it faces in trying to have a smaller deployment and runtime footprint! Jigsaw was to be the inbuilt solution for the OpenJDK, extending beyond the JVM itself to help applications with their modularisation story (i.e. Jigsaw or OSGi). Sadly, Jigsaw is not going to make it for Java 8, so developers are left with only a few tooling choices in order to help them. However, tooling is only part of the answer in managing the complexity. What really matters in avoiding a noodly mess is the layout of your source code and resources, clear contracts, and how you think about the dependencies your code has at runtime. Dr Holly Cummins and Martijn Verburg will take you through some of the practical design decisions you can take to help modularise your application properly, independent of tooling. Time permitting they’ll then showcase some of tooling support that OSGi can bring to the table as the premier modularity system for Java today.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Java basics: converting a collection to a string]]></title><description><![CDATA[If you look up how to write a map or a list out as a string, you can find lots of complicated answers involving loops and even XMLEncoders…]]></description><link>http://hollycummins.com/converting-collection-string/</link><guid isPermaLink="false">http://hollycummins.com/converting-collection-string/</guid><pubDate>Thu, 27 Sep 2012 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;If you look up how to write a map or a list out as a string, you can find lots of complicated answers involving loops and even XMLEncoders. It doesn’t have to be that hard. The easiest way to convert a Map into a nice string?&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;String niceString = Arrays.toString(map.entrySet().toArray());&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;It’s even easier for a list:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;String niceString = Arrays.toString(list.toArray());&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Ta-daaa!&lt;/p&gt;</content:encoded></item><item><title><![CDATA[OSGi and the Enterprise - A match made in a … box?]]></title><description><![CDATA[The Enterprise OSGi specification provides a compelling programming model for creating modular, portable, and dynamic enterprise…]]></description><link>http://hollycummins.com/osgi-and-the-enterprise-a-match-made-in-a-box-paris-java-user-group/</link><guid isPermaLink="false">http://hollycummins.com/osgi-and-the-enterprise-a-match-made-in-a-box-paris-java-user-group/</guid><pubDate>Tue, 08 Jun 2010 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The Enterprise OSGi specification provides a compelling programming model for creating modular, portable, and dynamic enterprise applications. The Apache Aries project is an open source implementation of this standard. It is designed to complement existing web servers with a new set of pluggable enterprise-level services such as transactions, persistence, service bindings, and dependency injection. The Blueprint container standardizes the popular Spring component model, enabling dependency injection, application component assembly, and allowing beans to be easily swapped in and out for unit testing. Integration with JPA and JNDI standards allow declarative persistence and interoperability with legacy applications. Support for transactions and JMX provide enterprise-level application control.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Java performance - not so scary after all]]></title><description><![CDATA[No one likes slow applications, but sometimes it’s hard to know where to start when trying to fix a performance problem. This talk will…]]></description><link>http://hollycummins.com/java-performance-not-so-scary-after-all-geecon/</link><guid isPermaLink="false">http://hollycummins.com/java-performance-not-so-scary-after-all-geecon/</guid><pubDate>Wed, 12 May 2010 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;No one likes slow applications, but sometimes it’s hard to know where to start when trying to fix a performance problem. This talk will cover a range of tools and techniques which can be used to track down and fix performance issues.
Topics covered:
Why performance really really matters
What’s the garbage collector doing? (And why you should care.)
But why is the garbage collector doing all that, anyway? How to find out what’s in your heap.
Are you waiting around on locks?
Is your application running the code it should be?
Pulling it all together&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Health Center 1.0 released]]></title><description><![CDATA[Last week was a big week for the Health Center team. Version 1.0 of the Health Center was released. Full installation instructions are…]]></description><link>http://hollycummins.com/health-center-released/</link><guid isPermaLink="false">http://hollycummins.com/health-center-released/</guid><pubDate>Tue, 16 Jun 2009 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Last week was a big week for the Health Center team. Version 1.0 of the Health Center was released. Full installation instructions are available from the &lt;a href=&quot;https://www.ibm.com/docs/en/mon-diag-tools?topic=monitoring-diagnostic-tools-health-center&quot;&gt;Health Center homepage&lt;/a&gt;. It now works with IBM Support Assistant and is suitable for use in production (with recent IBM JVMs). A method profiler that’s got a low enough overhead to be used in production and left on all the time is a pretty special thing, I think. One which is only part of a tool which also assesses system stability, triages a range of performance problems, and makes performance tuning accessible to non-experts is even more special, I think.&lt;/p&gt;
&lt;p&gt;To celebrate the whole team baked and brought in carrot cake, brownies, chocolate chip cookies, lemon cake, rocky road squares, and flapjacks. We even had balloons. It was very nice but I’ve never eaten so much at work and I think we were all ready to explode by the afternoon - in future I think we should delegate and have only half the team bake per release.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[How to interpret a method profile]]></title><description><![CDATA[In a previous post, I described the general methodology I use to diagnose performance problems. Once an application has been identified as…]]></description><link>http://hollycummins.com/how-interpre-method-profile/</link><guid isPermaLink="false">http://hollycummins.com/how-interpre-method-profile/</guid><pubDate>Tue, 12 May 2009 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In a &lt;a href=&quot;/how-do-you-solve-performance-problem/&quot;&gt;previous post&lt;/a&gt;, I described the general methodology I use to diagnose performance problems.&lt;/p&gt;
&lt;p&gt;Once an application has been identified as CPU-bound, either by using the &lt;a href=&quot;https://www.ibm.com/support/pages/java-health-center-client-low-overhead-monitoring-tool&quot;&gt;Health Center&lt;/a&gt; or CPU monitoring, the next step is to figure out &lt;em&gt;what&lt;/em&gt; is eating CPU. In a Java application, this will usually be Java code, but it could be native code. Profiling native code usually requires platform specific tools; on linux, I use &lt;a href=&quot;http://perfinsp.sourceforge.net/tprof.html&quot;&gt;tprof&lt;/a&gt;. Profiling Java code is a lot easier, and is more likely to yield big performance improvements, so I usually start with a Java profile and only profile native code if I didn’t get anywhere with the Java profile. For Java profiling, I use the Health Center. It’s got a few advantages, one of which is that there’s no bytecode instrumentation needed, there’s no need to specify only a few packages to profile, and the overhead is very low, so it won’t affect the performance characteristics of what you’re trying to profile.&lt;/p&gt;
&lt;p&gt;So what does a method profile tell you? Simply put, it tells you what your application is spending its time doing. More precisely, it tells you what code your application is spending its time running - it doesn’t tell you when your application is waiting on a lock instead of running your code, and it doesn’t tell you when the JVM is collecting garbage instead of running your code. Assuming locking and GC aren’t the cause of the performance problem (see &lt;a href=&quot;/how-do-you-solve-performance-problem/&quot;&gt;triaging a performance problem&lt;/a&gt;), the method profile will give you the information you need to make your application go faster.&lt;/p&gt;
&lt;p&gt;The application is doing too much work, and that’s slowing it down. Your aim in performance tuning is to make the application do less work. There are lots of ways to make code more efficient. Sometimes people start performance tuning by code inspection - they read through the code base looking for obvious inefficiencies. I’ve done this myself lots of times, but it’s not a particularly efficient technique. Say I find a method which is pretty carelessly implemented, and I double its speed with a bit of refactoring. Then I triumphantly re-run my application, only to discover nothing’s changed. What’s going on? The problem is that a big performance improvement on a method which is rarely called isn’t going to change much of anything. For example, if I double the speed of a method which uses 0.5% of my CPU time, I’ve sped my application up by an imperceptible 0.25%. If, on the other hand, I shave 10% of the time of a method which is using 20% of my CPU, my application will go 2% faster. So the first rule of performance tuning is to optimise the methods at the top of the profile and ignore the ones near the bottom.&lt;/p&gt;
&lt;p&gt;This is example from a method profiler, in this case the one in the Health Center. One method is clearly using more CPU than the rest, and so it’s coloured red. In this case, 60% of the time the JVM checked what the application was doing, it was executing the FireworkParticle.animate() method. This is what’s shown by the left-hand ‘Self’ column. The ‘Tree’ column on the right shows how much time the application spent in both the animate() method and its descendants. Some profilers call this column ‘descendants’ instead. Usually the Self figures are more useful for optimising an application.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 400px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/c3a3cc100b0382e408eadce36e40709e/e17e5/healthcenterprofile.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 42.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsTAAALEwEAmpwYAAABoklEQVR42nWS3XKbMBCFef/LXvQJOpN36LTpC6SZOAaMJAuQBAiJH9vYsZ3enK5kT9ObXHyjowV2zy6bfPn2jK8PT3jNtyhrhW2lICt9R/2H/pSSqLVBISQSLgQFayhj0DsH7z38MMDdtSNC/HM8Omth6HshFZI8z6C1Qtd3MF0Tz65r0TgbaSnmR4+B8KOL+h+Di3HTGHDBkeYFkiy7JTS2xcuP71DPv+H2O6wff2Hz+BMZ52CMoWAFxFZAUEcsxDiLSQJKqWgiLwSSqq4wTiOW00L2Nd4vZ7xdz+gkx1xKVFRMSpov6bIqsSWtKDaMAzm8OT8sB1yub2CiRKK1xrybsRwPGPcTPbjguCyYDzucSLdtQ23TCOgMLgLhbsNo7I2G7s71WK1zJDXZHeeJquxjtZAwuA0OFqospYwEdzV1I8lpwFIi71106eicqMt0w0LCKl5OlGTeTXj/c416nIaYWMowNx5b7ekn9X2gi1h7cxzevZyPKDitTUk7VusGlTJUWdEufuwgo716TTdEHlmts7vexPaCfqFYmrP47ipl+As9/pFcJVTixAAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;healthcenterprofile&quot;
        title=&quot;&quot;
        src=&quot;/static/c3a3cc100b0382e408eadce36e40709e/e17e5/healthcenterprofile.png&quot;
        srcset=&quot;/static/c3a3cc100b0382e408eadce36e40709e/772e8/healthcenterprofile.png 200w,
/static/c3a3cc100b0382e408eadce36e40709e/e17e5/healthcenterprofile.png 400w&quot;
        sizes=&quot;(max-width: 400px) 100vw, 400px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;What makes a method appear near the top of a method profile? It’s taking up a lot of CPU time, but why? There are two reasons; either the method is being called too often, or the method is doing too much work when it’s called. Sometimes it happens that a method really is doing the right amount of work the right number of times, but this is usually only the case after a fair amount of work. In their natural state, most programs can - and should - contain inefficiencies. (Remember that &lt;a href=&quot;https://web.archive.org/web/20120321090428/http://fresh.homeunix.net/~luke/misc/knuth-turingaward.pdf&quot;&gt;premature optimisation is the root of all evil&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;Some profilers can distinguish between a method which is called several times, and one which is called once and then spends a long time executing, but many cannot. The reason is that some profilers operate by &lt;em&gt;tracing&lt;/em&gt; - that is, recording every entry and exit of a method. This gives very precise information, but usually carries a fairly heavy performance cost. The IBM JVM can be &lt;a href=&quot;https://web.archive.org/web/20151030183221/http://www.ibm.com/developerworks/java/library/j-ibmjava5/&quot;&gt;configured with launch parameters&lt;/a&gt; to count or time method executions, but it’s only advisable to do this for a restricted subset of methods. An alternate method of collecting profiling information is to &lt;em&gt;sample&lt;/em&gt; - that is, check periodically what method is executing. This is much less expensive but doesn’t give as much detail as tracing profilers. The Health Center uses method sampling already built into the JVM to allow profiling with extremely low overhead.&lt;/p&gt;
&lt;p&gt;Often it will be obvious when inspecting a hot method if it’s being called frequently or is slow to run. Code with loops, particularly nested loops, is probably expensive to run. Code which doesn’t seem to do much but which is at the top of a profile is probably being called a lot. This leads neatly to the next steps in optimization: eliminate loops and do less work inside loops for expensive methods, and call inexpensive method less frequently.&lt;/p&gt;
&lt;p&gt;How do you go about making sure a method is called less? Method profilers which also record stack traces can make calling method less pretty easy. For example, this is the output of the Health Center, showing where calls to one of the top methods in the profile have come from:&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 400px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/6e9856dd914caab52018526fb45fbddf/e17e5/healthcenterinvocationpaths.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 37%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAAAsTAAALEwEAmpwYAAAA9ElEQVR42pWQb2+DIByE/f6fbtZ0VVuVgpqqQP1XpM5yQ8yWLNm67cUTfjnguMPz9684xCHCOEJ0jLDbB3gJfPjBDvExdtoKKxjyMv+RdT+jBB7JCyS0wJmmIDRzsIKC5mc7E1w7CaVvuM/TU+Y3jX5o4Q1jj5J31pShKKmFgTICLhro+2RRMHgAv2Kg1Aivs66DUqiEQMNrcNlAtgJd37pXl2V2FwyWp6xnbh+GtJIITymy7ITEkpIEQnKbsnYJ/2U4jgMexqBXEyb7V6uotbKz2uqa5Q91t8rO8FJfIK7C1uQW6RCt+Fz5mvQLzTfaRtVUeAeg6hY8flixpwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;healthcenterinvocationpaths&quot;
        title=&quot;&quot;
        src=&quot;/static/6e9856dd914caab52018526fb45fbddf/e17e5/healthcenterinvocationpaths.png&quot;
        srcset=&quot;/static/6e9856dd914caab52018526fb45fbddf/772e8/healthcenterinvocationpaths.png 200w,
/static/6e9856dd914caab52018526fb45fbddf/e17e5/healthcenterinvocationpaths.png 400w&quot;
        sizes=&quot;(max-width: 400px) 100vw, 400px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;In this case, 98% of the time the &lt;code class=&quot;language-text&quot;&gt;doSomeWork()&lt;/code&gt; method was sampled, it was &lt;code class=&quot;language-text&quot;&gt;animate()&lt;/code&gt; that called it. 2% of the time, it was &lt;code class=&quot;language-text&quot;&gt;draw()&lt;/code&gt; that called it. In this case, the next step is to inspect the &lt;code class=&quot;language-text&quot;&gt;animate()&lt;/code&gt; method and see why it’s calling &lt;code class=&quot;language-text&quot;&gt;doSomeWork()&lt;/code&gt;. Often, at least in the first passes of optimisation, most of the calls to the top method are totally unnecessary and can be trivially eliminated.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[How do you solve a performance problem?]]></title><description><![CDATA[I was talking to a friend today about a performance problem he was seeing, and he explained that he wasn’t entirely sure how to fix it…]]></description><link>http://hollycummins.com/how-do-you-solve-performance-problem/</link><guid isPermaLink="false">http://hollycummins.com/how-do-you-solve-performance-problem/</guid><pubDate>Mon, 11 May 2009 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I was talking to a friend today about a performance problem he was seeing, and he explained that he wasn’t entirely sure how to fix it. Performance tuning can be very skilled, but the basic principles are straightforward and should be accessible to every Java developer.&lt;/p&gt;
&lt;p&gt;This is the methodology I recommend.&lt;/p&gt;
&lt;p&gt;All performance problems are caused by a limited resource. Your job as a performance analyst (or developer who’s suddenly required to be a performance analyst) is to identify what resource is limited - what’s the bottleneck for this application? Often after fixing the first bottleneck, a second bottleneck will become apparent - the process of performance tuning is the process of eliminating bottlenecks, one by one, until the performance is good enough for you and your stakeholders.&lt;/p&gt;
&lt;p&gt;Computational resources fall into a few basic categories. Different people count them differently, but I like to think of four types of resource: the CPU, memory, I/O, and locks.&lt;/p&gt;
&lt;p&gt;A CPU-bound application can’t get enough processor time to complete its work. A memory-bound application needs more memory than is available. An I/O-bound application is trying to do I/O faster than the system can handle. Finally, a lock-bound application is being held up by the fact that multiple threads are contending on the same locks. ‘Lock-bound’ isn’t a terribly common term, but I think it’s really important to consider lock contention when analyzing performance problems. As systems become more and more parallel, synchronization are increasingly a limiting factor in the scalability of the system.&lt;/p&gt;
&lt;p&gt;So how do you identify which of these resources is the cause of the hold-up? Some heuristics can help as a first step. If the CPU is at or near 100%, the CPU is likely to be the culprit. If the CPU isn’t near 100%, it’s probably locking or I/O. The rule of thumb becomes a bit muddier when it comes to memory. Sometimes memory problems can show up as low CPU usage, because the system is waiting on a heap lock (which is properly locking) or physical memory access - paging in the worst case (technically, I/O). However, in a garbage collected system, excessive memory consumption will often manifest as lots of processing time being spent in the garbage collector (CPU).&lt;/p&gt;
&lt;p&gt;Tools can help turn these fairly fuzzy heuristics into a more precise diagnosis. There are lots of tools available, both free and not-free. My favourite tool is &lt;a href=&quot;https://www.ibm.com/support/pages/java-health-center-client-low-overhead-monitoring-tool&quot;&gt;IBM’s Health Center&lt;/a&gt;. This is probably because I’m the technical lead for the Health Center, so I think what it does is pretty sensible and cool. :) The Health Center is free, but it can only monitor IBM JVMs. I do think it’s one of the best ways to investigate garbage collection, locking, and collect method profiles from an IBM JVM.&lt;/p&gt;
&lt;p&gt;The Health Center tries to automate the process of identifying the root cause of a performance problem. The front page shows a dashboard with a bunch of status indicators. If one of them is red or orange, that’s a pretty good indicator of where to start tweaking the performance. The one area the Health Center doesn’t cover at the moment is I/O. It can identify garbage collection and locking bottlenecks pretty accurately, and the method profiler can identify the root cause of much excessive CPU usage.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 400px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/23fc60c39e6da2cc3940c038d9c77b71/e17e5/healthcenterfrontpage.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 68%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAAsTAAALEwEAmpwYAAACbUlEQVR42m1TSU/bYBDN/7/1UBVx6KEFsRy6IE6IoqqlbRKVAhcSL3Ec71vseCE4duLX+cbYHNpITzPzZeZ979MbD/YOvuD1u0u8enuJ/cMrnJwNcXI+xtHZCKcUj8/GOPw0wtHnEd5/GHJ+ej7Cwcdf2Dv8jv2ja7w5+IYfYwlXX39icHF9h+HdA3xbhqbJMBc6At9C4BF8G2Hg9Ii6nM5FHkcuolDUotfB/f0tBscXOob3FuI4hhcs4YcvsN0AC8OGYbmMhen0eVe7fsi90XKF3zd3GIB+u6aGT4Sul6LebsUR1lWBuTHHXNdhmAbDskyKC7pEZ2jzGdI0EQw88zBVMWioqHc1EVWMqq7ogi0abJGsYqxoIMtWyPIV8iJliDzNWhSPOQtqCRWhkEbpIFhmpDCB5cTYECnqEp5rwyRVnSIBk5SarHjBsdw88eVMKD0TCkWt7BZd7QdeO2gZsB2Lc4NIbdvkM3HB4zr/l1AorHcV/yHktw07BEQohloyoyfvFC7jiPu7J086wrqp4JFLlk1O+ytyN0FKtW0tICsydFoldaZgpqlkhAZFlSmfMfIi+/+Tm2bX37bdtSrnuobJdMJEkixhKk2h0AUSRUmeUj1BGPq9y5MXQkGyeSYS8luXxZOCwEdAQ9EypOgxwihgZcKQisxrOpdbQqJsNrTYES1rgrIs+c+iTJFkEfI8ozVJsX4qetPEaxhcNz1hr3BL+xctU5h2QoMlNz1uCjj0OTkufQ2eC4dgmCYZ5PAqCXi+R/1rflm/h+psDoWgas+xg6aTIRokZYaprHJkyC3kriYoqgZNN3Dz5xZ/AQ9vEBrtTCdQAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;healthcenterfrontpage&quot;
        title=&quot;&quot;
        src=&quot;/static/23fc60c39e6da2cc3940c038d9c77b71/e17e5/healthcenterfrontpage.png&quot;
        srcset=&quot;/static/23fc60c39e6da2cc3940c038d9c77b71/772e8/healthcenterfrontpage.png 200w,
/static/23fc60c39e6da2cc3940c038d9c77b71/e17e5/healthcenterfrontpage.png 400w&quot;
        sizes=&quot;(max-width: 400px) 100vw, 400px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;So let’s say you’ve used the Health Center (or your tool of choice) and you’re seeing some red crosses. What next? In the Health Center, clicking on the link next to a red cross will bring up more information and more detailed recommendations about how to fix the problem. In later posts I’ll give a bit more background about how to go about fixing locking issues, memory issues, and CPU issues.&lt;/p&gt;
&lt;p&gt;Forward links:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/how-interpre-method-profile/&quot;&gt;How to interpret a method profile&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title><![CDATA[Garbage collection flavours]]></title><description><![CDATA[In my previous post, I described the basic garbage collection algorithms. Within these basic categories, there are many variants, or…]]></description><link>http://hollycummins.com/garbage-collection-flavours/</link><guid isPermaLink="false">http://hollycummins.com/garbage-collection-flavours/</guid><pubDate>Wed, 08 Oct 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In my previous post, I described the basic garbage collection algorithms. Within these basic categories, there are many variants, or flavours.&lt;/p&gt;
&lt;h2&gt;Generational collectors&lt;/h2&gt;
&lt;p&gt;Generational collectors exploit the observed properties that most objects tend to die young, and that young objects are more likely to reference old objects than the reverse. Together these are known as the weak generational hypothesis.&lt;/p&gt;
&lt;p&gt;Generational collectors divide the heap up into multiple generations. Young generations can be collected without collecting old generations. These partial collections are quicker than full heap collections, and are likely to produce a good return of free space relative to the area collected, since most objects die young. At least the younger generations tend to employ copying collectors, since these collectors are very efficient in heaps with high attrition rates.&lt;/p&gt;
&lt;p&gt;Objects which survive a given number of collections are tenured and move up to an older generation. In order to avoid collecting objects in younger generations which are referenced by older generations, a remembered set is maintained of references from old generations to young generations. A write barrier between the generations is used to catch changes to these references.&lt;/p&gt;
&lt;h2&gt;Incremental collection&lt;/h2&gt;
&lt;p&gt;Incremental collectors allow single collections to be divided into smaller collections. This allows pause times to be limited. Incremental techniques almost always require one of a write barrier or a read barrier to prevent changes to the object connectivity graph mid-way through a collection causing the reachability results to be incorrect.&lt;/p&gt;
&lt;h2&gt;Concurrent collection&lt;/h2&gt;
&lt;p&gt;A concurrent collector is one which can execute concurrently with a mutator thread. Even on moderately multi-processor systems, it usually does not make sense to dedicate an entire processor to running garbage collection. Therefore the typical concurrent collection is perhaps more accurately described as a highly incremental collection; each thread is assigned small units of garbage collection work to do along with its application work, so the garbage collection work is finely interleaved with application work. One way of thinking of this garbage collection work is as a ‘tax’ - threads have to do some garbage collection work in exchange for being able to allocate. As with incremental techniques, concurrent collections need a write- or read-barrier.&lt;/p&gt;
&lt;h2&gt;Parallel collection&lt;/h2&gt;
&lt;p&gt;A parallel collector is one which divides the collection work so that multiple collector threads are collecting concurrently. This is counter-productive on single-threaded processors, but increasingly necessary as the number of processors in a system increases. On systems with many processors a single-threaded collector is unable to keep up with the amount of garbage the processors can produce.&lt;/p&gt;
&lt;p&gt;Similar techniques are used to achieve incrementality, concurrency, and parallelism, so many collectors which have one of these properties also have some of the others.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Garbage collection algorithms]]></title><description><![CDATA[Garbage collection has been the subject of much academic research . In particular, the volume of new techniques with various claimed…]]></description><link>http://hollycummins.com/garbage-collection-algorithms/</link><guid isPermaLink="false">http://hollycummins.com/garbage-collection-algorithms/</guid><pubDate>Tue, 07 Oct 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Garbage collection has been the subject of much academic research . In particular, the volume of new techniques with various claimed properties is high enough that it is tempting to coin the phrase &lt;a href=&quot;http://en.wikipedia.org/wiki/Another&quot;&gt;YAGA (Yet Another GC Algorithm)&lt;/a&gt;. For a pointer to many of these articles, see &lt;a href=&quot;http://www.cs.kent.ac.uk/people/staff/rej/gcbib/gcbibP.html&quot;&gt;Richard Jones’ garbage collection bibliography.&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Garbage collection algorithms&lt;/h2&gt;
&lt;p&gt;Despite the large number of variants, most garbage collection algorithms fall into a few simple categories.&lt;/p&gt;
&lt;h2&gt;Reference counting&lt;/h2&gt;
&lt;p&gt;Yes, reference counting is a form of garbage collection. It’s sometimes seen as an alternative to garbage collection, and sometimes even as a morally superior alternative to garbage collection, but really, it’s just a type of garbage collection algorithm.&lt;/p&gt;
&lt;p&gt;Reference counting garbage collectors track the number of references to each object. Often the count is maintained in and by the object itself. When a new reference to an object is added, the reference count is incremented. When a reference is removed, the count is decremented. When the count reaches zero, the object is destroyed and the memory released. Reference counting fails when objects reference one another in a cycle. In these cases each object will be seen to be referenced and will never be freed, even if nothing references the cyclic structure.&lt;/p&gt;
&lt;p&gt;Reference counting is unable to deal with cycles unless augmented with occasional invocations of another form of garbage collection. Reference counting has a number of other disadvantages, mostly to do with performance and bounding of work, and so it is rarely used in modern garbage collection systems. However, smart pointers in C++, while not traditionally considered a form of garbage collection, do make use of reference counting. Ad hoc garbage collectors introduced to manage object reachability in complex environments also tend to use reference counting since it is easily implemented in a hostile environment.&lt;/p&gt;
&lt;h2&gt;Tracing collectors&lt;/h2&gt;
&lt;p&gt;Most garbage collectors perform some sort of tracing to determine object liveness. Tracing does not have the same problem with collecting cycles as reference counting does. However, tracing collectors are more sensitive to changes in the object graph and usually require the suspension of the application threads or close monitoring of application activity to ensure correctness.&lt;/p&gt;
&lt;h3&gt;Mark-sweep&lt;/h3&gt;
&lt;p&gt;Mark-sweep collectors collect in two phases. In the first phase, all reachable objects are traced, begining from a set of roots. The roots are all objects which are guaranteed reachable, including objects referenced from the stack and static variables. Every object directly or indirectly reachable from a root is marked. Objects which do not end up marked are unreachable and therefore cannot be used again by the application, so they may safely be freed.&lt;/p&gt;
&lt;p&gt;In the second phase of a mark-sweep collection, all unmarked objects are added to a free-list. Contiguous areas of free memory are merged on the free list.&lt;/p&gt;
&lt;h3&gt;Mark-compact collectors&lt;/h3&gt;
&lt;p&gt;Mark-compact mark live objects using identical techniques to those used by mark-sweep collectors. However, mark-compact collectors do not use a free list. Instead, in the second phase all reachable objects are moved so that they are stored as compactly as possible. New allocation is then performed from the empty area of the heap.&lt;/p&gt;
&lt;p&gt;Many collectors hybridise these two approaches, combining frequent sweeping with occasional compaction.&lt;/p&gt;
&lt;h3&gt;Copying collectors&lt;/h3&gt;
&lt;p&gt;Copying collectors divide the heap into two areas, a to-space and from-space. All objects are allocated in the to-space. When the new space is full, a collection is performed and the spaces are swapped. All reachable objects in the to-space are copied to the from-space, which is declared the new to-space. New allocation is then performed in the new to-space.&lt;/p&gt;
&lt;p&gt;Copying collectors have a number of advantages over marking collectors.
Because copying is done in the same phase as tracing, it is not necessary to maintain a space-consuming list of which objects have been marked. Because no sweep is performed, the cost of the collection is proportional only to the amount of live data.&lt;/p&gt;
&lt;p&gt;If most objects are unreachable, a copying collecton can be very efficient. The corollary is that if most objects remain reachable, or if some very large objects remain reachable, the collection will be woefully inefficient, because a large amount of memory will need to be copied every collection.&lt;/p&gt;
&lt;p&gt;Copying collectors also keep the heap very compact, and this can boost allocation and application performance. However, because a completely empty from-space must be maintained at all times, copying collectors are not space-efficient. Modern collectors tend to estimate an object death-rate and maintain less than half the heap for the from-space accordingly. Copying collectors are also known as semispace collectors.&lt;/p&gt;
&lt;p&gt;For a good overview of how this relates to the IBM JVM’s garbage collection, see Mattias Persson’s &lt;a href=&quot;https://web.archive.org/web/20200616174904/http://www.ibm.com/developerworks/java/library/j-ibmjava2/&quot;&gt;developerWorks article&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Garbage collection myths]]></title><description><![CDATA[I’ve been lucky enough in my work to learn a fair bit about garbage collection. One of the things I’ve discovered is how many myths and half…]]></description><link>http://hollycummins.com/garbage-collection-myths/</link><guid isPermaLink="false">http://hollycummins.com/garbage-collection-myths/</guid><pubDate>Sun, 05 Oct 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been lucky enough in my work to learn a fair bit about garbage collection. One of the things I’ve discovered is how many myths and half-truths exist about garbage collection. Part of the reason these myths have sprung up is that garbage collection has some pretty paradoxical properties. The first myth is that garbage collection is only suitable for the incompetent, unskilled, or lazy. In fact garbage collection offers many architectural and software engineering advantages, even to the skilled developer. The second myth is that garbage collection is all about about collecting garbage. It seems obvious from the name, but it’s not true! Garbage collectors also include an allocation component, which, along with their powers of object rearrangement, can make a significant difference to application performance. Thirdly, criticisms of garbage collection often focus on the pause times, and responses to these criticisms often focus exclusively on reducing pause times, in the mistaken belief that small pause times guarantee good application response times. Pause times are also often used as a metric of general application performance, and an increase in pause times is taken as an indicator of worsened performance, when in fact the opposite the opposite is often true. Paradoxically, even the total amount of time spent paused for garbage collection is not a good predictor of the impact of garbage collection on application performance. Finally, the sixth myth is that garbage collection has a disastrous performance impact. While garbage collection can hurt application performance, it can also help application performance to the point where it exceeds the performance with manual memory management. I’ll go through each of these in detail in later posts.&lt;/p&gt;
&lt;p&gt;But, to start off with, what is garbage collection? Garbage collection is a system of automatic memory management. Memory which has been dynamically allocated but which is no longer in use is reclaimed for future re-use without intervention by the application. Garbage collection solves the otherwise difficult problem of determining object liveness by freeing memory only when it becomes unreachable.&lt;/p&gt;
&lt;p&gt;Garbage collection is pretty ubiquitous in modern languages. Garbage collected languages include Java, the .Net languages, Lisp, Python, Perl, PHP, Ruby, Smalltalk, ML, Self, Modula-3, and Eiffel. Some languages which are not traditionally garbage collected offer garbage collection as a pluggable or configurable extension. For example, collectors are available for C++, and Objective-C was recently extended to allow garbage collection. Understanding the garbage collector is an important part of performance tuning in these languages.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[IBM Monitoring and Diagnostic Tools for Java™ - Health Center™ is now available]]></title><description><![CDATA[I’m part of a team in IBM’s Java Technology Centre which develops diagnostic tools, and we’ve just released a brand new tool. It’s called…]]></description><link>http://hollycummins.com/ibm-monitoring-and-diagnostic-tools-for/</link><guid isPermaLink="false">http://hollycummins.com/ibm-monitoring-and-diagnostic-tools-for/</guid><pubDate>Wed, 24 Sep 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I’m part of a team in IBM’s Java Technology Centre which develops diagnostic tools, and we’ve just released a brand new tool. It’s called IBM Monitoring and Diagnostic Tools for Java™ - Health Center™ and it’s available as an early access beta &lt;a href=&quot;https://www.ibm.com/support/pages/java-health-center-client-low-overhead-monitoring-tool&quot;&gt;download&lt;/a&gt; from developerWorks. We’re really excited about the diagnostic insights it can offer. It allows running JVMs to be observed, health-checked, and tuned. At the moment it gives insight into general system health, application activity, and garbage collection activity. There are visualizations and also recommendations, so you don’t have to be an expert to improve the performance of your application.&lt;/p&gt;
&lt;p&gt;One of the nice things about the Health Center is that it presents different kinds of information in one place. There’s a status page which shows at a glance what’s going well and what might need attention:&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 400px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/f5500e5c52efdbf2d76c464bee14d912/e17e5/frontpage.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 78.99999999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAACXBIWXMAAAsTAAALEwEAmpwYAAACjklEQVR42n2T2W7TQBSG/eJwgZDgCorUAvdIiKWltC+ARNU1FwWKmqaJ48ROvMXxGm8ztn/OjN3QCtpIv8bn5Pjz2UZ59v47Hr07xGPSxvYhXn0+wNbuMV7vn+Ht/ine7J1ic/cEW19PsLl3hhc75KP/hH/jyymefOjh6ccenn86w8vtIyj982MML3uYD3tQBxfQLn9iYQwR2RpCa4zA0qRCq7UjW/hahfScOGPEjjg1LOdDKN96fewcjXCpGvBcE65jYUFybbOV08k27/rsu7ItE+PRAIoXJSiqBjlnyFmOvMxR8hKsYlIlv6WqU2eztV2iair4YQAlWcUAGnKU8AIHrmujJLDwATUKVpJdoKrppaoEFxIAAtFbMqZpuIyPkwhKtAby7sscjCRBZNcNg0MtGGsqpvoExsyAbkwxmU7kmaYJxbTAKCZg3AEZZeAEMQw7hrmIMXcjWF5C2aRQ1SEG1wOCjqGO1U4jCV363v+BNfVA9q/MZCltORWVyJHlKeqay5iqZuRj8mzIbv0dMLkFrOgP1/MQBJ60b4A5lS7K513/mBgYL+Rz++H6PiCDu7CQZiv5grBFw7OyoAwzOSgxnPZsn0XGAvoA0IHjuvCWLpWfSn9GbciKfJ2ZhNIpbAG6B0hmU9DYA5jLDKu8lNkJrcoYYeLLhosVi+KQYmu0v+b+DGuash9GsP1ErsvNjqUsgWHqckX0mY7ZvF0bcfrU73+AySppv0VDWaUZZZMTvOoyFOtUwHYtzAhm05UzrTksu5W7sOWk21hQhTEUP4ro+nA5zYpA4gqJ5b4Rq4SvBidVnfgtlfIS0CrVNVUYQrn6/QP9i3MMr35B14ZSxuSvdO36Qa1jp7Tooz7+ABRuulCzgz6qAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Health Center front page&quot;
        title=&quot;&quot;
        src=&quot;/static/f5500e5c52efdbf2d76c464bee14d912/e17e5/frontpage.png&quot;
        srcset=&quot;/static/f5500e5c52efdbf2d76c464bee14d912/772e8/frontpage.png 200w,
/static/f5500e5c52efdbf2d76c464bee14d912/e17e5/frontpage.png 400w&quot;
        sizes=&quot;(max-width: 400px) 100vw, 400px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
Garbage collection is one of the first and easiest things to check when tuning an application. Sometimes garbage collection can benefit from a bit of tuning, and sometimes looking at what the garbage collection is doing can highlight application problems. Is your application using more memory than seems reasonable? Is it leaking memory? The Health Center will suggest a command line, diagnose when garbage collection is causing performance problems, and point out memory leaks:&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 400px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/e7245d806b45521abd8c295ea1ec286f/e17e5/gc.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 86%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAARCAYAAADdRIy+AAAACXBIWXMAAAsTAAALEwEAmpwYAAADVElEQVR42mVTS4/URhj0/78RTpESIS5RFEJyC0gBcohIhAKzYrO7s+Pxc2y3p9vt93M8j0q1lyAkDqXu9qO+qvq+tr799U88/uUtvnn+Fo+e/4XvX6zw7M0KP71+wM+f9j++WuGH3z9wf4VnPD95ucJ3L64+48nLKzz97R0sd30N++YfZOEd8shGq3yUqYtcuCiEhyIluK+lj0YGPJt3Hqq9h0YFaLMHdDqATrawXq8c/HEdQWUKksi0QpImEGkMnWcQKkWa7aEKhbKQUDKBVHvk/Lbk8ypLF9S5RBK4sAQfzvMI4IRpnnE6n3A8H9EPPeq+QdYRbYt9XUOXJfq+xXw8oCs0RinQk3zYJxi4VjxbsdTIqgH7nB/OPS6XGcfTjKopIWWOqurRdgO6dkBNVHWFbmhQkmCqS4xtjbGpMHU1iiIj4V6iH/tF1ThPVDjjTLXGsu0LhFUN0VaIWSAiCu51znhCH+M0YOA/w2Fc1oVQZhLny5GWz7R8WAhPJK/qArHIWGzCeJzQjCN0fUBLRTUV5jfXmEWMmWLmvsOha1FqaQgVjvzBVBunkeTM8HTAwHNZGjUaMbMJ94KrZAQ5Zhatoh20vYHcBZCBhzwOoenKikWCoiqXyiXtnKh2JmHHhhjimjYVO63ZvJpkfc/MxhYTRZjvFVUZNEuGCpbS7NI00/KFGfY0Pi9EoXePKHAgE5+VQ2QiWCBjD4qr4vPs0zvNs0Hg3MKK0j0rDWwKieZh6bBpjk8bvu9iR0sx7UiZ0kWFjN3VnNWaGZuzQcMu93Sk6cTaOC6CXQg/DBCaPDhT8c7H/WaNrePA80jKvEzG02HCLo6QMKambZbMh3FYMPJdzotgbe01bMKocd0tYSOTEXxvC5OvuUFKSd4OyR800lSQrF4K9EP3AHbZkGrTZcfZwCNZIiIqCREnvIYqQUSVEdUY1UFo4DP0HEVZLCQDx+VLTJzFnPNp3d3+S2s2Uo6FgeJcat7N+/UNNhsbd+s1iWMWijnsYrHbcubM1fwSA+2bbC3fdxYVD4QJct7Rps4ZvlhGwYxNy7Vh+GZvxul0PnyFC45sTg7r44d3uHr/NzZ317i//QjXvkXk24jDLVKOSBr9D3c5C65J6HwFsWNznTX+A+dX8a0BfhF4AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;GC&quot;
        title=&quot;&quot;
        src=&quot;/static/e7245d806b45521abd8c295ea1ec286f/e17e5/gc.png&quot;
        srcset=&quot;/static/e7245d806b45521abd8c295ea1ec286f/772e8/gc.png 200w,
/static/e7245d806b45521abd8c295ea1ec286f/e17e5/gc.png 400w&quot;
        sizes=&quot;(max-width: 400px) 100vw, 400px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
Synchronization can be a big performance bottleneck for applications on multi-CPU systems, and it can be difficult to identify hot locks or even assess the impact of locking. The Health Center has always-on lock monitoring which identifies the objects which are most contended and provides guidance about whether synchronization is hurting performance:&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 400px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/991f5d09dd01585ff73413cb64da81a1/e17e5/locking.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 88.99999999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAACXBIWXMAAAsTAAALEwEAmpwYAAADh0lEQVR42lVTyY4jRRSsL51PgQuDhMSlJcR6HDhAIxqGM0KCmZ5uepppj5faV5drde22q7wGkemmpTmEXzorM168yPeU5z/8hY9eXOPj768ZX+Ozyzt88/IWX/76hrjB1zLe4ourW1z8wsj1V7/d8Nw/+OTHOzx/xKc/3eHzy2sovjmBMXqFQHuHyJqiSRxUsYs2D9EtQ8Y56tRDnXhoHmNFtFy3mY+OaDNPxiKyofzx1sSfDw6KPEKRxRLR3IWpvoeujuFaGrKFj2UcSBTJ/AOc9+dIQxu+NYMSpAmazQYnHLEaBuwOewzbAUm8QLlMUFc5NquGqNHWS+6lqIoMdZk/fVt3Nfp1y70MSlbkaNsKLTeH3QDggMNhh57kbdegbApUdYl1v5IxmPsIF3NETJgvSdxU6EjWrkhYF4KwoKINdvuBhFsqPWB/3DHrGmo0xe/2S/rIhFTYUU3KipIklhAJszyViQR5QeVKmmdSEUglCI8nKjztUBcV1HiGn41LVGmJJcsryiXiJEKaJRJCnSCKSS6IC9qgiJ/jaS+xFYSiZCpsqwZqMsWVdcXXbpGXqVQgCMXljIQNFS5pWZLGkriUHnKxYilCdrPq5OMIwqqooScavtW+wyJjCzX0sypJlGLJO4JU+C5UCzJBXAqFgnA9nL07HHpGKt1vMfQ9IvbhszfPcDG5gJc6CLMAizh8LDlmApIVqVSY8P+SHaAI5n7opYf7w5aRCg8H+cr9do1RMcKkHMOodQSdj6avkLKduk2DfrfGZlhR0EquOypWojhCTS+EqpUkGdC07K0Ny6evp+MRRyY47ukzz+x3PQYS7NgZYv0EdknDPlVMfQrD0KHrKmbTMSzLQODoMKb30GdjrlUkofOENHQ5OR7ShSvX/yPyTXjmFIquzaASjmfT2AzbbY+GLaKN72Fp76GO/4Wtj+HbqoTLS2fMmIDkkS8T5IxzClEsS4dpkd1zEQTeeRICW45VzGmYUnUYzmlDxbYRU1WzqSO4riOrcRwLNu9rrFDn/CumqcF2bNg2N6lUrH1mEmMURguousYXTGn+RvadmPOiLJg4kGctwjBNGCRVJw9nQkd8YDZB6vkuYvoTsxyfNpj6jIpZWrpAHM2RZxGi0Idr87wQQxgUMhnR8ykJ729f4e3N39Am7yTEpmvwoRhteihgqSOYs4cPoth3tPEZujg3knf+A5MJKK9sXz4bAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;locking&quot;
        title=&quot;&quot;
        src=&quot;/static/991f5d09dd01585ff73413cb64da81a1/e17e5/locking.png&quot;
        srcset=&quot;/static/991f5d09dd01585ff73413cb64da81a1/772e8/locking.png 200w,
/static/991f5d09dd01585ff73413cb64da81a1/e17e5/locking.png 400w&quot;
        sizes=&quot;(max-width: 400px) 100vw, 400px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;
Last, but not least, the Health Center includes a nice sampling method profiler. This can be really valuable in diagnosing applications which are using high CPU. Because it’s low overhead, there’s no need to specify in advance which parts of the application should be profiled. It works without recompilation or byte code instrumentation. It shows where the application is spending its time and gives full call stacks for all sampled methods. Because of the call stacks, this kind of profiling isn’t just for performance problems - sometimes it can give surprising functional insight:&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 400px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 89.99999999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAACXBIWXMAAAsTAAALEwEAmpwYAAADbElEQVR42n1UWXPTVhjVP6dPbYenPnSmpe0j8NLMtJQOBAJJnOCGJNCExFusfbMWa7XlSJZsnX7fVYC2D2jmzLlXls8933I/6dvHPdx7dIKvHr7BvYd93N85xy9/nuOnp6d48PQMPxP/+Mcpfnhyiu9/5/UZHtCev/v613f4hsB8f+cdvtvpQ7KVIczp31CHZ/D0CTJfQ+zpiGYaEk9DGprIGEHHaWAgIeThZywYcxOhI0NyLA1B4CL0LcThDPHchecYMBwLlq3D1KZwTZmg0HsN4cxA6OoIGLQWcOmdZ0K9GUDySeC2XKHFBlVdYbNtsG0bGAd7MPtHMAwZmjzCZHQFZTqCbaqwDIUg34HWugybWL25hpQvYiEAbIUYC9MK9m+PUVxfoGpbFEWBJE3hhwFsx8HM8+AyZjMBx3XptxDqlByGUYTFbYWsKNE0JQlvsNmU2Om9xZNTBad/7eOkv4/j3ksc7j/H/qtngg9eP8MBrZkPXz9H72AXl+dHkJIsQVHVJFqSw3UnSDxyU4ztCJo6gUyhTsbXGA4uMSDX11fMl5/2Hy7fYzS8wuDiLaQompMjFmqxbmoRLguuljFlocFiuezCDXxomgZZUaCoCnTDgKbrVDgbURxR2lrY+pRymKcih60Q+shrZFmMsipJLEE4DylXLlRNhSzLUBRZrBksrhH7vt8VJYl94YpDFQ5bKsqWUkAHlesK+SIXon7gkRtqJcuCYRqIkxhplgpmh/N5BHn8AdJikaB7WiHWOSTBRYp1vUZ655BDG49HGI6GGAwHwqVBYTPLylRUWziMowCrVUG5yrEkbtkv5ZRzuyw4fzG5IAe0Z4emaQqHBrFNh/A+pHbi/yvyGBLnih1V9S3qZi36sdnUXeLplih0+mQyxGhwgSlVWldvYBB0ZSLAa00Z42ZEFb96DylNAtyuaxFyWRfYtDVavil0smXRvY1DgSh0kfO3y5Q6IPmMRYdyldO1NNlhhKrpqltvK/YnBNM8g+WFlGwfxWqJLz7UMvxwIaWIEs4OxZUjwY9FOTs5xN6rF+gfvcTx4S7xC7zp7X4RJ8d7VJR4jlW1Fr243XbcbCpE8xmyPMaS7jp3QpbO/4P0f8jpW49Ddmgs8Qji0eQ5+h1rYjzxqPLdbjx9GlX0JzHCZv9+140vx5TxD4J/Jwkhm9rLAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;profile&quot;
        title=&quot;&quot;
        src=&quot;/static/2d567ec748eb6e4ad6dda3622e2640a3/e17e5/profile.png&quot;
        srcset=&quot;/static/2d567ec748eb6e4ad6dda3622e2640a3/772e8/profile.png 200w,
/static/2d567ec748eb6e4ad6dda3622e2640a3/e17e5/profile.png 400w&quot;
        sizes=&quot;(max-width: 400px) 100vw, 400px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;
The way the Health Center is able to get so much information without much overhead is that it’s closely linked to the JVM, so there are minimum system requirements. The absolute minimum requirement is an IBM JVM, version 5.0 or higher. This will give locking information and some GC information. To get profiling Java 5 SR8 or Java 6 SR1 is required. The fullest GC information is available in Java 6 service refresh 2. IBM JVMs can be downloaded from &lt;a href=&quot;https://www.ibm.com/support/pages/java-sdk&quot;&gt;developerWorks&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Java Performance Tooling]]></title><description><![CDATA[The right tooling is essential part of any Java performance tuning effort. Tuning relies on accurate diagnoses of bottlenecks; tools allow…]]></description><link>http://hollycummins.com/java-performance-tooling-theserverside-java-symposium-europe/</link><guid isPermaLink="false">http://hollycummins.com/java-performance-tooling-theserverside-java-symposium-europe/</guid><pubDate>Wed, 18 Jun 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The right tooling is essential part of any Java performance tuning effort. Tuning relies on accurate diagnoses of bottlenecks; tools allow problem areas to be identified quickly. In some cases tools will even suggest solutions.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Java Performance Tooling]]></title><description><![CDATA[The right tooling is essential part of any Java performance tuning effort. Tuning relies on accurate diagnoses of bottlenecks; tools allow…]]></description><link>http://hollycummins.com/java-performance-tooling-great-indian-developer-summit/</link><guid isPermaLink="false">http://hollycummins.com/java-performance-tooling-great-indian-developer-summit/</guid><pubDate>Wed, 21 May 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The right tooling is essential part of any Java performance tuning effort. Tuning relies on accurate diagnoses of bottlenecks; tools allow problem areas to be identified quickly. In some cases tools will even suggest solutions.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Java Performance Tooling]]></title><description><![CDATA[The right tooling is essential part of any Java performance tuning effort. Tuning relies on accurate diagnoses of bottlenecks; tools allow…]]></description><link>http://hollycummins.com/java-performance-tooling-theserverside-java-symposium/</link><guid isPermaLink="false">http://hollycummins.com/java-performance-tooling-theserverside-java-symposium/</guid><pubDate>Tue, 25 Mar 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The right tooling is essential part of any Java performance tuning effort. Tuning relies on accurate diagnoses of bottlenecks; tools allow problem areas to be identified quickly. In some cases tools will even suggest solutions.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Interpreting GC Pauses]]></title><description><![CDATA[I’ve just got back from speaking at JavaZone in Oslo. I’ll post links to the presentation videos when they’re available. The feedback on my…]]></description><link>http://hollycummins.com/interpreting-gc-pauses/</link><guid isPermaLink="false">http://hollycummins.com/interpreting-gc-pauses/</guid><pubDate>Sun, 16 Sep 2007 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I’ve just got back from speaking at JavaZone in Oslo. I’ll post links to the presentation videos when they’re available. The feedback on my presentation and on the Extensible Verbose Toolkit gc analysis tooling I demonstrated was really positive, which was nice.&lt;/p&gt;
&lt;p&gt;One of the main things I discussed in my talk is that care is required in interpreting garbage collection pauses. Even though pauses stop an application doing work, which is obviously bad, there’s not necessarily any correlation between shorter garbage collection pauses and better application performance. Sometimes shorter pauses give better performance, sometimes longer pauses give better performance. This is pretty uncontroversial if the quality of service requirement is better throughput. It’s a lot more contentious if response times are the critical performance metric. After my talk a few people told me about their applications, for which longer garbage collection pauses definitely meant longer response times and definitely mattered a lot. I certainly wasn’t going to tell them they were wrong, either! I think the number of cases where there’s a strong correlation between garbage collection pause times and response times - or, at least, maximum response times - is pretty high. What I was trying to get across is that there are also at least some cases where the gc pause times are only a small contributor to the maximum response times. It would be unfortunate to minimise pause times without ever checking back against response times if your application happened to be one of the ones where pause times aren’t so important.&lt;/p&gt;
&lt;p&gt;The whole subject of performance tuning is fascinating because there are so many different system configurations and so many different performance requirements that coming up with a single answer is impossible. Even coming up with a single coherent set of heuristics is pretty tricky.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Six Myths and Paradoxes of Garbage Collection - MSc Thesis]]></title><description><![CDATA[This dissertation was written in 2007, so in tech terms, it can be considered quaintly antique - back when it was written, there was still a…]]></description><link>http://hollycummins.com/six-myths-and-paradoxes-of-garbage/</link><guid isPermaLink="false">http://hollycummins.com/six-myths-and-paradoxes-of-garbage/</guid><pubDate>Tue, 17 Apr 2007 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This dissertation was written in 2007, so in tech terms, it can be considered quaintly antique - back when it was written, there was still a debate about whether garbage collection was a good idea. StackOverflow hadn’t been invented yet, and C++ was the language to beat.&lt;/p&gt;
&lt;p&gt;What’s the dissertation about? Well, this is the abstract:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Many myths and paradoxes surround garbage collection. The first myth is that garbage collection is only suitable for the incompetent, unskilled, or lazy. In fact garbage collection offers many architectural and software engineering advantages, even to the skilled developer. The second myth is that garbage collection is all about about collecting garbage. Garbage collectors also include an allocation component, which, along with their powers of object rearrangement, can make a significant difference to application performance. Thirdly, criticisms of garbage collection often focus on the pause times, and responses to these criticisms often focus exclusively on reducing pause times, in the mistaken belief that small pause times guarantee good application response times. Pause times are also often used as a metric of general application performance, and an increase in pause times is taken as an indicator of worsened performance, when in fact the opposite the opposite is often true. Paradoxically, even the total amount of time spent paused for garbage collection is not a good predictor of the impact of garbage collection on application performance. Finally, the sixth myth is that garbage collection has a disastrous performance impact. While garbage collection can hurt application performance, it can also help application performance to the point where it exceeds the performance with manual memory management.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Although some of the arguments it makes are no longer necessary, there’s a lot I still like about the paper. It’s got equations, it’s got queueing theory, it’s got dissections of usenet trolling about GC, it’s got diagrams, and - the best bit - photos of garbage bins. You can read the full 84 pages &lt;a href=&quot;/64e70dfa04a495ad424ac4968741ed28/hollycumminsmscdissertation.pdf&quot;&gt;here&lt;/a&gt;; it’s licensed under Creative Commons Non-Commercial Share Alike.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/64e70dfa04a495ad424ac4968741ed28/hollycumminsmscdissertation.pdf&quot;&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 142.00000000000003%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAcCAYAAABh2p9gAAAACXBIWXMAAAsTAAALEwEAmpwYAAABWElEQVR42u1Vy4qDQBDM//9TTA6CqImgh+QgHhSND0SjEl+J9lINs7CPJGaV3csODMPMOGV1V0/NihZuq39AbuM40jAMPKKLJtYmA4qPkyQhTdO4r9drOhwOpOs6GYbBa9vtlmRZpjAMP5x7yPB6vdLtdqO+73luWRY1TfO+h3UwnpzDruuYhaIozAosJUni+W63o6qqvrB7CIgP67qmy+VCeZ7zD8AQa+jfsXtJ5WdivAQowD6r/mNAiNO2LYuxCEPHcWi/35Nt2ww+CxCsVFXl2jNNk87n88OcTmLoui5tNhs6Ho/zGQo2CBsltLjKiwBOMYXJgADzPI983+dc4g7PVjmKInaW0+nE9TgLEKFCWeGR9+7w7zg28gNnKYqCsiyjIAgojmMeES5Cx4iO/bIsudDhPk8ZIjTUHXKGQ2maspML+7pX4JNChjDCwRd/9Raxrz99l98ASVeeP1kedCYAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;thesis&quot;
        title=&quot;&quot;
        src=&quot;/static/d75f55d0b07fb0e41d993a9c044f548a/5a190/titlepage.png&quot;
        srcset=&quot;/static/d75f55d0b07fb0e41d993a9c044f548a/772e8/titlepage.png 200w,
/static/d75f55d0b07fb0e41d993a9c044f548a/e17e5/titlepage.png 400w,
/static/d75f55d0b07fb0e41d993a9c044f548a/5a190/titlepage.png 800w,
/static/d75f55d0b07fb0e41d993a9c044f548a/c1b63/titlepage.png 1200w,
/static/d75f55d0b07fb0e41d993a9c044f548a/35252/titlepage.png 1204w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded></item></channel></rss>