Author: Richard Seroter

  • How I’d use generative AI to modernize an app

    How I’d use generative AI to modernize an app

    I’m skeptical of anything that claims to make difficult things “easy.” Easy is relative. What’s simple for you might draw blood from me. And in my experience, when a product claims to make something “easy”, it’s talking about simplifying a subset of the broader, more complicated job-to-be-done.

    So I won’t sit here and tell you that generative AI makes app modernization easy. Nothing does. It’s hard work and is as much about technology as it is psychology and archeology. But AI can make it easier. We’ll take any help we can get, right? I count at least five ways I’d use generative AI to make smarter progress on my modernization journey.

    #1 Understand the codebase

    Have you been handed a pile of code and scripts before? Told to make sense of it and introduce some sort of feature enhancement? You might spend hours, days, or weeks figuring out the relationships between components and side effects of any changes.

    Generative AI is fairly helpful here. Especially now that things like Gemini 1.5 (with its 1 million token input) exist.

    I might use something like Gemini (or ChatGPT, or whatever) to ask questions about the code base and get ideas for how something might be used. This is where the “generative” part is handy. When I use the Duet AI assistance in to explain SQL in BigQuery, I get back a creative answer about possible uses for the resulting data.

    In your IDE, you might use Duet AI (or Copilot, Replit, Tabnine) to give detailed explanations of individual code files, shell scripts, YAML, or Dockerfiles. Even if you don’t decide to use any generative AI tools to write code, consider using them to explain it.

    #2 Incorporate new language/framework features

    Languages themselves modernize at a fairly rapid pace. Does your codebase rely on a pattern that was rad back in 2011? It happens. I’ve seen that generative AI is a handy way to modernize the code itself while teaching us how to apply the latest language features.

    For instance, Go generics are fairly new. If your Go app is more than 2 years old, it wouldn’t be using them. I could go into my Go app and ask my generative AI chat tool for advice on how to introduce generics to my existing code.

    Usefully, the Duet AI tooling also explains what it did, and why it matters.

    I might use the same types of tools to convert an old ASP.NET MVC app to the newer Minimal APIs structure. Or replace deprecated features from Spring Boot 3.0 with more modern alternatives. Look at generative AI tools as a way to bring your codebase into the current era of language features.

    #3 Improve code quality

    Part of modernizing an app may involve adding real test coverage. You’ll never continuously deploy an app if you can’t get reliable builds. And you won’t get reliable builds without good tests and a CI system.

    AI-assisted developer tools make it easier to add integration tests to your code. I can go into my Spring Boot app and get testing scaffolding for my existing functions.

    Consider using generative AI tools to help with broader tasks like defining an app-wide test suite. You can use these AI interfaces to brainstorm ideas, get testing templates, or even generate test data.

    In addition to test-related activities, you can use generative AI to check for security issues. These tools don’t care about your feelings; here, it’s calling out my terrible practices.

    Fortunately, I can also ask the tool to “fix” the code. You might find a few ways to use generative AI to help you refactor and improve the resilience and quality of the codebase.

    #4 Swap out old or unsupported components

    A big part of modernization is ensuring that a system is running fully supported components. Maybe that database, plugin, library, or entire framework is now retired, or people don’t want to work with it. AI tools can help with this conversion.

    For instance, maybe it’s time to swap out JavaScript frameworks. That app you built in 2014 with Backbone.js or jQuery is feeling creaky. You want to bring in React or Angular instead. I’ve had some luck coaxing generative AI tools into giving me working versions of just that. Even if you use AI chat tools to walk you through the steps (versus converting all the code), it’s a time-saver.

    The same may apply to upgrades from Java 8 to Java 21, or going from classic .NET Framework to modern .NET. Heck, you can even have some luck switching from COBOL to Go. I wouldn’t blindly trust these tools to convert code; audit aggressively and ensure you understand the new codebase. But these tools may jump start your work and cut out some of the toil.

    #5 Upgrade the architecture

    Sometimes an app modernization requires some open-heart surgery. It’s not about light refactoring or swapping a frontend framework. No, there are times where you’re yanking out major pieces or making material changes.

    I’ve had some positive experiences asking generative AI tools to help me upgrade a SOAP service to REST. Or REST to gRPC. You might use these tools to switch from a stored procedure-heavy system to one that puts the logic into code components instead. Speaking of databases, you could change from MySQL to Cloud Spanner, or even change a non-relational database dependency back to a relational one. Will generative AI do all the work? Probably not, but much of it’s pretty good.

    This might be a time to make bigger changes like swapping from one cloud to another, or adding a major layer of infrastructure-as-code templates to your system. I’ve seen good results from generative AI tools here too. In some cases, a modernization project is your chance to introduce real, lasting changes to a architecture. Don’t waste the opportunity!

    Wrap Up

    Generative AI won’t eliminate the work of modernizing an app. There’s lots of work to do to understand, transform, document, and rollout code. AI tools can make a big difference, though, and you’re tying a hand behind your back if you ignore it! What other uses for app modernization come to mind?

  • Daily Reading List – February 20th, 2024 (#262)

    Yesterday was a holiday here in the States, so I’m back today with extra content. Enjoy!

    [article] Engineering Practices for LLM Application Development. Some of the engineering tasks and practices will differ based on the stack(s) you use, but many items seem universal. This article looks at automated and adversarial testing of LLM apps.

    [article] What is Hugging Face? Funny name, important platform. This was a surprisingly in-depth look at the platform that matters a lot in 2024.

    [blog] What’s new in Flutter 3.19. I like that a quarter of the community contributions in this release of the popular app framework came from first-time contributors. More on Dart SDK for Gemini. And Flutter’s 2024 roadmap.

    [blog] Reduce, reuse, recycle: McDonald’s reusable workflows. This post from their engineering team looks at how they use GitHub Actions to create some golden paths for continuous integration.

    [blog] The Future of Java Performance in Cloud Run: Native Java, CRaC and Project Leyden. The Java ecosystem continues to explore ways to build more performant apps. Here’s a look at some projects you should keep an eye on.

    [blog] Choosing Good SLIs. Do you have a useful set of service level indicators? Tyler has a useful post that calls out 3 that matter.

    [blog] Coming of age in the fifth epoch of distributed computing, accelerated by machine learning. How did we get to this wacky AI age? What computing paradigms set everything in motion? This is a good view (and infographic!) of the major epochs.

    [article] Making cloud infrastructure programmable for developers. Maybe we’ve hit peak YAML for infrastructure as code? The use of general programming languages for infrastructure management seems more appealing nowadays.

    [blog] Cloud CISO Perspectives: Guidance from our latest Threat Horizons report. Tons of links in this update. Good read if you want a view on current thinking on security.

    [blog] One Billion Rows Challenge in Golang. Java folks started this “one billion row challenge” to see how fast they could process a giant data file. Shraddha wanted to try it in Go and shares thoughts on ways to do it.

    [article] Orchestrating Resilience: Building Modern Asynchronous Systems. Distributed systems offer solutions to many problems, but also create problems of their own. One of those is handing retries for failed requests.

    ##

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

  • Daily Reading List – February 16th, 2024 (#261)

    Took a 16.5 hour flight today to get from Delhi to Newark. Then tomorrow morning I’ll fly home to California. Thank goodness for solid airplane wifi! Check out my reading list from today’s flight.

    [blog] Feel the Next ‘24 love: Full session library is now live. We’re getting closer to Cloud Next, our biggest event of the year. The session catalog is outstanding with tons of deep technical content.

    [article] How to Stay Grounded Through Organizational Chaos. If you’re surrounded by stability, that’s great. That’s not typical nowadays. This is a good article about how to handle turbulence at work.

    [blog] Your RAGs powered by Google Search technology, part 1. Here’s a very detailed post (and part 2) on using a Google-quality search in LLM and RAG-based apps.

    [blog] Tool of First Resort: Israel-Hamas War in Cyber. Our security team shares information about the cyber threats we’ve monitored in the Middle East.

    [blog] What is a long context window? Maybe there’s less need for RAG if you can stuff most of the necessary supporting info into the model’s context window. Learn more about what that means.

    [article] 10 ways generative AI will transform software development. This is a substantive post that explores a few ways AI will shake up the SDLC and software overall.

    [blog] Introducing vector search in BigQuery. Perform vector similarity searches on BigQuery data. There’s no data service anywhere quite like BigQuery.

    [article] Generative AI: Shaping a New Future for Fraud Prevention. Neha shares an interesting perspective about types of fraud, the evolution of detection, and how generative AI may improve our chances.

    [blog] Angular v17.2 is now available. Good summary of the new release of this popular frontend web framework. Related post on new Material 3 support.

    [blog] Supercharge your apps with Firebase and the Gemini API. New extensions for Firebase make it easier to build your own chatbot or consume Gemini’s multimodal endpoint.

    ##

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

  • Daily Reading List – February 15th, 2024 (#260)

    Yesterday got away from me as we had a day of meetings in Bengaluru, and then flew to Delhi. Some travel snafus meant I arrived at my hotel after midnight. So today, you get a double edition!

    [blog] Our next-generation model: Gemini 1.5. Ultra is now available, and 1.5 will come with the same quality with less compute consumption. And, up to 1m input tokens.

    [article] 3 Types of Overthinking — and How to Overcome Them. Are you an overthinker? I’m probably and under-thinker, which is it’s own problem. I thought this was a good piece on how to break out of churning thoughts.

    [blog] Cloud without Kubernetes. Compared to traditional alternatives (managing a system across disparate VMs), Kubernetes is a clear step up. But it’s also over-kill for many scenarios too. Tyler has a pointy perspective on it, and encourages you to just use Cloud Run.

    [blog] Using ChatGPT to Analyze Your Code? Not So Fast. Can AI-assisted products help us find code defects? This SEI study shows that ChatGPT correctly identified non-compliant code about 46.5% of the time.

    [blog] How machine learning keeps contributed content helpful. It’s going to be harder to trust product reviews if we can’t tell AI-generated noise from legit insights. This Google post looks at how we’re fighting fake reviews.

    [article] Is AI making our code stupid? You’ll want AI-assisted tooling for devs. But be thoughtful about how you use it!

    [article] Mainframes solidify hold on core enterprise systems. Investments are staying the same or even going up in some cases. Modernization projects are poorly funded. It’s here to stay.

    [blog] Cloud Monitoring now offers PromQL alerting and importing dashboards from Grafana. I like that our monitoring service is friendly to standard open source tools and specs. If you use Prometheus and Grafana, you’ll find a lot of usefulness here.

    [article] How Netflix Ensures Highly-Reliable Online Stateful Systems. How do you create reliability in your apps and APIs when you have very stateful services? This article/video explains the Netflix approach.

    [blog] Product Leadership Theater. Marty has some pointed words to product leaders who blame senior execs for their struggles in their product organizations.

    ##

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

  • Daily Reading List – February 13th, 2024 (#259)

    Tuesday is done here in Bangalore, and my day started at 330am with a work call. That sort of thing gives me fresh recognition for how West Coast folks need to be more considerate of others! The rest of the day was great, and I had a good time learning from customers and presenting at our AI roadshow.

    [blog] The Return of the Pendulum: Consolidation is Here. If you are part of this industry for long enough, you see these swings between specialized products/platforms, and consolidated ones. Stephen is seeing us move back towards consolidation.

    [article] Got a Radical Idea at Work? Find a Partner. It can be difficult, and tiring, to champion a disruptive change all by yourself. This HBR article encourages you to team up.

    [article] Cynicism is the mind-killer. I’m annoyingly optimistic, not because there aren’t bad things that happen, but because a constantly-negative focus drains your soul. I’m glad my friend Forrest is pivoting his newsletter to focus more on inspiring and uplifting tech projects.

    [blog] Beyond recall: Evaluating Gemini with Vertex AI Auto SxS. There’s a decent chance you’ll use more than one LLM at your company. How do you reasonably compare them? This new Vertex service makes it much easier.

    [article] Why companies are leaving the cloud. Is it possible that folks are moving workloads around? Absolutely. Is there some mass exodus happening? No way. Vastly more is coming in than going out!

    [article] Go language hits top 10 in the Tiobe index. I like seeing Go rise in popularity. It’s a great language that’s become my go-to.

    [blog] Scaling Character.AI: How AlloyDB for PostgreSQL and Spanner met their growing needs. Have you played with Character.AI yet? They’re growing quickly and refactoring often. Here’s there’s current architecture, and where they want to go next.

    ##

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

  • Daily Reading List – February 12th, 2024 (#258)

    Greetings from India! 32 hours of travel later, I was mostly raring to go. Today was an office day and it was great meeting teammates and hearing about what matters most to them. Tomorrow, we’ve got a hands-on generative AI event with WAY too many people signed up to attend.

    [blog] The next chapter of our Gemini era. So this was a big deal last week, and I caught up on the posts today. New models, unified branding, and a vertical integration that’s unmatched in the industry. More here.

    [blog] Analyzing customer feedback at scale — from Google Sheets to BigQuery!. Alicia previously demonstrated using cloud spreadsheets to do sentiment analysis, and now she’s upgraded to BigQuery. Good post.

    [blog] How I write HTTP services in Go after 13 years. This is NOT how I write HTTP service in Go because I’m not very good at it. I learned a dozen things while reading this.

    [blog] Medical Text Processing on Google Cloud. This is where AI seems clearly helpful. Doing OCR, document processing, and classification is a real use case.

    [article] Get started with Flask 3.0. I don’t really know or use Python (yet), but this was a good read for learning about this popular web framework.

    [blog] Cut Container Startup Time for Better Performance and Costs — Part1. When I’m first learning a technology, I’m not obsessed with optimization. It’s just about getting the fundamentals down. But once you do—in this case, with Kubernetes—it’s worthwhile to know the “right” way to set things up.

    [site] Prompt Engineering Guide: Gemini Advanced. This site offers prompt guidance for a number of popular LLMs. This new page shows some of the powerful features of Gemini.

    ##

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

  • Daily Reading List – February 8, 2024 (#257)

    I’m off to India tomorrow for a week of meeting with team members, customers, and developers. Depending on airplane wifi, I may or may not be publishing a reading list. Next week, I’ll plan on publishing each day!

    [blog] Deploying Kafka Cluster on GKE with Kraft Mode (without Zookeeper). This is easier than I remembered. Here’s a good walkthrough of setting up a modern Kafka cluster on Kubernetes.

    [blog] Behind the Scenes: Crafting an Autoscaler for Apache Beam in a High-Volume Streaming Environment. Lots of details in this post by the Palo Alto Networks crew. Even if you use other tech for data stream processing, there’s something to learn here.

    [blog] Opinionated Istio Feature Recommendations. Brutal honesty. I love it! From an Istio maintainer comes this look at what you should use, and what you should avoid.

    [blog] Go 1.22 is released! There are some nice little updates in this release. Worth checking out yourself.

    [blog] Google AlloyDB is getting Public IP. It’s convenient to slap a public IP on your database, but not always the best idea. Gleb has details here on the how, and when.

    [blog] Remix Takes on Next.js in Battle of the React Frameworks. I’m not sure you should fall in love with any particular JavaScript framework. There’s enough churn and new entrants to make migration inevitable!

    [article] The Building Blocks of LLMs: Vectors, Tokens and Embeddings. Most won’t need this knowledge, but many of us should at least have some familiarity with the concepts.

    [blog] Start your cloud networking journey today. This post is summarizes a new set of hands-on learning opportunities for people who want to get into cloud networking.

    ##

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

  • Daily Reading List – February 7, 2024 (#256)

    Eleven different meetings today with so much content switching that I’m experiencing whiplash. But they were all good sessions, and I’m excited about the things we’re up to. Somehow I also happened to read a lot of items today, so enjoy the list below.

    [blog] My Current Approach To Software Delivery. Have you documented your philosophy around software delivery, or leadership overall? It’s actually something I’ve started, so this post resonated with me.

    [blog] Firestore Multiple Databases is now generally available. We used to just let you provision a single Firestore (NoSQL) database per Google Cloud project. Now you can deploy many using the console, Terraform, and SDKs.

    [article] Why developers should put the database first. Do you start with the database when building software? This article explores the centricity of data in modern apps, and a new abstraction that may help devs spend less time messing with their database of choice.

    [article] Retrieval-augmented generation, step by step. This lengthy article explains what RAG is, some use cases, and then offers a tutorial.

    [blog] Faster startup times for Kubernetes workloads with Kube Startup CPU Boost. This is terrific. Install this controller into your cluster to “boost” resource allocation for pods when they start up.

    [article] Ephemeral Execution Is the Future of Computing, but What About the Data? This video plus transcript focuses on Tekton—it’s an open source engine for CI/CD—as the example of compute services that are short lived.

    [blog] Improving Interoperability Between Rust and C++. We care about the health and growth of the Rust language, and it’s cool to see an investment here to make interop better.

    [youtube-video] Top 3 Google Cloud tips for Firebase developers. Firebase is a top cloud for learners, and many folks add Google Cloud services to their architectures. This great video shows 3 popular scenarios.

    [blog] The Great Migration, MySQL Edition. Flipkart uses a ton of MySQL. How did they move a giant fleet from one data center to another? Good description here.

    [blog] Graph neural networks in TensorFlow. This looks like some cool work for building graph neural networks. And you can try it out yourself in Colab.

    [lab] Create a Cloud Run service with a sidecar. Our code labs are an easy way to do step-by-step learning about cloud services. This one helps you build a sidecar that works with your serverless workload.

    [article] Pivotal Founder Rob Mee’s New Startup Is Using AI To Drag Ancient Mainframes Into The Cloud. I think I count four different consultancies that spawned from Pivotal, and Rob’s is doing some creative work to make modernization a reality for companies stuck on mainframes.

    ##

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

  • Daily Reading List – February 6, 2024 (#255)

    On a whim, I tried asking Vertex AI to generate an image of a “Richard in an office” and was disappointed that similar requests for “Scott” and “Cheng” looked a LOT cooler than “Richard.” We’re going to need to shut down this AI thing until we can get to the bottom of it.

    [blog] No GPU? No problem. localllm lets you develop gen AI apps on local CPUs. Here’s a new (open) tool and process for working with LLMs on machines that don’t have GPUs.

    [blog] The Importance of Attending Conferences. Online learning doesn’t replace what you get from in-person gatherings. The networking is better, the learning is more focused, and the ideas are more free-flowing. It’s also more expensive. But, companies should value the long-term investment.

    [blog] Visualize PaLM-based LLM tokens. The LLM-mania has really sparked some great creativity. My colleague built an app that helps you understand token counts in your prompts.

    [article] 4 Secrets Of High-Performing Teams. Give this a good read and internalize these points around team structure, effectiveness, interactions, and leadership.

    [blog] Using Vertex AI Gemini REST API (C# and Rust). Every API doesn’t have a corresponding SDK. That’s ok, but it does mean you have to dig deeper to understand the low-level interactions, even including authentication. Mete shows a useful example here.

    [article] Can Enterprise DevOps Ever Measure Up? DevOps has been around a while. Why are big companies still having a tough time making progress on key measures? Do we even agree on the measures? This article explores.

    [docs] Regional deployment on Compute Engine. As much as I like fully-managed compute platforms, I recognize that most of the world’s software is running on piles of VMs. This new architecture guide looks at deploying an app across zones in a cloud region.

    [blog] DotSlash: Simplified executable deployment. This new open source tool from Meta saves them from sticking platform-specific executables next to projects that rely on them.

    [blog] Practical Guide to Generating Embeddings in AlloyDB with Google ML Integration. I’m still in the “reading about” phase with embeddings and vector databases. This post is helpful whether you’re like me, or actually starting to implement solutions.

    ##

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

  • Daily Reading List – February 5, 2024 (#254)

    It’s a short week for me as I’m departing on an international trip on Friday. Much of today was spent chatting with Google Cloud Next speakers and plotting our developer keynote. I also read some fairly provocative items today, which you’ll find below.

    [blog] Building Your Own Search Engine with Vertex AI Search. This walks through a very cool way to create a personalized search experience with your own data, and embed the results in an app or web page.

    [article] 5 Bottlenecks Impacting RAG Pipeline Efficiency in Production. I’d bet that many folks are in the “learn” stage versus the “optimize” stage, but Jani offers useful advice for things to consider before taking your retrieval augmented generation process to production.

    [article] Could Remote Work Hurt On-the-Job Learning? This wouldn’t be a popular take among the tech folks in my circle, but we should be exposed to counter viewpoints, no? Is remote work hurting our personal development?

    [blog] Is it time to ditch MySQL and PostgreSQL for SQLite? I saw a lot of chatter lately about this underrated database. Is it the right choice for “real” workloads? Many say yes.

    [article] Microsoft’s New Future of Work Report. This provides an overview of work from Microsoft about AI in the workplace. In the years ahead, they see analysis as a more important AI use case than generation.

    [blog] We Forgot Frontend Basics. Do all these fancy frameworks cause us to forget the fundamentals? The author here says that there’s basic HTML and CSS that is a substitute for a dozen lines of complex JavaScript. Related post I read today.

    [blog] You are never taught how to build quality software. There are many things that I wasn’t explicitly “taught.” That’s likely a problem. Do we just “teach” the basics of management, architecture, programming, and whatever, and leave the deep learning to on-the-job experience?

    [article] Deutsche Börse Group overcomes “hesitant stakeholders, cautious regulators” moves ERP to GCP. Good story about an environment that has to “just work”, but also where innovation matters long-term.

    ##

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