Author: Richard Seroter

  • Daily Reading List – May 8, 2026 (#780)

    I spent time today with our team’s head of engineering for Google-sponsored languages. Dart has an interesting history, and is critical to some key services from Google. I’m going to hack around with it this weekend.

    [article] Cognitive Surrender. This is when the AI’s output becomes your output. It leads to cognitive debt. Where might you allow yourself your surrender, and how do you protect against it?

    [article] The “AI Job Apocalypse” Is a Complete Fantasy. You might roll your eyes at this headline in the face of the stream of “the business is great but we’re laying people off because of AI” stories (see: Cloudflare). But the amount of work to be done isn’t fixed, and this post brings some receipts from the recent past.

    [article] Tech job postings hit 3-year high. Tons of open tech jobs, with more added each month. A reconfiguration doesn’t mean the work goes away.

    [article] The stuff nobody tells you about startup marketing. We’re all in sales and marketing, whether we realize it or not. Good advice here for those trying to land their startup products.

    [blog] Automating modernization: Migrating legacy Express to Next.js with Google Antigravity & AI Agents. Constructive journey through a modernization scenario. I’ve seen a few of those this week, and skills + agent teams is proving to be a strong pattern.

    [article] The company that made RAG mainstream is now betting against it. The half-life of a “best practice” in this industry is like 3 months. Pinecone who got famous as a vector database serving RAG use cases, now pushes knowledge upstream into artifacts used by agents.

    [blog] With faster node startup for GKE, say goodbye to cold-start latency. New provisioning logic means your Kubernetes nodes come online even faster now.

    [blog] New Bigtable in-memory tier for sub-millisecond read latency. This might already be the highest performing database on the Internet, and now it can be even faster.

    [blog] Write-Only Code. Is this the final-boss of agentic coding? Maybe. If you are comfortable with this, you’ve knocked down every concern. Or you’ve embraced YOLO engineering.

    [article] 10 Hacks Every Google Meet User Should Know. Some of us spend a lot of time in virtual meetings. I’m grateful each day that I get to use Meet.

    Want to get this update sent to you every day? Subscribe to my RSS feed or subscribe via email below:

  • Daily Reading List – May 7, 2026 (#779)

    There’s the usual stash of AI content below, but also a few pieces that give you a break from the non-stop AI train.

    [article] Why SaaS freemium playbooks don’t work in AI, and what to do instead. Good piece. Instead of the classic “give basic features for free and put premium behind a paywall”, AI products are upselling on usage intensity, outcomes, and most compute-heavy experiences.

    [article] Designing front-end systems for cloud failure. Since I’m not a frontend guy, I haven’t thought much about this topic. But I liked the insights about degraded frontend experiences and the breadth of things that you need to guard against.

    [blog] 10 Lessons for Agentic Coding. Today. Lessons for today. Who knows what the “good practices” will look like tomorrow?

    [blog] Monitoring reliably at scale. What if your observability stack depends on the same systems that it monitors? Yikes. Airbnb wanted to break these circular dependencies.

    [youtube-video] How a Group of Developers Took Back Control from Enterprise Java | Spring: The Documentary. Wonderful video documentary that looks at the history and impact of the Spring Framework.

    [blog] Cold Starts Are Costing You: Fix Them with GKE Pod Snapshots. Wow, this’ll come in very handy for many people. Save app, file system, and network state into a snapshot used for subsequent Kubernetes pod startups.

    [blog] Coding with AI Agents is Now a Baseline Expectation for Managers. Fun post. You might reignite your passion for tech by throwing yourself into the toolchain your team is using.

    [blog] Gemini 3.1 Flash-Lite is now generally available on Gemini Enterprise Agent Platform. It’s a terrific model that’s fast and cost effective. Now GA across surfaces.

    [blog] Choosing between APIs, MCP, and Agent-to-Agent architectures. Lak wants us to all default to REST APIs first, and only bring in MCPs and A2A when needed by reasoning agents.

    [blog] AlphaEvolve: How our Gemini-powered coding agent is scaling impact across fields. It’s so great to see advances like this, where AI is contributing original insights.

    Want to get this update sent to you every day? Subscribe to my RSS feed or subscribe via email below:

  • Daily Reading List – May 6, 2026 (#778)

    Today’s list has a terrific mix of opinions, not all in agreement. But what’s important is that we’re learning things together.

    [article] Agent Skills. Developers are loving these twenty agent skills. They serve the SDLC as a whole and force your agents through the same stages an engineer goes through.

    [article] How To Be Direct And Strategic. You can be a straight-shooter and still be thoughtful in how you deliver the message. Good post on how to be strategic and direct.

    [article] When an Executive Asks You an Unexpected Question. Related to the above, in some way. It’s not just about the fast and factual answer; you need to understand where the question is coming from.

    [blog] Five must-have guides to move agents into production with Gemini Enterprise Agent Platform. Thinking of getting your agents to production? There’s a lot to consider, and these guides point out areas of architecture, governance, and more.

    [article] Designing the AI-native engineering organization. This group says that AI-native engineering looks like shorter planning cycles, more frequent releases, smaller squads of engineers, and more types of contributors.

    [article] Agentic Coding is a Trap. I definitely get the arguments here, and the author makes a reasonable case. Some is speculation and anecdotal, but no one really knows how agentic coding is going to impact the field of software engineering.

    [blog] The AWS MCP Server is now generally available. Every platform, including clouds, need to talk MCP or make themselves agent friendly.

    [blog] Pioneering AI-assisted code migration: How Google achieved 6x faster migration from TensorFlow to JAX. This wasn’t just about asking an AI agent to plow through a codebase and do work, It used a strong pattern with specialized agents.

    [blog] Closing the Loop: Google Just Validated Deterministic Code in the Loop. Keith noticed that the above post proved what he’s been seeing. He’s been doing some important analysis lately!

    [article] Improving AI agents through better evaluations. Good advice, and some very specific calls to action at the end. Invest here!

    [blog] What’s new in IAM: Security, governance, and runtime defense. The identity management space heated up quick. Check this out for what you should be expecting from your modern IAM solutions.

    Want to get this update sent to you every day? Subscribe to my RSS feed or subscribe via email below:

  • How to force your custom agent to stop and seek human approval

    Autonomous agents are cool and all, but we all know there are plenty of circumstances where we want human review. Your custom built agent might have instructions to stop and get input, but that doesn’t guarantee it happens. The Agent Development Kit recently added a human-in-the-loop feature, and I decided to try it out.

    Let’s build an agent that generates product tutorials on-demand. The agent takes in a request, and uses tools to ground its output. Before it publishes a tutorial, it requires explicit approval from outside its own workflow. ADK now offers both a simple boolean approval, and a more sophisticated option. I’ll test out both, using the built-in web UI and the raw REST API. FYI, all my source code is here.

    First, here’s the architecture:

    Simple Tutorial Agent

    First, there’s a basic tutorial agent that uses the simple action confirmation.

    Below is the core agent code. The agent definition (at the bottom) has instructions, a model, and some tools. I’m using the Google Search tool and our Developer Knowledge API MCP server tools. The former grounds results in Google Search results, and the latter points to Google’s core documentation.

    func createTutorialAgent(ctx context.Context, llmModel model.LLM) (agent.Agent, error) {
    	transport, err := mcpTransport(ctx)
    	if err != nil {
    		return nil, err
    	}
    	mcpToolSet, _ := mcptoolset.New(mcptoolset.Config{Transport: transport})
    
    	publishTool, _ := functiontool.New(functiontool.Config{
    		Name:                "publish_tutorial",
    		Description:         "Publish the tutorial. Requires user confirmation.",
    		RequireConfirmation: true,
    	}, publishTutorial)
    
    	searchAgent, _ := llmagent.New(llmagent.Config{
    		Name:        "search_agent",
    		Model:       llmModel,
    		Tools:       []tool.Tool{geminitool.GoogleSearch{}},
    		Instruction: "Search the web.",
    	})
    
    	return llmagent.New(llmagent.Config{
    		Name:        "tutorial_agent",
    		Model:       llmModel,
    		Description: "Simple tutorial agent.",
    		Instruction: `You are a technical writer. Draft a Google Cloud tutorial based on user requests.
    Once the draft is complete, show it to the user and ask them if they would like to start the publishing process. The 'publish_tutorial' tool will then handle the review and approval.`,
    		Tools:    []tool.Tool{agenttool.New(searchAgent, nil), publishTool},
    		Toolsets: []tool.Toolset{mcpToolSet},
    	})
    }
    

    Notice that the publish_tutorial tool has a RequireConfirmation attribute. The corresponding publishTutorial function only gets called for a true result.

    To start the agent (after setting environment variables for Google Cloud project and any credentials) for the built-in web UI, I used this command:

    ADK_AGENT=tutorial go run . web api webui
    

    This provides me a localhost web UI to explore my agent. I asked for a tutorial and saw it use the right tools to generate a response.

    I then ask to start the publishing process, and the confirmation flow kicks in. Notice the small free text box asking for my response.

    The accepts a JSON payload of {"confirmed": true} only. When I provide that value, the control returns to the agent and it publishes the Markdown tutorial to the local folder.

    Let’s do the same workflow with the REST API.

    This time, I started up the agent with this command to get the API endpoint only:

    ADK_AGENT=tutorial go run . web api
    

    The http://localhost:8080/api/list-apps endpoint shows that I have one “app” named tutorial_agent. To start, I need to create a session with my agent. I’ll set the username and (optionally) the session ID. If I just post to the session endpoint, I get back a random session ID.

    curl -X POST http://localhost:8080/api/apps/tutorial_agent/users/u_123/sessions/s_123 \
      -H "Content-Type: application/json"
    

    Now I can send in a prompt to my agent. Notice that I’m passing in the user ID and session ID from above.

    curl -X POST http://localhost:8080/api/run \
    -H "Content-Type: application/json" \
    -d '{
    "appName": "tutorial_agent",
    "userId": "u_123",
    "sessionId": "s_123",
    "newMessage": {
        "role": "user",
        "parts": [{
        "text": "create a tutorial for deploying a container to an existing GKE Autopilot cluster. use the cli."
        }]
    }
    }'
    

    I get back a pile of JSON that includes the tutorial itself. Like with the web UI experience, I’m asked if I want to kickstart the publishing process. I send in a follow-on message like this:

    curl -X POST http://localhost:8080/api/run \
    -H "Content-Type: application/json" \
    -d '{
    "appName": "tutorial_agent",
    "userId": "u_123",
    "sessionId": "s_123",
    "newMessage": {
        "role": "user",
        "parts": [{
        "text": "yes, start the process to publish the tutorial"
        }]
    }
    }'
    

    There’s another pile of JSON to parse through, and I need to find the ID tied to the adk_request_confirmation object.

    [ ... "content":{"role":"model","parts":[{"functionCall":{"id":"adk-e6d32a67-c1d4-46b8-87f6-6922a3af3d98","name":"adk_request_confirmation","args":{"originalFunctionCall":{"id":"adk-0e6c0394-a22b-4d5f-9af6-e27284bc175f","args":{"content":"# Deploy a Container to an Existing GKE Autopilot Cluster using the gcloud CLI and kubectl\n\nThis tutorial guides you through" ...]
    

    The next REST API call includes the ID from above and the familiar “confirmed” property.

    curl -X POST http://localhost:8080/api/run \
    -H "Content-Type: application/json" \
    -d '{
     "appName": "tutorial_agent",
     "userId": "u_123",
     "sessionId": "s_123",
        "newMessage": {
            "role": "user",
            "parts": [
                {
                    "functionResponse": {
                        "name": "adk_request_confirmation",
                        "id": "adk-e6d32a67-c1d4-46b8-87f6-6922a3af3d98",
                        "response": {
                            "confirmed": true
                        }
                    }
                }
            ]
        }
    }'
    

    After this call, I see the Markdown tutorial written to disk.

    Advanced Tutorial Agent

    This agent itself looks nearly the same as the prior one, but has a more sophisticated toolset. Here’s the agent code, with the confirmation behavior in the downstream function, not the function tool.

    func publishTutorialAdvanced(ctx tool.Context, args PublishTutorialArgs) (map[string]any, error) {
    	confirmation := ctx.ToolConfirmation()
    	if confirmation == nil {
    		ctx.RequestConfirmation(
    			"Reviewer approval required to publish.",
    			map[string]any{
    				"status": "approved", // approved, rejected, update
    				"notes":  "",
    			},
    		)
    		return map[string]any{"status": "Pending reviewer approval."}, nil
    	}
    
    	payload := confirmation.Payload.(map[string]any)
    	status, _ := payload["status"].(string)
    	notes, _ := payload["notes"].(string)
    
    	if strings.ToLower(status) == "approved" {
    		if !strings.HasSuffix(args.Filename, ".md") {
    			args.Filename += ".md"
    		}
    
    		if err := os.MkdirAll("tutorials", 0755); err != nil {
    			return nil, fmt.Errorf("failed to create tutorials directory: %w", err)
    		}
    
    		fullPath := filepath.Join("tutorials", filepath.Base(args.Filename))
    		if err := os.WriteFile(fullPath, []byte(args.Content), 0644); err != nil {
    			return nil, fmt.Errorf("failed to save tutorial: %w", err)
    		}
    		return map[string]any{"status": "published", "path": fullPath}, nil
    	}
    
    	return map[string]any{"status": status, "notes": notes}, nil
    }
    
    func createAdvancedTutorialAgent(ctx context.Context, llmModel model.LLM) (agent.Agent, error) {
    	transport, err := mcpTransport(ctx)
    	if err != nil {
    		return nil, err
    	}
    
    	mcpToolSet, err := mcptoolset.New(mcptoolset.Config{Transport: transport})
    	if err != nil {
    		return nil, err
    	}
    
    	publishTool, err := functiontool.New(functiontool.Config{
    		Name:        "publish_tutorial_advanced",
    		Description: "Publishes the tutorial. Requires status and notes from a reviewer.",
    	}, publishTutorialAdvanced)
    	if err != nil {
    		return nil, err
    	}
    
    	searchAgent, _ := llmagent.New(llmagent.Config{
    		Name:        "search_agent",
    		Model:       llmModel,
    		Description: "Web search agent.",
    		Instruction: "Search the web for info.",
    		Tools:       []tool.Tool{geminitool.GoogleSearch{}},
    	})
    
    	return llmagent.New(llmagent.Config{
    		Name:        "advanced_tutorial_agent",
    		Model:       llmModel,
    		Description: "Tutorial agent with advanced confirmation.",
    		Instruction: `You are a technical writer. Draft a Google Cloud tutorial based on user requests.
    Once the draft is complete, show it to the user and ask them if they would like to start the publishing process.
    The 'publish_tutorial_advanced' tool will then handle the multi-stage review and approval.
    If the reviewer provides feedback (status 'update' or 'rejected'), revise the draft and try again.`,
    		Tools:    []tool.Tool{agenttool.New(searchAgent, nil), publishTool},
    		Toolsets: []tool.Toolset{mcpToolSet},
    	})
    }
    

    Notice the RequestConfirmation command in the publishTutorialAdvanced function. Here, we have more control over sending notifications or doing whatever to solicit the confirmation approval.

    Note that I tried to get this agent to work with the built-in web UI but couldn’t get it. The same text box pops up for approval confirmation, but no values seem to get the agent to proceed. The only way I got this to work was with a bunch of custom handling in the agent.

    So let’s go straight to the REST API. I started the agent using this command:

    ADK_AGENT=advanced go run . web api
    

    When I check the list-apps endpoint, I see that my agent app is called advanced_tutorial_agent. So just like above, we start by creating a session with the correct agent name.

    curl -X POST http://localhost:8080/api/apps/advanced_tutorial_agent/users/u_123/sessions/s_123 \
      -H "Content-Type: application/json"
    

    Now I can prompt the agent with a tutorial request.

    curl -X POST http://localhost:8080/api/run \
    -H "Content-Type: application/json" \
    -d '{
    "appName": "advanced_tutorial_agent",
    "userId": "u_123",
    "sessionId": "s_123",
    "newMessage": {
        "role": "user",
        "parts": [{
        "text": "create a cli tutorial for creating a pub/sub topic."
        }]
    }
    }'
    

    My custom tutorial comes back in a second, and I can kick off the publishing process.

    curl -X POST http://localhost:8080/api/run \
    -H "Content-Type: application/json" \
    -d '{
    "appName": "advanced_tutorial_agent",
    "userId": "u_123",
    "sessionId": "s_123",
    "newMessage": {
        "role": "user",
        "parts": [{
        "text": "yes start the publishing process"
        }]
    }
    }'
    

    After parsing the JSON response, I again find the adk_request_confirmation object and snag the ID.

    [ ... "content":{"role":"model","parts":[{"functionCall":{"id":"adk-7744ece0-a82d-4796-96b7-f376d96bf925","name":"adk_request_confirmation","args":{"originalFunctionCall":{"id":"adk-30c04217-3c0b-4519-a866-b914e9357872","args":{"content":"## Creating a Pub/Sub Topic with the `gcloud` CLI\n\nThis tutorial guides you through creating a Google Cloud Pub/Sub topic using the" ...]
    

    In the next REST call, see that I can now send a richer payload back to the agent and react accordingly.

    curl -X POST http://localhost:8080/api/run \
    -H "Content-Type: application/json" \
    -d '{
     "appName": "advanced_tutorial_agent",
     "userId": "u_123",
     "sessionId": "s_123",
        "newMessage": {
            "role": "user",
            "parts": [
                {
                    "functionResponse": {
                        "name": "adk_request_confirmation",
                        "id": "adk-7744ece0-a82d-4796-96b7-f376d96bf925",
                        "response": {
                            "confirmed": true,
                            "payload": {
                                "status": "approved",
                                "notes": "Tutorial looks great, proceed with publishing"
                            }
                        }
                    }
                }
            ]
        }
    }'
    

    And once again, I get a Markdown file saved to disk.

    After this initial demo, I may play with putting an A2UI interface on top of the agent, or even building it again using Genkit Go. But either way, make sure you give yourself some discrete moments where your agent stops and asks for input!

  • Daily Reading List – May 5, 2026 (#777)

    I’ve been thinking more about how it’s premature to build any large custom AI engines inside companies. Use off-the-shelf products to get rolling. Too many things are changing right now, and you can get a lot done by stuffing context into available products. The Stripe item below reinforced that for me.

    [article] Uber Shares What Happens When 1.500 AI Agents Hit Production. We’re going to see more of these lessons get published. At scale, you realize you need some centralized services and proxies.

    [article] The Map of System Topologies. Some impressive analysis of common architectures that most tech systems end up falling into.

    [blog] AI Slop & the Vulnerability Treadmill. Lengthy and important piece by Kate that’s a must-read for security teams AND executives. It’s time to rethink things.

    [article] Local AI. I’ll admit that open models didn’t get me that fired up a year ago. Why run one yourself when you can use a SOTA one as a service? But token usage has skyrocketed, sovereign needs are more clear now, and open models have continued to innovate. So, I get it now.

    [article] Google Is A Full Stack AI Player, And Is Playing Well. A lot of long bets have paid off, or are showing signs of paying off. It’s cheaper and faster to get wins through partnerships (e.g. Microsoft), but you’re left exposed without owning more of your supply chain.

    [blog] State of Routing in Model Serving. Netflix has a legit ML serving platform and needed to evolve their routing approach. Cool deep dive here.

    [blog] Accelerating Gemma 4: faster inference with multi-token prediction drafters. I had to deep-dive into this a bit to understand what it meant. But speculative decoding makes sense as a fast-forward for AI conversations.

    [blog] Reading List #1. This “reading list” thing is catching on! Even if no one else read my notes every day, I’d still get a lot of value from the discipline of reading and writing it.

    [article] This week on How I AI: The internal AI tool that’s transforming how Stripe designs products. Take away some useful lessons learned here. Get more people building, don’t obsess over “platform” right away, and spend time investing in context.

    [blog] Gemini API File Search is now multimodal: build efficient, verifiable RAG. Here’s a terrific update. This is basically RAG as a service, and with multimodal sources.

    [article] AI finds 20-year-old bugs in PostgreSQL and MariaDB. I don’t think we should have AI “slow down” because we can’t handle all the code issues it finds. We need better ways to quickly triage issues and incorporate fixes.

    Want to get this update sent to you every day? Subscribe to my RSS feed or subscribe via email below:

  • Daily Reading List – May 4, 2026 (#776)

    I’m back at work today and was planning on making a quick trip up to Mountain View for a work meeting. But since I’m solo dad-ing this week and the kid just caught a cold, I’m staying home with him instead. On the plus side, my day is WIDE open tomorrow now!

    [article] Cursor’s $60 billion bet is on the harness, not the model. This is the year of the harness. That orchestration and judgement layer is where we’re all making big investments.

    [article] 13 CTOs walk into a bar and realize: There is no best AI adoption strategy. There’s no universal playbook, or “right” way to do everything with AI. It’s contextual to your business goals, talent on staff, and prior tech investments.

    [blog] Run multiple coding agents safely with git worktrees. Work on a few branches simultaneously. This matters even more now when one person might be coordinating a handful of agents working on the same codebase.

    [article] Documentation is Dead. Long Live Documentation. This is referring more to project artifacts that should be a side effect of the work, not a separate activity.

    [blog] Firestore at Next ’26: Unlock agentic development, search and MongoDB compatibility. This is an underrated database that only gets better. Check out what’s new and interesting.

    [blog] Why Startups Are Choosing Flutter Over Native in 2026: A CTO’s Perspective. Cross-platform frameworks are attractive, but it’s ok to be skeptical. Flutter has proven itself to be particularly strong if your building for multiple mobile platforms.

    [article] Beyond Lovable and Mistral: 21 European startups to watch. Speaking of startups, there are ones around the world worth keeping an eye on.

    [blog] Trunk-Based Development: Your Pull Requests Are Still Too Big. You think your quality is better because humans review the code themselves? Not if the PRs are enormous. Here’s why you want smaller ones, and how to change your approach.

    [blog] What you’re actually writing when you write a SKILL.md. I like how this post positions Skills and how you pay the cost of poorly written ones.

    [blog] Supercharging LLM inference on Google TPUs: Achieving 3X speedups with diffusion-style speculative decoding. Some excellent research and progress here towards improved model performance.

    Want to get this update sent to you every day? Subscribe to my RSS feed or subscribe via email below:

  • Daily Reading List – May 1, 2026 (#775)

    Happy May! I’m expecting another exciting month of tech updates and real-world stories of people learning the best ways to do modern work. Buckle up.

    [blog] Databases Were Not Designed For This. Predictable queries and deterministic code? That’s not what databases encounter today. Are defensively designing your data layer for agents? This piece has specific advice.

    [blog] How to correctly use MCP servers with your AI Agents. We’re getting smarter on how to best load the right tools when we need them.

    [blog] Lessons on Building MCP Servers. More MCP lessons, especially around which tools to expose and and how to chain activities together.

    [article] Build To Learn FAQ. Great follow-up from Marty that answers questions about what a product manager really does now.

    [blog] One Map Key, One Lookup. It’s a small waste, but you’re still wasting CPU cycles if your code uses maps this way.

    [article] How can engineering leaders calculate the return on their AI investments? Very good analysis, and a killer quote you should share with your manager. Find the one about this being a systems decision, not a tooling decision.

    [blog] Google Cloud Next 2026: The End Of The AI Pilot Era. Forrester Research takes a look at this important next step. Let’s get to work.

    [article] AI agents are forcing enterprises to overhaul their operations. We’ve got a ways to go to land on autonomous ops, but the journey will trigger some important conversations.

    [article] Are we ready to give AI agents the keys to the cloud? Cloudflare thinks so. Agents can do any commercial transaction on Cloudflare. Bold. Once the guardrails are truly in place, this likely becomes more acceptable.

    [blog] The Journey Begins: Meet the 2026 GSoC Contributors! Wonderful program, glad to see this season get rolling.

    [article] The Psychological Costs of Adopting AI. Let’s ensure we intentionally build the human infrastructure needed to get the most value from these AI tools.

    [blog] Building with Gemini Embedding 2: Agentic multimodal RAG and beyond. Regardless of your media type, you can use this single Embeddings model. How amazing is that?

    Want to get this update sent to you every day? Subscribe to my RSS feed or subscribe via email below:

  • Daily Reading List – April 30, 2026 (#774)

    Back on vacation and had a day-date with my wife. A bunch of fresh crazy kicks in at work next week, so I’m thrilled to get a breather before we run at full speed again.

    [blog] Long-running Agents. Another killer post from Addy. What changes when you move from single-turn stateless agents to agents that need memories and coordination over time? This post has the patterns and solution options.

    [blog] How ADK Agents Remember: Sessions, Events, and Scoped-State. Speaking of memories and agent state, here’s some details on how to do it in practice.

    [blog] AI evals are becoming the new compute bottleneck. Evaluation costs are scaling non-linearly and we’re going to need to come up with new approaches. Or so says this Hugging Face post.

    [blog] I attempted to build a team of agents to help do my job on Google Cloud Agent Platform with the agents-cli. This is what I learnt. Great experience report. Not everything worked as anticipated, and Esther had some smart recommendations at the end.

    [article] AI productivity gains: More modest than expected. So far. But as the agentic operating model takes hold, team shapes change, and better platforms stretch from build-to-prod, you’ll see these gains skyrocket.

    [blog] 50+ fully managed MCP servers now available for Google Cloud services. Terrific. Google Cloud speaks MCP, which means agents can easily interact with all the key services to get work done.

    [blog] Zig Anti-AI. Few open source projects have direct a stance against AI as this one. I respect the principles.

    [blog] Popular Go Web Frameworks: A Practical Guide for Developers. You can do most everything with our base libraries. That’s on purpose. But there are still great 3P web frameworks you can add to the mix.

    [blog] Firestore levels up: Bringing the power of search and JOINs to NoSQL. This has really become quite the powerful database.

    [blog] You can now easily generate files in Gemini. Amazing. Now you don’t even need to leave the app to do Office stuff.

    [article] GitHub shifts Copilot to usage-based billing, signaling a new cost model for enterprise AI tools. Free lunch is over. Consumption pricing is taking hold over a straight-up per-seat pricing approach. More here.

    [article] Google Cloud surpasses $20B, but says growth was capacity-constrained. Massive demand, and we still can’t satisfy it all. Yet.

    [blog] Speeding Up AI: Bringing Google Colossus to PyTorch via GCSFS and Rapid Bucket. When you’re paying a ton for capacity, you want to use it to the max and be done. This high-performing storage reduces your wait time.

    Want to get this update sent to you every day? Subscribe to my RSS feed or subscribe via email below:

  • Daily Reading List – April 29, 2026 (#773)

    We had quite the earnings call today, and I’m proud of the work Google Cloud has done to deliver a platform people want to use. I had a mini-break from vacation this week to do customer calls, but taking Thursday and Friday to finish out my recharge week. Reading lists still part of the plan!

    [blog] 260 things we announced at Google Cloud Next ’26 – a recap. That’s a lot of things. It’s a mix of product news, customer stories, and partner updates.

    [blog] What Happened When We Treated AI Like an Engineering Teammate. The McDonald’s crew look at how AI sped up their engineering efforts.

    [blog] Agents CLI in Agent Platform: create to production in one CLI. This is very cool, and I haven’t tried it yet. Need to change that. But using agents to create agents is interesting. Especially the help testing and deploying them. More coverage here.

    [blog] Meetings are forcing functions. We all complain about meetings, but there’s a reason they exist. In some cases, the standing meeting actually forces people to do things ahead of time.

    [article] Generative UI explained without the hype. I really needed this. For some reason, I just didn’t “get” generative UIs. But now I understand it much better.

    [article] Managing a team that didn’t choose you. You rarely get to build an entire team or situation from scratch after taking over a leadership assignment. This post looks at how an engineering manager might handle the new circumstances.

    [blog] 1,302 real-world gen AI use cases from the world’s leading organizations. Some of these are massive use cases, some more surgical. That’s fine. But get going yourself by finding inspiration from what your peers are already doing.

    [article] Workday’s Last Workday? Quite the analysis! Workday has a very sticky business, but faces some real disruption for maybe the first time.

    [blog] Building a PCI-DSS Compliant GKE Framework for Financial Institutions: Data Protection, Governance & Audit Logging. Meaty content here. If you’re doing PCI, this might prove to be a useful input to your evaluation agents, or human brains.

    [article] Bed Bath & Beyond CEO: AI will lead to ‘significant reduction in headcount.’ The takeaway from this? Everyone should think about becoming “an organization that puts its payroll in the field.” Bloated back offices are going away.

    [blog] The Industry Is Watching GPU Prices. Google Just Moved the Fight to the Judgment Layer. Probably the sharpest analysis I’ve seen from last week. Keith sees the big picture and lays it out.

    [article] Roo Code pivots to cloud-based agent, says IDEs aren’t the future of coding. It’s amazing how fast the consensus shifted. Instead of GitHub at the center of the dev universe, and IDEs as the uniform front door for technologists, neither are true anymore.

    [blog] Before GitHub. Armin looks at how we managed source code and packages in a pre-GitHub world. While many of us are rooting for GitHub to get back on track, it’s useful to play through scenarios where that’s not the case.

    [blog] Building a production MCP server in Go. This post starts off by saying it was useful to build the MCP server in the same language as their existing backend. Many good tips here.

    [blog] You can now easily generate files in Gemini. Here we go. Create PDFs, Word docs, Google Sheets, and other artifacts directly in your Gemini app session. Available to everyone, right now.

    [blog] Celebrating 20 years of Google Translate: Fun facts, tips and new features to try. This is one of those magical services that we take for granted now. But it’s only getting better and connecting us even more deeply.

    Want to get this update sent to you every day? Subscribe to my RSS feed or subscribe via email below:

  • Daily Reading List – April 28, 2026 (#772)

    Day two of vacation included me hitting golf balls and eating lunch overlooking the ocean. And a couple of unexpected work calls. But overall, definitely feeling better and more energized already.

    [article] An Interview with Google Cloud CEO Thomas Kurian About the Agentic Moment. I’m absurdly biased, but I simply don’t see other CEOs demonstrate command of issues the way Thomas Kurian does in long-form interviews like this.

    [blog] AI in DevOps: Why Adoption Lags in CI/CD (and What Comes Next). It’s an interesting point of view. I’m not sure the conclusion is right. Are devs slow to add AI to CI/CD because of trust issues, or because the current landscape of products isn’t suited for AI workloads or surfacing the right AI integration points?

    [article] “Developer loyalty is at zero right now”: Google doesn’t care which AI coding tool you use. Thomas comes across measured and cool in the topmost interview. I come across as a wildcat in this one. I guess we balance each other out.

    [article] Vibing, Harness and OODA loop. You had me at OODA loop, as I’m a big Boyd fan. Just because AI helps us “act” faster, doesn’t mean we should skip the other important parts of the loop.

    [blog] Agent Chaos to Engineered Intelligence – Key Takeaways from Google Cloud Next 2026. Paul’s a good industry analyst and has a extracts a few important points about our story for developers.

    [article] What 4 engineers with 10+ years of experience say about staying relevant in the AI era. Everybody’s trying to figure out what work looks like. I don’t trust anyone who acts too confident. Read things like this to observe the thought process of others.

    [blog] Agent Memory Patterns. This post calls out a few places to store mutable memory. It focuses on files, memory blocks, and skills. I’m not sure how you’d categorize external durable memory services.

    [blog] Building real-world on-device AI with LiteRT and NPU. On-device AI will keep growing in popularity. I’m friends with the PM of this product and am trying to learn more about this space.

    [article] The End of One-Size-Fits-All Enterprise Software. What workflows do you want to control yourself? You’ll build, compose, collaborate, or buy software to drive it.

    [blog] We’re donating Agent Payments Protocol to the FIDO Alliance to support the future of secure, agentic payments. You love to see it. Open standards are useful in domains like this, and we’re playing our part.

    [blog] 8 Cursor Rules for Go Developers — 2026 Edition. Good, structured code still matters. These are some rules to stash in your agentic IDE to get cleaner Go code.

    [article] Google begins putting the guardrails on agentic AI. It’s not about flashy features right now, but who’s containing agents and making them manageable.

    [blog] The Future of Agentic AI: Inside Microsoft Agent Framework 1.0. Glad to see Microsoft betting on the A2A Protocol for their Python/C# agent framework.

    [blog] It’s all about the angle: Your photos, re-composed. Super cool. It uses AI to alter the perspective in existing photos.

    Want to get this update sent to you every day? Subscribe to my RSS feed or subscribe via email below: