Advertisement · 728 × 90

Posts by Benji Weber

When moving fast, talking is the first thing to break When you make speed and “moving fast” the biggest priority on a project or in an organization, the first thing to breakdown is talking to each other. Talking takes time. Consensus is expensive and slo...

📝 When moving fast, talking is the first thing to break

daverupert.com/2026/04/more...

19 hours ago 31 10 6 1
The Programmers's Guide to Co-Designing with Agents - david whitney, agile & software practices in london

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...

1 month ago 13 6 2 0
Preview
Coding Is Dead, Long Live Programming Summary In this post, we argue that the role of a coder now belongs to a coding agent, but that the distinct role of a programmer define...

I love this insight from @icooper.bsky.social - that AI tools can do coding but not programming. ian-cooper.writeas.com/coding-is-de...

1 month ago 12 6 3 1
Preview
AI Didn't Break the Senior Engineer Pipeline. It Showed That One Never Existed. Most organizations never had a model for developing engineers. They had an environment that produced growth by accident. AI just made the luck run out.

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...

1 month ago 113 29 7 11

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.

1 month ago 3 0 1 0
Preview
Agentic swarms are an org-chart delusion The "agentic swarm" vision of productivity is comfortingly familiar. Which should be an immediate red flag... You take the existing corporate hierarchy, you replace the bottom layers with a swarm of AI agents, and you keep humans around as supervisors. It's an org chart with robots instead of interns. The

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...

1 month ago 8 5 0 1

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.

1 month ago 1 2 0 0
Advertisement
Preview
Nobody knows what programming will look like in two years Kent Beck doesn't know what programming will look like in two years, and he's been thinking about this longer than most of us.

Excellent article (more reminders from history)

1 month ago 6 2 1 0
Preview
Poor Deming never stood a chance This post is an elaboration of a shorter post I wrote about five years ago. The two management giants of the mid-twentieth century were Peter Drucker and W. Edwards Deming. Ironically, while Drucke…

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...

1 month ago 27 9 0 2

It gets worse every week bsky.app/profile/benj...

1 month ago 1 0 0 0
How Generative and Agentic AI Shift Concern from Technical Debt to Cognitive Debt This piece by Margaret-Anne Storey is the best explanation of the term cognitive debt I've seen so far. Cognitive debt, a term gaining traction recently, instead communicates the notion that …

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/...

1 month ago 464 88 41 19

We optimized for ultra individualistic velocity measures defining DevEx at EXACTLY the wrong time no wonder everyone is exhausted and scared

2 months ago 18 2 1 0

The continung computing cycle from thin to thick clients and back. Round and round.

2 months ago 0 0 0 1
Road with a cycle path and a horse path, with "Horse Lane Closed" on a sign.

Road with a cycle path and a horse path, with "Horse Lane Closed" on a sign.

#London things

2 months ago 1 0 0 0
Preview
Because coordination is expensive If you’ve ever worked at a larger organization, stop me if you’ve heard (or asked!) any of these questions: “Why do we move so slowly as an organization? We need to figure out how…

New blog post on the high costs of coordination and the implications for large organizations: surfingcomplexity.blog/2026/01/24/b...

2 months ago 14 7 1 0
Preview
Claude Code - Ollama

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...

2 months ago 109 11 4 2
Advertisement
Video

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

3 months ago 1 1 1 0
Bird of prey against a mountain backdrop

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?

3 months ago 1 1 1 0
Road with snow

Road with snow

It was at this moment I realised that slick tyres may not have been the optimal choice this morning #cycling

3 months ago 7 0 0 0
Otter on a rock off a snowy stony beach

Otter on a rock off a snowy stony beach

Sea otter

3 months ago 1 0 0 0
Robin with outstretched wings on frosty ground.

Robin with outstretched wings on frosty ground.

Frost on berrys

Frost on berrys

Frost on holly

Frost on holly

Robin perched in stone above frosty ground

Robin perched in stone above frosty ground

It's not bad out

3 months ago 2 0 0 0
Here Comes Jeffrey Combs
Here Comes Jeffrey Combs YouTube video by John C. Worsley

And we're back. Again! Happy Holiday Trek 2025. 🎄🖖🏻🎄 #HolidayCombs

www.youtube.com/watch?v=26H_...

3 months ago 15 10 3 1
Preview
Why I don’t like “Correction of Error” Like many companies, AWS has a defined process for reviewing incidents. They call their process Correction of Error. For example, there’s a page on Correction of Error in their Well-Architect…

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...

3 months ago 18 4 1 2

Cars are much safer now, except in the US www.cdc.gov/mmwr/volumes...

3 months ago 1 0 1 0
Advertisement

I want to see daylight again, Gandalf, daylight.

3 months ago 0 0 0 0
Intellij options When the current tab is closed, activate: [ * The tab on the left , ( ) the tab on the right, ( ) Most recently opened tab ]

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.

4 months ago 1 0 0 0
 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 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);
    }
  }

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...

4 months ago 4 2 0 0

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.

4 months ago 1 0 0 0
Preview
Ruby Was Ready From The Start Notes and expanded thoughts on eXtreme Programming, AI agents, and the soul of Ruby from my SF Ruby Conference Keynote 2025 talk

And here’s an excellent post on how to apply them (most of this is not Ruby-specific):
obie.medium.com/ruby-was-rea...

4 months ago 8 2 0 0
Adversarial Poetry as a Universal Single-Turn Jailbreak Mechanism in Large Language Models 1 Introduction

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...

4 months ago 3 4 2 0