A picture of me with my dog Tess next to me looking at me

Notes

Chrome's Breaking and Entering

Let’s not beat around the bush: This is effectively malware behaviour. It’s bullshit. It’s cancer. It’s deeply disrespectful toward the user. It’s prioritizing hollow metrics at the expense of everything else.

...

But, an app installing a global keyboard shortcut without user consent is bad. This can never be anything other than opt-in. At the very least, Chrome should have shown me a clear UI that said “We’re thinking Ctrl+G would be fun for you to use. You okay with that?” and a button for me to press to confirm.

Completely agree with everything Marcin is saying. And to me, it feels even worse since it doesn't feel like it's something that feels like we'd expect. When I installed Alfred and Raycast on my Mac, I installed them to get that launcher. I don't install a web browser for that. In either case, we shouldn't have apps be able to just steal global shortcuts without side kind of "hey, do you want this application to do X" What's next? Remapping Cmd+Z?


Why Good Architecture Still Fails in Production

Seniority, at least in architecture, often means noticing the missing question before the missing answer turns into an incident. The same logic applies to coupled systems. A component can behave well on its own and still create trouble once the rest of the system starts reacting to it.

Senior developers can see things newer developers might miss. That comes with having more experience both with the software being developed, and many years of experience, likely making the same mistakes or missing the same things being caught in review. But even with all the experience, so much goes into software, it's hard to catch everything. The best you can do is set systems up with a good foundation, so when things go wrong, you probably already know where to look to fix it.

The point is not documentation for its own sake though, but to make the system legible before production does the explanation instead.


Progressively Enhancing Grid Lanes

The more I think about it, the less sympathy I have for Grid Lanes. You create a DOM order that you think makes sense, then you mess it up with CSS. Then, if you're aware of the problem, you fix it again with CSS. Finally, you have a patched-up layout that may have created other issues you can't address.

I'm looking forward to Chrome's, Firefox's, and Safari's next moves. Until then, to sum it up, my slightly adjusted recommendations are:

  • Always test your Grid Lanes with the keyboard or a screen reader across different screen sizes.
  • If you find a mismatch between the DOM and the visual order, increase the flow-tolerance value. You may have to use a high value or even infinite.
  • As soon as it's available and supports Grid Lanes, try using reading-flow instead.
  • If that doesn't work, consider using a regular grid.

Some good thoughts and examples here to help with accessibility should you choose to use CSS Grid Lanes.


How to Measure Returns on AI

In the beginning there was ai, and bosses everywhere lost their minds and said you must all use this technology no matter whether it is useful and no matter how much it costs. And they introduced ai leaderboards and came up with stupid words like “tokenmaxxing”. And lo, usage did indeed rise. And then the bosses remembered some very basic concepts like “budgets” and realised that this might not be such a great idea after all. And then a different question rang through the boardrooms, and this question was about returns, and it was harder to answer.

Measuring productivity is almost always difficult. With AI it can be even more difficult as it can be hard to identify how any gains now can be countered by the potential for tech debt later. If AI generates code that someone else has to keep cleaning up later, how much is really gained?

From a software engineering perspective, if a company is going to use AI coding assistants, it should make sure the engineers are keeping tabs on the code generated and that the engineers are taking responsibility for any code they use AI to produce.


The Founding Story Behind Japan’s Oldest Whisky Maker

More than a century before Japanese whisky became one of the most coveted spirits in the world, a young merchant in Osaka had a simple observation: the wines and liquors being imported from Europe didn’t suit Japanese tastes. What he built from that insight—one product at a time, for the last 127 years and counting—is now one of the largest beverage companies on earth.

As a fan of whiskies of all kinds, it was an interesting story of Suntory's history.


You Got Faster. Your Company Didn’t.

By the way, it’s not just documents… I’m also seeing the same pattern in pull requests, automated tests, and even decisions. We’re going faster by passing the slow part (the reading, the actual understanding) to whoever comes next. A Ponzi scheme?

Don’t get me wrong: by all means, do use AI. I do too, and I’m (probably) not going back. The thing is: the model is giving you many hours back, so please spend a bit of them editing!

I already have a rule for AI-written code: if I can’t explain the change, I can’t ship it. The same rule applies here: if you can’t defend a sentence with the document done, it’s not really done, is it?

If you're going to use LLMs, the least you can do for those you work with is to fully review the output and ensure you understand it.


Enhancing with CSS Grid Lanes

CSS Grid Lanes has started to ship in browsers. It’s in Safari and behind a flag in Chrome and Edge.

It enables masonry layouts, where items get packed together in the most efficient way possible.

Unsurprisingly, I’m a fan of a layout tool where the browser does all the hard work. It very much aligns with the idea of declarative design; you specify the boundary conditions, and then browser does the maths and heavy lifting.

This is so awesome, I'd recommend checking Jeremy's full post out as well as the documentation.


The 40 Most Rage-Inducing Problems in Tech

Some of these are petty in just the right ways.

Since you don’t respect my opinion anyway, quit pestering me to fill out a survey after every single consumer experience. I keep wondering who looks at these surveys. Is the CEO sitting in his wood-paneled office, reading each individual response on an old-timey stock ticker? If so, you can keep doing this. If not, I rate this experience zero stars out of infinity.

Let's see how we can enshittify things further...

In conclusion: Stop forcing me to download a dang app to use my air fryer! I WOULD THROW MY PHONE INTO THE AIR FRYER OVER THIS IF I HAD ANY WAY TO TURN THE AIR FRYER ON AFTER IT WAS IN THERE.

I want dumb appliances, not everything needs to be internet connected.


AI Made Writing Code Easier. It Made Being an Engineer Harder

Here is something that gets lost in all the excitement about AI productivity: most software engineers became engineers because they love writing code.

Not managing code. Not reviewing code. Not supervising systems that produce code. Writing it. The act of thinking through a problem, designing a solution, and expressing it precisely in a language that makes a machine do exactly what you intended. That is what drew most of us to this profession. It is a creative act, a form of craftsmanship, and for many engineers, the most satisfying part of their day.

This times 1,000. In a team setting, code review is always part of the job, but something gets lost when thatS all your job becomes.

One engineer captured this shift perfectly in a widely shared essay, describing how AI transformed the engineering role from builder to reviewer. Every day felt like being a judge on an assembly line that never stops. You just keep stamping those pull requests. The production volume went up. The sense of craftsmanship went down.

This is not a minor adjustment. It is a fundamental shift in professional identity. Engineers who built their careers around deep technical skill are being asked to redefine what they do and who they are, essentially overnight, without any transition period, training, or acknowledgment that something significant was lost in the process.

Having led engineering teams for over two decades, I have seen technology shifts before. New frameworks, new languages, new methodologies. Engineers adapt. They always have. But this is different because it is not asking engineers to learn a new way of doing what they do. It is asking them to stop doing the thing that made them engineers in the first place and become something else entirely.

I want to create things, I want to build features and fix bugs. I want to see the code as my canvas. The code over my life has included multiple languages, the tooling has changed, but the general concepts haven't. Now all of a sudden, the primary job that I've done is being offloaded to an LLM. Time will tell what the final result becomes.

There is an irony at the center of the AI-assisted engineering workflow that nobody wants to talk about: reviewing AI-generated code is often harder than writing the code yourself.

When you write code, you carry the context of every decision in your head. You know why you chose this data structure, why you handled this edge case, why you structured the module this way. The code is an expression of your thinking, and reviewing it later is straightforward because the reasoning is already stored in your memory.

When AI writes code, you inherit the output without the reasoning. You see the code, but you do not see the decisions. You do not know what tradeoffs were made, what assumptions were baked in, what edge cases were considered or ignored. You are reviewing someone else’s work, except that someone is not a colleague you can ask questions. It is a statistical model that produces plausible-looking code without any understanding of your system’s specific constraints.

Again, this will only add cognitive debt to your application. Tech debt you at least often have the knowlege of why you built things the way you did. When no one wrote the code, you lose that knowledge and the "why".

First, do not abandon your fundamentals. The pressure to become an “AI-first” engineer is real, but the engineers who will be most valuable in five years are the ones who deeply understand the systems they work on. AI is a tool. Understanding architecture, debugging complex systems, reasoning about performance and security: these skills are not becoming less important. They are becoming more important because someone needs to be the adult in the room when AI-generated code breaks in production at 2 AM.


The Quiet Grief of Adult Friendship

Romantic heartbreak has an elaborate infrastructure. There are films for it. Songs for it. Poetry, rituals, sympathy, advice columns, entire industries dedicated to helping people metabolise romantic loss.

Friendship grief, however, remains oddly invisible. Nobody teaches you how painful it feels to slowly lose access to someone who once knew your inner life intimately. Someone who understood the silences before your sentences. Someone who could identify your mood from the way you said ‘okay’. Someone who knew everything about your crushes and petty insecurities.

And unlike romance, friendships don’t end dramatically. No final conversation. No clean rupture. No cinematic closure. Most friendships dissolve through unattended accumulation – postponed calls, exhausting jobs, geographic distance, emotional fatigue, different sleep schedules, different priorities, and different lives unfolding at different speeds. One day you realise the person who once knew your thoughts now only knows what you accidentally reveal on Instagram stories.

And because ‘nothing happened’, we often deny ourselves the right to grieve it.

I feel this. In college and then after, I had a core group of friends. We would hang out many weekends, we'd take vacations together, we were in each others' weddings. Then we got older, life happened, and drifted apart. I should reach out to them.


Data Centers Are Easy to Build. Powering Them Is Complicated, Slow, and Expensive

To bypass the issue of grid demand, many data center builders have promised to power the buildings themselves. The problem with that plan is that it’s easy to build a warehouse full of GPUs. Building power plants and transmission lines to power those warehouses will take years and cost billions more than the data centers. A skilled and efficient builder can complete a data center construction in under a year. Building new energy generation to meet that data center's power needs could take a decade.

When it comes to building new power plants and building out the grid, nothing is ever as fast and easy as one would expect it to be.

Most of these turbines are across state lines in Mississippi, are operating without public permits and are destroying the air quality of people who live near them. Some of the gas turbines weren’t disclosed. A lawyer for the Southern Environmental Law Center told Reuters the turbines are a violation of the Clean Air Act. It may not matter. On July 27, Trump’s Environmental Protection Agency announced that power plants that exclusively keep data centers online won’t be subject to the Clean Air Act.

Much like everything else this administration has done, destroy the planet to further enrich the rich and powerful.


The Conditionally Open Web

At the heart of this and as I mull this over again and again is the idea that the requirement to earn a profit leads to behavior that's directly counter to the open ideals upon which the web was founded. Removing that requirement allows for more openness (though that is still voluntary). If you believe in the open web, you'll make things open. If you support the ideal, you'll build for it. If all you see is a platform and a medium absent the ideal, you'll exploit it.

It's the ongoing debate about capitalism versus community. Too often the lust for more and more profit ruins good things.


Older Notes →