[blog] Best practices for coding with agents. From Cursor. I’m not sure all “best practices” apply to each agentic tool, but there’s absolutely some general wisdom here.
[blog] Coding Agent Development Workflows. So many experience reports lately! I like it. People are figuring out the workflows that work best for them. Maybe some will turn into widely adopted techniques.
[blog] A gRPC transport for the Model Context Protocol. Being in a foundation doesn’t mean creators of an open project give up roadmap control. Make your voice heard if you’d like to see extensible transports for MCP.
Yes, there are such things as stupid questions. No, you can’t do anything you set your mind to. Yes, some ideas are terrible and don’t warrant further attention. That concludes our reality check and pep talk for today.
But hey, sometimes a bad idea can evolve to a less-bad idea. Do modern agentic coding tools keep us from doing terrible things, or do they simply help us do bad things faster? The answer to both is “sort of.”
They’re tools. They follow our instructions, and provide moments to pause and reflect. Whether we choose to take those, or ask the right questions, is up to us.
Let’s see an example. In almost thirty years of coding, I’ve never had as much fun as I’m having now, thanks to Google Antigravity. I can go from idea to implementation quickly, and iterate non-stop on almost any problem. But what if I have a dumb idea? Like an app where I’ll click a button every time I take a breath. Here’s my prompt to Antigravity:
Let's build a web app where I can track each breath I take. Make a button that I click when I take a breath in, and increment a counter. Call Gemini 3 Flash Preview with a variable holding my API key XXX-XXXXX-XXXXXX-XXXXX-XXXX and return an inspirational quote when I load the app for the first time. Store the hourly results of my breathing stats in an XML file in the app folder.
There’s probably like eight things wrong with this “app.” The idea is unsustainable, I shouldn’t store API keys as variables, and stashing results in the local file system is silly.
Does Antigravity stop me? Tell me I’ve been sniffing glue? It does not. But, our first moment of reflection is the resulting Implementation Plan and Task List. Antigravity dutifully sketches out a solution per my instructions, but I have a chance to evaluate what’s about to happen.
But I’ll stubbornly stay on point. Antigravity shrugs in quiet resignation and builds out my dumb app idea. Within a minute or two, I have the Antigravity-controlled Chrome instance that loads my app. The agent tests it, and proves that I have a Gemini-generated quote, and a way to track every breath I take. Yay?
My app implements the bad practices I asked for, and uses local XML for persistent storage.
I could stop here and “ship it.” I could also eat paint chips for lunch. Life is about choices.
But good product thinking isn’t about solving problems. It’s about finding the right problems. Asking “why”, repeatedly. Thinking through assumptions and considerations and arriving at a well-analyzed place.
What I should have done after getting my implementation plan from Antigravity is asked Gemini (or literally anyone) whether this was a good idea. Heck, I should I have asked for validation before it even started planning anything. But, we can still do it now. I asked Antigravity “Let’s pause. Is this app even a good idea?”
Here’s the full answer, which is pretty darn good. It doesn’t call me an idiot outright, but steers me towards areas I should be thinking of instead.
That is a great question to ask at this stage! Now that the “how” is solved, it’s worth reflecting on the “why.”
Whether this app is a “good idea” depends entirely on your goal. Here’s a breakdown of how it might be perceived:
Theoretically: It’s a Mindfulness Powerhouse
In many meditation and breathwork practices, conscious awareness is the goal. By requiring a manual click for every breath, you are forcing your brain into a state of absolute presence.
The Benefit: It prevents “mindless” breathing. You can’t click the button if you’re stuck in a stressful thought loop.
The Insight: The hourly XML data could reveal exactly when you’re most “unconscious” or stressed during the day.
Practically: It’s High-Friction
From a UX perspective, there are some significant hurdles:
The “Click Fatigue”: An average adult takes 12–20 breaths per minute. That’s nearly 1,000 clicks an hour. Even a dedicated monk might find that distracting!
Counter-Productivity: The act of tracking might actually disrupt the relaxation you’re trying to achieve. You might find yourself focusing on the button rather than the breath.
The “Sweet Spot” Strategy
If you’re feeling skeptical about tracking every breath, you could pivot the app’s purpose slightly without losing the work we’ve done:
Focused Sessions: Instead of an “all day” tracker, use it for a “Mindful 5 Minutes” exercise.
Stress Intervention: Keep it as a tool to use specifically when you feel anxious—a way to “anchor” yourself back to reality through physical interaction.
Automated Evolution: If you love the data but hate the clicking, the next step would be integrating with a wearable (like an Apple Watch) to fuel that XML file automatically.
Verdict: As a primary way to live your life, it’s probably too much work. But as a training tool or a “digital fidget spinner” for mindfulness, it’s a fascinating experiment in human-computer interaction.
What do you think? Does the “High-Friction” part make it less appealing, or does that friction actually feel like the “point” of the exercise to you?
As a next step, I asked Antigravity about continuing down this “mindful breathing” path and what sort of metrics might indicate success. Thinking through metrics is a great way to slow down and consider the measurable value of whatever you’re building.
This is great. I get different types of metrics to think about, and the answer concludes with ideas of how we might evolve the app to be more useful and practical.
I prompt Antigravity to take a few of these ideas and update the implementation plan that accounts for these new ideas and project goals.
I like it. In addition, I want to revisit some of the lazy tech assumptions I made early. My next prompt into Antigravity was this:
Now let's consider the app we've built so far. Does it follow good practices? Am I doing things securely, and with long-term maintenance in mind? What should we do differently for this to be more production ready?
I’m finally doing better work, more slowly. Challenging assumptions, and improving the quality attributes of the app. Now my plan factors in putting the Gemini API key in an environment variable, cleaning up project structure, and reconsidering the persistence layer.
I tell Google Antigravity to go ahead and implement the updated plan. It goes off to improve the quality of the code itself, but also the relevance of the idea. In a minute, I have an updated app that helps me do measured breathing for two minutes at a time.
It even adds pre-and-post mood checkers that can help determine if this app is making a positive difference.
Did Google Antigravity prevent me from doing dumb things? No. But I’m not sure that it should. Tools like this (or Conductor in the Gemini CLI) inject an explicit “planning” phase that give me an option to go slow and think through a problem. This should be the time when I validate my thinking, versus outsourcing my thinking to the AI.
I did like Antigravity’s useful response when we explored our “why” and pressed into the idea of building something genuinely useful. We should always start here. Planning is cheap, implementation is (relatively) expensive.
These are tools. We should still own the responsibility of using them well!
I had some fun agentic coding sessions over the weekend as I wanted to test a couple of hypotheses about how the tools worked. I learned some things, and hope to publish some short blogs this week!
[blog] The Blood Dimmed Tide of Agents. More agents for coding, or business outcomes? Yay! How are we supposed to manage them all? *crickets*
[blog] Don’t fall into the anti-AI hype. Don’t listen to me; listen to great engineers who are doing better work, while staying eyes-wide-open about the possible implications. The fun of building is untouched, though. More from Simon.
[blog] Start your meetings at 5 minutes past. It’s the only system that works. My group does it too. If you want to avoid the back-to-back meeting mania, force them to start minutes later.
[article] The biggest obstacle for engineer productivity in 2026. An AI agent can help you stay in the zone longer by keeping your from bouncing around different tools. But there’s also constant interruption as you wait for prompt results.
[blog] A2UI for Google Apps Script. This framework that lets agents generate dynamic UIs is pretty cool. Here, it’s implemented in a way that bakes into Google Workspace.
Want to get this update sent to you every day? Subscribe to my RSS feed or subscribe via email below:
Happy Friday. It was a good first week back at work. In my reading so far this year, I’m wondering if we’ll see the same nonstop blitz of new technologies, or more focus on how to actually use it all. Feels like the latter.
[blog] Code Review in the Age of AI. Super valuable perspective here on how teams and solo devs need to think about code reviews. Even if (or especially if) AI is generating your code, it’s absolutely critical to ensure you have working software.
[article] DevProd headcount benchmarks, Q1 2026. How many people are in centralized teams (or roles) focused on developer productivity? Looks like an average of 4.7% of engineering headcount.
[blog] Introducing MCP CLI: A way to call MCP Servers Efficiently. I know that some people *really* dislike MCP—security model, hungry token consumption—but I’d bet many of those things get resolved. Philipp built a tool that solves for a few pain points.
[blog] Technical blogging lessons learned. A bunch of folks offer up their experience from years of writing. You’ll see some common themes.
Want to get this update sent to you every day? Subscribe to my RSS feed or subscribe via email below:
It was nice getting a holiday break from writing newsletters, but I’ve got two to pump out tomorrow. Time to dust off some humiliating personal stories and non sequiturs to jazz up the content.
[article] Generative UI: The AI agent is the front end. I’m paying close attention to this space. It’s far from mature, but the possibility of personalized and dynamic UIs (that replace billions of lines of static frontend code) is interesting.
[blog] Virtual machines still run the world. Always a good reminder. Container use is growing, but it’s still dwarfed by the widespread deployment of VMs.
[blog] The economics of technical speaking. This doesn’t get talked about. Maybe it should. Your time is worth something and too many speakers do it for free.
I visited my Open Source Program Office team today in our San Francisco office, and also had other fun chats. In between, I tried my hand at getting a single LLM prompt to do something I wanted. A dozen experiments later, still hunting for the right instructions!
[blog] When Agents Talk to Each Other. Don’t know your A2A from your ACP? Allen looks at the need for agent communication, and then explores the protocols that have taken hold.
[blog] Creating space. Terrific post with a couple dozen statements about where you need to focus yourself so that you’re doing the most important things.
[article] When There’s Nowhere to Promote a Star Employee. Advancement can’t always be about promotion. Sometimes there’s no spot available. But there are plenty of ways to make someone’s job more challenging and impactful.
[blog] The Art of Fast Agents: 17 Strategies to Fix Latency. Maybe latency is a concern after you’ve already gotten agents figured out functionally, but I thought these were good areas to pay attention to at some point.
[article] Why enterprise AI pilots fail. I’m not sure if the failure rate here is much different than any other IT initiative—the track record for projects in our industry is lousy—but the advice here seems reasonable.
[blog] A Year Of Vibes. This post has all sorts of hard-fought insights. The one that jumped out to me was yet another person emphasizing that git might not be the right answer for code in the AI era.
[article] Generative AI and the future of databases. Here’s some insight into the challenges of going from natural language to SQL, and how databases are evolving to match what’s needed from AI workloads.
Want to get this update sent to you every day? Subscribe to my RSS feed or subscribe via email below:
I’m in Sunnyvale for a couple of days hanging out with folks on my team. We’re also knee-deep in Google Cloud Next work. I hope you’ve already registered!
[blog] Collaboration sucks. Yeesh, that’s an aggressive way to start the reading list. The point here is to only get the right amount of feedback before taking charge and getting things done.
[blog] Best Flutter Features in 2025. I suspect that AI is going to cause some real disruption on the frontend. We can generate this code more easily now, but new paradigms like generative UIs will spark fresh interest.
[blog] Building internal agents. Great series of posts—nine so far—that explores the considerations and activities needed to build internally-focused AI agents.
[blog] 10 Prioritization Traps. Terrific list. There’s so much we can do, but should we be spending time on?
[article] Don’t Underestimate the Value of Professional Friendships. Don’t overestimate them either—you need friends outside of your business life. But also value the deeper relationships you can build with professional colleagues.
[blog] Bespoke software is the future. You probably have a LOT of custom software (reports, apps, scripts) for internal use. I don’t see why we’ll have any less moving forward.
Back to work after a two week holiday hiatus. I enjoyed the time off, but also looked forward to getting into the game again.
[blog] Your team has a context window. Our working memory gets full too, just like an LLM. What’s the impact on team performance when you force people to hold too much information in their heads?
[blog] The State Of LLMs 2025: Progress, Problems, and Predictions. There wasn’t a single breakthrough moment last year for AI, but an ever-growing set of milestones that moved everything forward. Terrific look back from Sebastian here.
[blog] How I think about Kubernetes. Is it “just” a container orchestrator? Or is Kubernetes a runtime for declarative infrastructure? This post argues for the latter.
[blog] Why I Write (And You Should Too!) Write to learn, to develop your voice, to create serendipitous moments. I’m a big proponent of learning in public.
[blog] Why Blogging Still Matters in the Age of AI. Related. Write for yourself, for others, and for your career. I attribute at least three jobs to having a public writing resume.
[blog] Code Quality Foundations for AI-assisted Codebases. I like these categories of rules and such that you can tell your AI tool to comply with. Seems like this would dramatically improve the quality of the generated codebase.
All things considered, I had a great year. The family stayed healthy, my oldest started college, I made some new friends, and work was meaningful. Everything wasn’t easy or perfect—it never is, or should be—but I’m hopefully better than I was twelve months ago.
For a while I’ve been doing these annual recaps, as much as for me as for you. I find it useful to pause and reflect, and I like going back through all the books I finished to pull out key insights worth remembering. Let’s take a quick look at some items I created, and then a roundup of the best from the 53 books I started and finished.
Things I Wrote (or Said)
I kept up my daily reading list and published hundreds of entries. If you scanned some of them, I hope you learned as much as I did!
In terms of what I created last year, I’m thrilled that Google keeps letting me co-host our Google Cloud Next developer keynote. Helping write and prepare it is a professional privilege and joy. It’s also a bonkers amount of work!
Quality-focused prompts for the vibe coding addict. Dismiss the ideas of vibe coding or AI-driven development at your own peril. While you’re hand-wringing or dismissing the work, those doing it are lapping you with shippable products. Let’s help them build more responsible and maintainable systems.
I started and finished 53 books last year on a variety of topics. I usually read three at a time. Some are breezy books that I finish in a weekend, others take months to navigate. Here’s a batch I enjoyed most:
The Old Man and the Sea by Ernest Hemingway. I’d never read it, and my Dad gave me a physical copy. Really enjoyed it.
Quit: The Power of Knowing When to Walk Away by Annie Duke. Perseverance is overrated. We waste time sticking with things when something better should be occupying our time. Great book on learning how to quit, and why it’s so tough.
The Trench: MEG 2 by Steve Alten. Maybe the campy movies aren’t your thing, but these books are super engrossing. I also read book 3 and book 4.
438 Days: An Extraordinary True Story of Survival at Sea by Jonathan Franklin. Speaking of adventure, this story is one that’s stayed with me for months. Floating helplessly at sea for over a year? I wouldn’t survive a week.
Cold Service (Spenser Book 32) by Robert B. Parker. I’ve been reading this series for years, and finished a few more books about Spencer. I think it’s Spencer’s fault that I started boxing last year.
The Shroud of Jesus by Dr. Gilbert Lavoie. I knew about the Shroud of Turin that purports to have an image of a crucified man imprinted on it. This book went super deep on its legitimacy and its implications. Pretty wild.
Command by Julian Stockwin. I read a couple more books in this series about Captain Kydd and (fictitious) sea adventures from centuries ago. Always enjoyable to read about this life and time.
Same as Ever: A Guide to What Never Changes by Morgan Housel. Does it feel like everything is changing around you? This book reminds us of what’s true all the time. Good perspective to have!
Men and Rubber: The Story of Business by Harvey S. Firestone. The best business-y book I read this year. Can a book about tires be compellling? Absolutely. Read this to uncover piles of well-tested and honest wisdom about leadership, selling, and continuous improvement.
The Lessons of History by Will Durant, Ariel Durant. I’ve said before, I think the secret to life is perspective. The authors point out what they’ve observed about biology, civilizations, and human behavior throughout history. Unfiltered, sometimes uncomfortable realities for anyone who doesn’t want to acknowledge how things really turn out!
The Mediterranean Caper by Clive Cussler. I went overboard on Dirk Pitt this year. I’m a sucker for a good adventure series, and read through the first eight books in this series.
Assyria: The Rise and Fall of the World’s First Empire by Eckart Frahm. I was in the British Museum again this year and realized I knew too little about the Assyrians. This book took me months to finish, but I enjoyed it.
Man’s Search for Meaning by Viktor E. Frankl. The most important book I read this year? It’s a classic, but I had never read it. It’s a brutal look at life in a concentration camp, but also a convicting lesson on how we approach our lives. We’re all meant to do different things, and our pursuits define our time here.
The Museum of Desire: An Alex Delaware Novel by Jonathan Kellerman. Another series I’ve read for a decade+ now. I picked up a few more of these books about a detective and psychologist who solve grisly murders. Light reading.
Spurgeon: A Life by Alex DiPrima. He’s one of the most prolific writers of all time, and one of the most impactful humans that have walked on Earth. His pastoral work in the 1800s is legendary, but his relatability is why his impact was so big then, and now.
The Lord Of The Rings: One Volume by J.R.R. Tolkien. The movies are among my favorites, but embarrassingly, I’d never read the books. This novel represents three of them, and I truly loved it. Wonderful writing, expansive worlds, and characters you care about.
Paved Paradise: How Parking Explains the World by Henry Grabar. Yes, a book about parking can be fascinating. We spend more time thinking about housing cars than housing people. The shapes of our cities and suburbs is driven by this unspoken desire to put our car wherever we want to, as easily as possible.
Once again, thank you for spending some time this past year with me. I genuinely hope that your 2026 is full of purpose, learning, and frequent moments of delight.
Are you back at work or taking extra time until after the New Year? That’s me, but I still paused to read some items today and post a reading list. I haven’t felt this relaxed in a while!
[blog] DORA 2025: Measuring Software Delivery After AI. This work took off because it gave everyone a tangible way to measure delivery performance. Rachel looks at how this work evolved and where we stand today.
[article] Microsoft BizTalk Server Product Lifecycle Update. This blog started in 2007 as a way to continue my exploration with BizTalk Server after I left Microsoft. I owe a lot to that product. It was wildly mismanaged by Microsoft and is finally EOL.
[blog] Against SemVer. Is semantic versioning a “smart person recommendation” that fails to actually add value? This person thinks so.