Posts by Benji Weber
I put together a piece on how I'm doing co-design with agents in some of my dev work at the moment, and how there's a very specific through line from XP and the sort of software design and intentionality I talk about often.
Trying to capture my working patterns.
davidwhitney.co.uk/blog/2026/03...
I love this insight from @icooper.bsky.social - that AI tools can do coding but not programming. ian-cooper.writeas.com/coding-is-de...
If coding is your favorite part of software engineering, keep coding. AI doesn't stop you. But if coding was the only part you were good at, that's a different conversation. The job was always bigger than the code. #bransoncognac blog.bryanl.dev/posts/ai-sen...
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.
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.