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.
Here’s a bonus Christmas Eve reading list for you. I’ll be back with a couple editions next week before returning to the regular daily schedule on January 5th.
[blog] The Product Model at Google. Here’s a great deep dive into how Google orients around product strategy, discovery, and delivery.
[article] A modern guide to SQL JOINs. Under duress, I could possibly recall most of this. But I’ve probably forgotten most of my SQL knowledge. This was a good refresher.
[article] Using an ADE: Ancient Development Environment. Feeling left out because you’re not using an IDE that someone released a month ago? Relax. Some people are using dev environments from the 90s.
[blog] 60 of our biggest AI announcements in 2025. Nobody did more with AI in 2025 than Google. I don’t think that’s controversial to say! This is an impressive roundup.
[article] The Shape of AI: Jaggedness, Bottlenecks and Salients. Such a good post and worthy of a full read. AI progress isn’t even across categories, but once a bottleneck breaks, a flood of use cases become possible.
Want to get this update sent to you every day? Subscribe to my RSS feed or subscribe via email below:
Today was the first and last day of my workweek. I’m off through January 2nd, and will likely publish a Reading List here and there. But not every day until I’m back on the 5th. Enjoy your Christmas (or whatever you celebrate) break!
[blog] My LLM coding workflow going into 2026. Feel like you’re still winging it with AI? You’re not alone. But Addy’s workflow might form the basis for doing it better.
[article] AI Trends for 2026. I don’t think most would look favorably upon their “AI predictions” from twelve months ago. But Charlie did pretty well, and has opinions about what 2026 might hold.
[article] Building AI agents the safe way. What’s the “boring, necessary engineering” you need to do to have a secure AI agent strategy? Matt takes a look.
[blog] 2026 vibe coding tool comparison. I’d imagine that a few other tools will make lists like this in the near future. But in the meantime, this is a good look at Replit, v0, Lovable, and Bolt.
Want to get this update sent to you every day? Subscribe to my RSS feed or subscribe via email below:
This was a fun week full of announcements, team updates, and goal setting. I’m going to work next Monday, and then I’ll take the rest of the year off. I hope you have some great things (including “doing nothing”) planned!
[blog] Quick & Easy AlloyDB AI Setup Tool. Great work from Abi taking some of the intimidating parts of AlloyDB database setup (VPC setup, peering) and automates it away.
[blog] AI’s real superpower: consuming, not creating. Creation by AI can be done faster than humans, but we’re capable of the same work. But when it comes to consuming tons of content and making sense of it, AI is doing what humans physically cannot.
[blog] Why “Microservices” Debates Miss the Point. You can introduce poor coupling and design into any architecture. Let’s learn to avoid it, especially as we start doing multi-agent systems!
[blog] The Top Ten Highlights from Flutter & Dart in 2025. Big year for this pair, and 2026 could be even better. AI generates good Flutter code, and creating cross-platform apps will continue to be a valuable use case next year.
Want to get this update sent to you every day? Subscribe to my RSS feed or subscribe via email below:
Happy “Gemini release day” for all who celebrate. It’s a great way to start wrapping the year. I also published a post today that described my new way of bootstrapping the learning experience.
[blog] AI agents are starting to eat SaaS. I’ve heard about it, but haven’t necessarily seen it come to fruition. But this seems like reasonable analysis.
Don’t get me wrong, I like a good tutorial. Might be in a blog, book, video, or training platform. I’ve probably created a hundred (including in dozens of Pluralsight courses) and consumed a thousand. But lately? I don’t like be constrained by the author’s use case, and I wonder if all I’ve learned how to do is follow someone else’s specific instructions.
This popped for me twice in the past few days as I finally took some “should try” technologies off my backlog. Instead of hunting for a hello-world tutorial to show me a few attributes of Angular Signals, I simply built a demo app using Google Antigravity. No local infrastructure setup, wrangling with libraries, or figuring out what machinery I needed to actually see the technology in action.
You know, even a few months ago, I'd read a post like this about @angular Signals (https://t.co/bKxfJmnFMw) and think "that's cool, I should try that out sometime."
I did it again a couple of days later! The Go version of the Agent Development Kit came out a bit ago. I’ve been meaning to try it. The walkthrough tutorials are fine, but I wanted something more. So, I just built a working solution right away.
This is how I want to work.
I used @GoogleAIStudio to brainstorm some agent ideas. I then went into @antigravity to implement the idea with the ADK for Go.
35 minutes later, I have a Go agent that pulls from a queue and writes to a bucket. No syntax wrangling, just results.
I still enjoy reading content about how something works. That doesn’t go away. And truly deep learning still requires more than vibe coding an app. But I’m not defaulting to tutorials any more. Instead, I can just feed them into the LLM and build something personalized for me. Here’s an example.
Take the cases above. I jumped into Google AI Studio to get inspiration on interesting async agent use cases. I liked this one. Create a feed where an agent picks up a news headline and then does some research into related stories before offering some analysis. It’ll read from a queue, and then drop analysis to a Cloud Storage bucket.
Prompting for agent ideas in Google AI Studio
With my use case in hand, I jumped into Antigravity to sketch out a design. Notice that I just fed the tutorial link into Antigravity to ensure it’d get seeded with up-to-date info for this new library.
Sparking an application build in Google Antigravity
Antigravity started whirring away on creating implementation plans and a task list. Because I can comment on its plans and iterate on the ideas before building begins, I’m not stressed about making the first prompt perfect. Notice here that it flags a big assumption, so I provided a comment confirming that I want a JSON payload for this background worker.
Google Antigravity provides a way to offer feedback on implementation plans
After Antigravity started building, I noticed the generated code used a package the IDE flagged as deprecated. I popped into the chat (or I could have commented in the task list) and directed the AI tool to use the latest version and ensure the code still built successfully.
Steering Google Antigravity to pick a newer version of the library it selected
Constantly, I’m focused on the outcomes I’m after, not the syntax of agent building. It’s refreshing. When reviewing the code, I started to realize I wanted more data in the incoming payload. A directive later, and my code reflected it.
Iterating on software with Antigravity
This started with me wanting to learn ADK for Go. It was easy to review the generated agent code, ask Antigravity questions about it, and see “how” to do it all without typing it all out myself. Will it stick in my brain as much as if I wrote it myself? No. But that wasn’t my goal. I wanted to fit ADK for Go into a real use case.
Code that sets up an agent in ADK for Go
This solution should feel “real”, and not just be a vibe-and-go. How about using CI/CD? I never remember the syntax for Google Cloud Build, and getting my pipeline right can swallow up half my dev time. No problem.
I express my intent for a Cloud Build pipeline, and moments later I have a fully valid YAML definition, along with a generated Dockerfile.
Antigravity created a Google Cloud Build pipeline for me
Next I asked Antigravity to add a deployment step so that the container image is pushed to a Cloud Run worker pool after a successful build. I needed to point Antigravity to a tutorial for worker pools for it to know about this new feature.
I’m using an API key in this solution, and didn’t want that stored as a regular environment variable or visible during deployment. Vibe coding doesn’t have to be insecure. I asked Antigravity to come up with a better way. It chose Google Cloud Secret Manager, gave me the commands to issue, and showed me what the Cloud Run deployment command would now look like.
Getting a proper, security-conscious deployment command for Cloud Run worker pools
I then told Antigravity to introduce this updated Cloud Run command to complete the build + deploy pipeline.
A complete, AI-generated CI/CD pipeline for my agentic app
Amazing! I wanted to test this out before putting an Angular frontend into the solution. Antigravity reminded my of the right way to format a Cloud Build command given the substitution variables and I was off.
Building and deploying this agent with Cloud Build
Within a few minutes, I had a container image in Artifact Registry, and a Cloud Run worker pool listening for work.
My running workload in Cloud Run worker pools
To test it out, I needed to publish a message to Google Cloud Pub/Sub. Antigravity gave me a sample JSON message structure that agent expected to receive. I went to Techmeme.com to grab a recent news headline as my source. Pub/Sub has a UI for manually sending a message into a Topic, so I used that.
Publishing a message to Pub/Sub to trigger my agent
After a moment, I saw a new JSON doc in my Cloud Storage bucket. Opening it up revealed a set of related news, and some interesting insights.
News analysis performed by my ADK agent and dropped into a Cloud Storage bucket
I also wanted to see more of Angular Signals in action, so I started a new project and prompted Antigravity to build out a site where I could submit news stories to my Pub/Sub topic. Once again, I passed in a reference guide into my prompt as context.
Prompting Antigravity to create a frontend app using Angular Signals
I asked Antigravity to show me how Angular Signals were used, and even asked it to sketch a diagram of the interaction. This is a much better way to learn a feature than hoping a static tutorial covers everything!
The first build turned out ok, but I wanted better handling of the calls to Google Cloud Pub/Sub. Specifically, I wanted this executed server side and after adding a comment to the the implementation plan, Antigravity came up with a backend-for-frontend pattern.
Directing Antigravity to support a backend for calls to Google Cloud
After a couple of iterations on look-and-feel, and one debugging session which revealed I was using the wrong Pub/Sub topic name, I had a fully working app.
After starting the server side component and the frontend component, I viewed my app interface.
The interface Antigravity built
Grabbing another headline from Techmeme gave me a chance to try this out. Angular Signals seems super smooth.
Adding a headline and seeing a dynamic frontend in action
Once again, my Cloud Storage bucket had some related links and analysis generated by ADK agent sitting in Cloud Run worker pools.
News analysis initiated from my Angular app
It took my longer to write this post than it did to build a fully working solution. How great is that?
For me, tutorials are now LLM input only. They’re useful context for LLMs teaching me things or building apps with my direction. How about you?