More brains are needed more than ever, with the rate the genies can churn out code. Typing was never the bottleneck and now it's just more extreme.
More brains are needed more than ever, with the rate the genies can churn out code. Typing was never the bottleneck and now it's just more extreme.
The “swarm of agents” model assumes work naturally splits into roles: marketing, sales, support, development = basically mirroring human job titles.
But those titles and siloes are a byproduct of org scaling, not a universal truth about work.
www.joanwestenberg.com/agentic-swa...
XP practices have never been more helpful than with all the speed that agents provide.
More brains, tighter feedback loops, quality & safety let us take full advantage of the speed.
Never has "uncovering better ways of developing software by doing it and helping others do it" felt more relevant.
Whenever the topic of OKRs comes up, I think about Drucker vs Deming. Not a particularly topical thing to write about, but I think it's evergreen.
surfingcomplexity.blog/2026/02/16/p...
It gets worse every week bsky.app/profile/benj...
Short musings on "cognitive debt" - I'm seeing this in my own work, where excessive unreviewed AI-generated code leads me to lose a firm mental model of what I've built, which then makes it harder to confidently make future decisions simonwillison.net/2026/Feb/15/...
We optimized for ultra individualistic velocity measures defining DevEx at EXACTLY the wrong time no wonder everyone is exhausted and scared
The continung computing cycle from thin to thick clients and back. Round and round.
Road with a cycle path and a horse path, with "Horse Lane Closed" on a sign.
#London things
New blog post on the high costs of coordination and the implications for large organizations: surfingcomplexity.blog/2026/01/24/b...
Ooh. Ollama just released Anthropic API impersonation, meaning you can set the endpoint to a local port and be off to the races! docs.ollama.com/integrations...
Shame that @intellijidea.com can't complete this refactoring itself.
Not ideal that the refactoring takes compiling code and creates code that fails to compile. #java
Bird of prey against a mountain backdrop
Trying to identify this bird. LLMs like insisting it's various varieties of Californian bird but this is taken in Scotland. White Tailed Eagle? Buzzard? Osprey?
Road with snow
It was at this moment I realised that slick tyres may not have been the optimal choice this morning #cycling
Otter on a rock off a snowy stony beach
Sea otter
Robin with outstretched wings on frosty ground.
Frost on berrys
Frost on holly
Robin perched in stone above frosty ground
It's not bad out
And we're back. Again! Happy Holiday Trek 2025. 🎄🖖🏻🎄 #HolidayCombs
www.youtube.com/watch?v=26H_...
I wrote a post about why I don't like the name that Amazon uses for their post-incident review process: "Correction of Error". surfingcomplexity.blog/2025/12/20/w...
Cars are much safer now, except in the US www.cdc.gov/mmwr/volumes...
I want to see daylight again, Gandalf, daylight.
Intellij options When the current tab is closed, activate: [ * The tab on the left , ( ) the tab on the right, ( ) Most recently opened tab ]
Discovered there's a setting to change #intellij 's default infuriating behaviour of opening seemingly random tab when you drag/split editor views.
I really wonder why "Most recently opened tab" is not the default.
public record MyTestData(String name, Integer age) {} static class MyTestDataValues implements SourceOf<MyTestData> { public List<MyTestData> values() { return List.of( new MyTestData("foo", 5), new MyTestData("bar", 10) ); } } @ParameterizedTest(name="{0} - {1}") @ArgumentsSource(MyTestDataValues.class) public void exampleTest(String name, Integer age) { System.out.println(name + " " + age); assertEquals(0, age % 5); assertEquals(3, name.length()); }
public interface SourceOf<T extends Record> extends ArgumentsProvider { List<T> values(); default Stream<? extends Arguments> provideArguments(ExtensionContext context) { return values().stream().map( v -> Arrays.stream(v.getClass().getRecordComponents()) .map(rc -> { try { return rc.getAccessor().invoke(v); } catch (Exception e) { throw new RuntimeException(e); } }) .toArray() ).map(Arguments::of); } }
I like parameterised tests but find #junit 's EnumSource/MethodSource etc dissatisfying.
Here's how you can parameterize tests with #java records
gist.github.com/benjiman/e9f...
Today I'm grumpy at Chrome putting "split view" where open in new window has been in every browser, building muscle memory for decades…for a feature that everyone's window manager already has.
And here’s an excellent post on how to apply them (most of this is not Ruby-specific):
obie.medium.com/ruby-was-rea...
Hilarious and terrifying: jailbreak LLMs using poetry
"These findings demonstrate that stylistic variation alone can circumvent contemporary safety mechanisms, suggesting fundamental limitations in current alignment methods and evaluation protocols."
arxiv.org/html/2511.15...
Tank next to pret a manger kings cross
Tank next to pret a manger kings cross
SUVs in London are really getting out of hand.
The most common things engineering leaders think will make dev teams go faster actually have the opposite effect.
codemanship.wordpress.com/2025/11/13/t...
Microsoft: Operation failed, X is unlicensed, good luck figuring out what licence you need, (won't be called X).
Google: Operation failed, you've hit a hard quota, good luck contacting a human to fix.
Amazon: Everything worked, but good luck figuring out why you're paying 10x what you expected.