I’m in Las Vegas this week for Google Cloud Next ’26, and spent the last two (full) days in various keynote rehearsals. Fun stuff with people I enjoy hanging out with.
[blog] The Agent Stack Bet. Important post. Have we given agents too much … agency? Addy calls out four architectural bets to make to get back in control.
Heading to Las Vegas tomorrow for the prep ahead of Google Cloud Next 2026. Today was all about clearing out my queue of work beforehand. I also updated my bio here to reflect a change in my job.
[blog] Build to Learn vs Build to Earn. Whether you’re a product manager or not, know when you’re doing discovery and learning, and when you’re actually building the real product.
[article] Why AI readiness training fails. I think we all know that any training that isn’t applied within two weeks is forgotten. Can we rethink how we’re upskilling people with AI.
[article] Sleep Deprived. I don’t think more of people who brag about not sleeping. That seems like a dumb decision. I’ll be tested next week in Vegas, but still plan to prioritize rest.
Want to get this update sent to you every day? Subscribe to my RSS feed or subscribe via email below:
No time to build personal projects today, but it was rewarding to check in on next week’s announcements, launches, and the very cool stuff my own team is shipping at Google Cloud Next.
[article] Where will developer wisdom come from? Do you still need wisdom about how to build software? Or is AI wiser about how to write good code? Provocative article.
[blog] Building End to End AI Agents with ADK Dev Skills. I made a big mistake not using these ADK skills when building an agent last weekend. The process was fine, but this would have sped me up even more.
[article] Why Leaders Need “Power Skills.” Hard skills get you promoted, but “power skills” keep you there. This article looks at how you connect with others and demonstrate higher-order leadership.
I had lunch with a friend today who showed me how he built an agent team with Claude Code, and the resulting software he completed in days instead of months. It was eye-opening and inspired me to go back to the office and start recreating his work with Gemini CLI subagents.
[blog] Subagents have arrived in Gemini CLI. Great feature that lets you isolate work and build out agentic teams that can tackle work independently.
[article] Why great teams can’t be copied. Love this perspective. We mistake the outputs of trust with the inputs. If you don’t build the right foundation, all those “successful” practices from prior teams fall flat.
[blog] Set up Claude Code with Vertex AI. Where are you getting your Anthropic models from? If you care about performance, it’s probably from us. Here’s how to point Claude Code at Anthropic models running on Google Cloud.
[blog] The Gemini app is now on Mac. Installed it. Looks great, and an example of us working differently to ship quickly.
A (mostly) fun and frantic day. But the opposite is no good, so I’ll take it.
[blog] Agentic Engine Optimization (AEO). The guide you didn’t know you needed. Addy provides a checklist and more for helping you structure your content in a way that agents can benefit from.
[blog] Productive procrastination. Our brains like novelty and try to protect us from negative emotions. How do we recognize this truth, while still doing the work we need to do? Solid advice here.
I got to build a bit this weekend. First, I added an ADK agent to a web solution that I like to demonstrate to customers. This gave me a chance to once again deploy to our Agent Engine. Then I built up a solution with Pub/Sub and blogged about it today.
[blog] Go for AI agents: a field report. Useful to read, although the writer misses out on a handful of mature ecosystem projects for Go devs building AI apps and agents. Don’t miss Genkit and ADK!
Throughout my tech career, I’ve been taught to be cautious about where I stash business logic. I now reflexively think about putting important rules and considerations into central services. Could you bury it in stored procedures or database triggers? Be careful, say Internet people. Same goes for frontend components. Middleware? It’s easy to stash sneaky-important rules in all sorts of interesting platform extensions. Google Cloud just made it very simple to invoke an LLM from a Pub/Sub topic or subscription. When might I do that? And what does it look like? I’ll show you.
In my classic ESB days, meaningful logic could show up in data processing pipelines, message transformations, long-running orchestrations, and even code callouts. You couldn’t avoid it. Cloud messaging services like Pub/Sub also have plenty of spots where you can add some decision logic. Where should I route this message? Based on what criteria? How long should I retain messages after delivered? What cause a retry? And now we have Single Message Transforms (SMTs) where I can do simple manipulation of the data stream. This is handy if you want to hand the downstream consumer a sanitized message with sensitive data removed, clean up data formatting, or even enrich the message with new data points.
A brand new SMT is the AI Inference SMT. Using this, I can call Google, partner, or custom models. What’s also cool is that I can apply this at the Topic level—this means every subscription gets the altered message—or apply it for specific Subscriptions. Let’s set one up.
What’s the scenario? In my former days as a solutions architect, I worked with a massive ERP implementation where key events were sent out and consumed downstream. One of those was “employee” events for hiring new staff. What if we had a Pub/Sub topic that took in a “new employee” event, and one of the many downstream subscribers sends welcome emails? I could call the LLM in that subscription to hand a pre-built welcome note to the destination system. Of course, you might also craft that AI-assisted welcome note in the subscriber’s own service. Might depend on how capable that downstream system is.
Once you’ve got a Google Cloud account and have the right permissions set up, we can get to work. This is all doable in our gcloud CLI, but I’ll use the web console to demonstrate everything here. I start by going to the Google Cloud Console and Pub/Sub section to create a new Topic.
You’ll see there’s a Transforms section, but I don’t want to apply a transform to every message. So I’ll create this topic without one.
Next, I create a subscription. Pub/Sub is one of the most unique cloud messaging services because it supports push, pull, and even message replay. This sub is a simple pull-based subscription.
Further down this page, I see the option again to add Transforms. The AI SMT expects content in a specific structure, but I don’t want to assume the upstream system is going to send messages in that format. So I can daisy-chain SMT where I first re-format the message in a JavaScript User-Defined Function, and then run the AI SMT.
I click the Add Transform button and choose Javascript UDF. I set the function name as transform and populate the JavaScript code that sticks the original employee event into the prompt that the AI SMT expects.
Here’s the code.
function transform(message, metadata) {
var incomingData = JSON.parse(message.data);
var promptText = "Generate a personalized welcome email factoring in the person's name, location, and role. " + JSON.stringify(incomingData);
// No wrapper object here
var aiInferenceObject = {
model: "google/gemini-2.5-flash",
messages: [
{ role: "user", content: promptText }
]
};
return {
data: JSON.stringify(aiInferenceObject),
attributes: message.attributes || {}
};
}
I like that I can test this inline. The Test Transforms button takes me to an interface where I can see if my UDF does its job. After plugging in an example message, I click the Test button and see the transformation result.
Now I add the AI SMT to the sequence of transforms. I chose AI Inference and then picked the managed Gemini model from Vertex AI. I could have also chosen any number of managed models from DeepSeek, Mistral, or Anthropic. Or even chosen my own model endpoint. I also picked a service account that had access to Vertex AI models. And I set a couple of parameters for max token count and temperature.
Now when I choose the Test Transforms button again, I see both SMTs. After popping the same value into the transform SMT, I click Test. It’s pretty great than when I click the second SMT (AI Inference), the results from the first pre-populates the box!
The transformed message includes the desired “welcome” note. In real life, I’d have crafted a better prompt to ensure exactly what I wanted, but this shows what’s possible.
Once I save this subscription, it works like any other. Now I’ve got an LLM-enhanced Google Cloud Pub/Sub!
I like seeing these sorts of capabilities baked into Cloud services. Integrating LLMs into your architecture doesn’t need to be difficult. But make good choices, and figure out when your business logic needs to be explicitly called out, versus buried inside service configurations!
Happy Friday. I do hope you had a productive week, and get the chance to enjoy yourself over the weekend.
[article] AI Adoption by the Numbers. That “95% of AI pilots fail” stat from last year? Feels suspect. This gang looked at data that shows that AI startups are finding real success in the enterprise.
I spent the latter half of today trying to help Future Richard who somehow has a meeting-filled “no meeting Friday” tomorrow. Better to tackle tasks I usually leave for Friday today, and not stress it later.
[blog] The 49MB Web Page. How did we get here? Trackers, bloat, auto-play videos, and more ambush us on seemingly every website.
[blog] Your parallel Agent limit. Managers, read this. And AI fanatics, dig in. Adding agents doesn’t scale developers linearly. There’s a ceiling for what we can handle.
[article] Developer ramp-up time continues to accelerate with AI. Wow, developers are getting significantly more productive, faster, in new jobs. Will we reach a plateau where there’s nothing left to speed up with AI?
[article] Unstructured data is piling up as AI risks rise. Hmmm, I wonder why AI pilots have a middling chance of success? Maybe because most data estates aren’t remotely set up to work with AI scenarios?
Want to get this update sent to you every day? Subscribe to my RSS feed or subscribe via email below:
Today was a day I was happy to have access to experts and decision-makers. Instead of playing telephone through intermediaries, I still like going right to the source. Risky at times, but usually pays off!
[blog] The 2nd Phase of Agentic Development. Instead of cloning things, we can now reimagine software based on the jobs-to-be-done. Coding agents make reimagining practical.
[blog] How I Use AI Before the First Line of Code. Don’t just AI for implementation work. It’s a good exploration tool, reviewer of requirements, and architectural sparring partner.
[blog] Portability is the new productivity. Do you need to rebuild software for every type of client? The gaming industry solved this, and app devs have Flutter for this too.
[blog] Ultimate prompting guide for Lyria 3 models. I like the detailed instructions here that explain the best way to get music, lyrics, and vocals from this set of Google models.