If you’re in the US, have a happy Thanksgiving holiday. I’ve got countless things to be thankful for. And if you’re outside the States, enjoy these two quiet days of work!
[blog] 2024: The State of Generative AI in the Enterprise. Lots of interesting data here. You all are majorly expanding your spend on generative AI apps and finding AI use cases. See here for some viable predictions.
[blog] My review is stuck – what now? Wow, this post offers some outstanding advice for those who are trying to get a pull request approved or even looked at.
[article] What causes ‘bad days’ for developers? Maybe stuck code reviews cause bad days, but there are other things too. This piece looks at research into what disrupts developers’ workdays.
Today was the last workday of the week as I’m taking the rest of the week off for the Thanksgiving holiday. Stay tuned for a reading list tomorrow, though!
[article] It’s Time to Reimagine Scale. Speaking of scale, I thought this was a thought-provoking piece about what it means to scale and how we might reassess success.
[blog] 7 examples of Gemini’s multimodal capabilities in action. Multimodal still feels underrated and people stick with chatbots. Expand your lens! There is so much more than LLMs like Gemini can do besides deal with textual input.
This slideshow could not be started. Try refreshing the page or viewing it in another browser.
AI eats the world. Flip through this very readable online slide deck for a good view of the opportunity and landscape for AI.
[blog] Introducing Google Developer Program premium membership. The free program is excellent with training credits, insider access, and more. But if you want Cloud credits, unlimited access to training, a cert voucher and more, this new premium (paid) tier looks great.
Want to get this update sent to you every day? Subscribe to my RSS feed or subscribe via email below:
Happy Monday. It’s a short week here in the States, and I seemed to fit a week’s worth of meetings into today. I’ll do reading lists through Wednesday!
[blog] Introducing the Model Context Protocol. It wouldn’t be surprising to see that we’re at a point in the AI ecosystem where open standards get proposed, and adopted.
[article] Start Presentations on the Second Slide. I like this advice. Too many folks spend excessive time on the setup and lose the audience before they get to the good stuff.
[blog] GoMLX: ML in Go without Python. Terrific post from Eli who shows that machine learning is expanding beyond it’s Python base.
[blog] Make IAM for GKE easier to use with Workload Identity Federation. Accessing cloud services from workloads running in Kubernetes? You don’t want to have to impersonate accounts, or embed credentials in the workload. Other options? This shows a great one.
Want to get this update sent to you every day? Subscribe to my RSS feed or subscribe via email below:
It’s been a good week, even though I’ve been under the weather. I’ve got a chance to rest up over this weekend and most of next week. I hope you also take a chance to recharge!
[article] In The Context Of Long Context. Here’s a wonderful post from Steven (who’s part of the NotebookLM effort) about the magic and importance of long context for LLMs.
[article] Auditors blast Pentagon over insecure, “antiquated” IT systems. Even when high-profile audits result in embarrassing findings, it’s hard to modernize the offending legacy systems. I can’t imagine how hard it is when the findings aren’t on the front page.
[blog] What’s new in Spring Modulith 1.3? I’ve been keeping an eye on this “modular monolith” framework from the Spring team. It’s making good progress.
[blog] Building a User Signals Platform at Airbnb. I always enjoy these types of posts where companies go deep into their architectures. This one looks at a stream processing system.
Want to get this update sent to you every day? Subscribe to my RSS feed or subscribe via email below:
[article] Google’s Gemini chatbot now has memory. It remembers. I mean, not in a creepy way. But if you want our Gemini agent to use past info to make future suggestions, you got it.
Had another good day in Sunnyvale today and I’m enjoying these chances to plan what, and how, we work in 2025. The industry keeps moving, even if I’m in all-day meetings, and there’s some good updates below.
[blog] How we built Google Meet’s adaptive audio feature. I assumed this was just a terrible fact of life. But no, it doesn’t HAVE to sound like death when people join a conference call from the same room.
[blog] Why Spring AI: The Seamless Path to Generative AI. Don’t sleep on Spring AI as a framework that stands to get traction. There’s a lot of Spring Boot out there, and this looks like a solid option for Java devs.
[blog] Playground Wisdom: Threads Beat Async/Await. Big, interesting post about blocking code, async processing, and why threads are better than the async/await abstraction.
[blog] Meet Angular v19. Big, big release of this popular frontend framework. Dig through this to see what matters, and what’s new/improved.
[blog] Batch prediction in Gemini. You want predictions for dozens, hundreds, or thousands of items in your store, portfolio, or account? Mete has a clear post that shows how to submit batches of requests to an LLM.
[article] p-Hacking your A/B tests. You might be making a mistake when running A/B tests for your app, marketing campaigns, or whatever. Jason says you shouldn’t stop a test once it looks like you got a “conclusive” result.
[blog] Scaling Ambient In Your Sleep. Quick post, but good to read if you skipped Istio the first time around because of too much complexity or too many scaling concerns.
I’m in Sunnyvale for the week. Today was a product leadership offsite, and I had fun talking to our senior product leaders. Enjoy the reading list below.
[blog] Platform Engineering as a Service. Does platform engineering bring order to the chaos that DevOps creates? Tyler thinks so, and offers up a solution.
[report] CNCF Technology Landscape Radar. If you’re a platform builder who is looking for open tech to bake into your stack, look at this new CNCF report that explores sentiment about some leading projects.
[blog] Meta Prompt Guard. Nervous about people tricking your AI agents into doing bad things? This post explores a lightweight classifier model from Meta that looks for malicious input.
[article] Let’s End Toxic Productivity. We have more conveniences than our grandparents did, but also seem to work more hours. Our standard of living is higher, as are our expectations, but still. This deep dive looks at how to step back and not overdo everything.
[blog] Gemini in Firebase for Data Connect queries. Here’s a good use case for LLMs. Firebase is using natural language prompts to generate GraphQL instead of you needing to know the full syntax.
Want to get this update sent to you every day? Subscribe to my RSS feed or subscribe via email below:
The ability to use your own codebase to customize the suggestions from an AI coding assist is a big deal. This feature—available in products like Gemini Code Assist, GitHub Copilot, and Tabnine—gives developers coding standards, data objects, error messages, and method signatures that they recognize from previous projects. Data shows that the acceptance rate for AI coding assistants goes way up when devs get back trusted results that look familiar. But I don’t just want up-to-date and familiar code that *I* wrote. How can I make sure my AI coding assistant gives me the freshest and best code possible? I used code customization in Gemini Code Assist to reference Google Cloud’s official code sample repos and now I get AI suggestions that feature the latest Cloud service updates and best practices for my preferred programming languages. Let me show you how I did it.
Last month, I showed how to use local codebase awareness in Gemini Code Assist (along with its 128,000 input token window) to “train” the model on the fly using code samples or docs that an LLM hasn’t been trained on yet. It’s a cool pattern, but also requires upfront understanding of what problem you want to solve, and work to stash examples into your code repo. Can I skip both steps?
Yes, Gemini Code Assist Enterprise is now available and I can point to existing code repos in GitHub or GitLab. When I reference a code repo, Google Cloud automatically crawls it, chunks it up, and stores it (encrypted) in a vector database within a dedicated project in my Google Cloud environment. Then, the Gemini Code Assist plugin uses that data as part of a RAG pattern when I ask for coding suggestions. By pointing at Google Cloud’s code sample repos—any best practice repo would apply here—I supercharge my recommendations with data the base LLM doesn’t have (or prioritize).
Step #0 – Prerequisites and considerations
Code customization is an “enterprise” feature of Gemini Code Assist, so it requires a subscription to that tier of service. There’s a promotional $19-per-month price until March of 2025, so tell your boss to get moving.
Also, this is currently available in US, European, and Asian regions, you may need to request geature access via a form (depending on when you read this), and today it works with GitHub.com and GitLab.com repos, although on-premises indexing is forthcoming. Good? Good. Let’s keep going.
Step #1 – Create the source repo
One wrinkle here is that you need to own the repos you ask Gemini Code Assist to index. You can’t just point at any random repo to index. Deal breaker? Nope.
I can just fork an existing repo into my own account! For example, here’s the Go samples repo from Google Cloud, and the Java one. Each one is stuffed with hundreds of coding examples for interacting with most of Google Cloud’s services. These repos are updated multiple times per week to ensure they include support for all the latest Cloud service features.
I went ahead and forked each repo in GitHub. You can do it via the CLI or in the web console.
I didn’t overthink it and kept the repository name the same.
Gemini Code Assist can index up to 950 repos (and more if really needed), so you could liberally refer to best-practice repos that will help your developers write better code.
Any time I want to refresh my fork to grab the latest code sample updates, I can do so.
Step #2 – Add a reference to the source repo
Now I needed to reference these repos for later code customization. Google Cloud Developer Connect is a service that maintains connections to source code sitting outside Google Cloud.
I started by choosing GitHub.com as my source code environment.
Then I named my Developer Connect connection.
Then I installed a GitHub app into my GitHub account. This app is what enables the loading of source data into the customization service. From here, I chose the specific repos that I wanted available to Developer Connect.
When finished, I had one of my own repos, and two best practice repos all added to Developer Connect.
That’s it! Now to point these linked repos to Gemini Code Assist.
Step #3 – Add a Gemini Code Assist customization index
I had just two CLI commands to execute.
First, I created a code customization index. You’ve got one index per Cloud project (although you can request more) and you create it with one command.
Next, I created a repository group for the index. You use these to control access to repos, and could have different ones for different dev audiences. Here’s where you actually point to a given repo that has the Developer Connect app installed.
I ran this command a few times to ensure that each of my three repos was added to the repository group (and index).
Indexing can take up to 24 hours, so here’s where you wait. After a day, I saw that all my target repos were successfully indexed.
Whenever I sync the fork with the latest updates to code samples, Gemini Code Assist will index the updated code automatically. And my IDE with Gemini Code Assist will have the freshest suggestions from our samples repo!
Step #4 – Use updated coding suggestions
Let’s prove that this worked.
I looked for a recent commit to the Go samples repos that the base Gemini Code Assist LLM wouldn’t know about yet. Here’s one that has new topic-creation parameters for our Managed Kafka service. I gave the prompt below to Gemini Code Assist. First, I used a project and account that was NOT tied to the code customization index.
//function to create a topic in Google Cloud Managed Kafka and include parameters for setting replicationfactor and partitioncount
The coding suggestion was good, but incomplete as it was missing the extra configs the service can now accept.
When I went to my Code Assist environment that did have code customization turned on, you see that the same prompt gave me a result that mirrored the latest Go sample code.
I tried a handful of Java and Go prompts, and I regularly (admittedly, not always) got back exactly what I wanted. Good prompt engineering might have helped me reach 100%, but I still appreciated the big increase in quality results. It was amazing to have hundreds of up-to-date Google-tested code samples to enrich my AI-provided suggestions!
AI coding assistants that offer code customization from your own repos are a difference maker. But don’t stop at your own code. Index other great code repos that represent the coding standards and fresh content your developers need!
Happy Friday. I’ve got lots of links again for you today! Enjoy your weekend and see y’all next week.
[blog] The 5 Cs: Configuring access to backing services. How do you set up configurations between app code and its database? Brian looks at what is needed, and wonders if there’s a better way.
[blog] Inference with Gemma using Dataflow and vLLM. I learned a least a half dozen things from reading this post. Cool look at what it takes to use an LLM in a streaming pipeline.
[article] “Reducing Complexity”. John makes great points here about how we use “complexity” as a shorthand for a lot of different problems.
[blog] Announcing .NET 9. I’m admittedly not doing much with C# right now, but these language updates are still a big milestone. I’m sure devs will pick up this version quickly.
[article] Why designing landing pages is hard. It is hard. Know who you’re targeting, and just accept that for pages with a wide audience, you can’t please everyone.
[blog] Generative epiphany. Analogies don’t have to be perfect to be helpful. I like how Katie used ideas from the containerization world to grok LLMs.
[blog] Spring Boot and Temporal. Sometimes we feel like pioneers as we navigate the mashup of technologies. Cornelia goes through an exploration to get this workflow engine to play with a Java Spring Boot app.