Author: Richard Seroter

  • Daily Reading List – November 30, 2023 (#214)

    I came across a good mix of content today that you’ll find referenced below. There are some solid pieces that touch on how we work, and how we measure impact.

    [article] Adopting Asynchronous Collaboration in Distributed Software Teams. It looks like many developers aren’t getting the desired amount of “deep work” done because of interruptions. This proposes a more async, less meeting-focused, model.

    [blog] Developer Friendly Networking that keeps up with your development velocity. is there such a thing as “developer friendly networking”? I dunno. But this post looks at ways to get security benefits while empowering devs.

    [blog] Fighting money launderers with artificial intelligence at HSBC. I like the specific examples offered here. Using AI for more accurate risk detection, reducing processing time, and finding criminal patterns seems practical and valuable.

    [blog] Part 3: Draft Content That’s Accurate, Consistent, And Concise. Good post that emphasizes the importance of quality content in your tech docs, not just flashy titles and formatting.

    [article] AI Will Drive Streaming Data Use — But Not Yet, Report Says. Somehow everything is attached to AI nowadays. This analysis looks at a recent survey about the growth of streaming data.

    [blog] Nobl9’s Reliability AI, Powered by Google. I enjoy seeing innovative platforms built atop innovative platforms. The Nobl9 crew do some leading work helping companies manage with SLOs, and their newest product is powered by Google Cloud’s Vertex AI.

    [blog] The Developer Ecosystem in 2023: Key Trends for C#. This offers a deeper dive into one part of the survey I linked to a couple days ago. .NET devs seem to stay up to date on tools, which is good.

    [blog] Introducing sample GenAI Databases Retrieval App – augment your LLMs with Google Cloud databases. I learn a lot better from reference code than from reading piles of whitepapers. This is a terrific sample app that shows off a few key ideas for generative AI.

    [article] Measuring the Impact of Your Platform Engineering Strategy. Platform engineering could risk becoming a short-lived fad in the enterprise unless teams find the right metrics that demonstrate crisp value and impact.

    ##

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

  • Daily Reading List – November 29, 2023 (#213)

    We’re in the midst of our employee review period, which we do quarterly. At first, I really disliked this regular “check in” process which felt neverending to me. But now I’ve seen the usefulness of forcing ongoing conversations about performance and goals throughout the org. We course-correct faster, and there should be fewer surprises during the “annual review.” How often do you have formal check-ins with your manager?

    [blog] The Fairytale Narrative: Structured strategic planning. Storytelling isn’t just for “creatives” who make art. It’s what separates good technologists from exceptional ones.

    [article] KubeCon NA 2023: Ishan Sharma on Real-Time Generative AI for Gaming Apps Running on Kubernetes. Out of necessity, gaming companies often adopt new tech quickly so they can find ways to scale better and offer exciting capabilities. Here’s a look at options for supporting Generative AI with gaming apps running on Kubernetes.

    [blog] Clean Up Code Cruft. When you permit incremental disorder and decay to continue, you end up with a real mess. This post encourages us to keep our codebase tidy.

    [article] Cloud Native Users Struggle to Achieve Benefits, Report Says. Doing “cloud-native” or “modern” software isn’t a matter of buying a particular product or hiring a certain person. Without a fundamental change in culture and tools, it’ll be tough. The investment is worth it.

    [blog] Minimum viable *. Deconstruct big problems, create some value, learn, and iterate. Brian says we can apply the MVP approach to all sorts of other areas too.

    [blog] GenAI apps: Deploy LangChain on Cloud Run with LangServe. These are two technologies that are designed to make hard things easier. I like seeing the pairing.

    [blog] Alternatives To Product Managers. One way or another, you’re doing product management. You may have product owners, or program managers, or engineers playing the role. This post looks at the alternatives, and why the real thing matters.

    [blog] Multi-language libraries and samples for GenAI in Vertex AI. Why should Python devs have all the fun? Whether you know Java, C#, Go, Ruby or whatever, we’re making it easier to use generative AI.

    [blog] Send Event from SAP to Pub/Sub: Enabling SAP as a Pub/Sub Publisher. Here’s a good post on routing events from SAP. And a related post on sending events into SAP.

    [blog] At GitHub Universe, Copilot Takes Center Stage, But Questions About The Platform Persist. Forrester gives kudos to some great work by GitHub on their AI assistant. They also point out areas where more is needed to be truly useful in the enterprise.

    ##

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

  • Daily Reading List – November 28, 2023 (#212)

    Happy Tuesday! It’s re:Invent week, so many eyes are on what our friends at AWS are up to. You can read about what they announced, chuckle over the cheap shots, and enjoy our fun with them. And then get into some very interesting reads below.

    [blog] Bait & Switch. The zero-interest-rate phenomenon led to some unsustainably low prices. And then we’re all surprised when prices go up. This is a reminder for product builders.

    [blog] Using Ollama with LangChainGo. We’ve seen LangChain ports for Java, and now Go. And here’s how to do some local LLM testing.

    [article] AI hype isn’t helping anyone. The hype is legit—also see this post today on its “unprecedented” pace of adoption. Don’t think for a moment that this is a fad. But without confidence in security, as Matt points out here, much of the promise will be unrealized.

    [article] The Roots of Today’s Modern Backend Engineering Practices. There’s some good tech history in this post.

    [blog] Barriers to Flow. This is an important post to skim through. What do developers say takes them out of a flow state? How many of these do you think you’re fixing by buying new tools?

    [blog] Patterns of Distributed Systems. Plenty of folks prefer to learn through blog posts and videos, but many of us still enjoy a long-form book that really digs into a topic. I might be adding this one to the shelf.

    [blog] Can AI Code Assistants Really Teach Junior Developers to Code? Ask a Redditor. For new developers, is AI an expert pair programmer, or a really good study partner? Kate’s investigation concludes that it’s more of the latter.

    [blog] Why OpenTelemetry Is the Next Big Thing in API Monitoring. This popular CNCF project has good support among vendor products. Learn more about why it matters.

    [blog] Women in ML Symposium 2023: Meet the presenters. There are tons of amazing women in our industry, and this looks like a terrific forum to learn from some experts.

    [article] InfoQ Java Trends Report – November 2023. What do Java experts see as the core adoption trends in the Java space? Here’s a good look.

    ##

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

  • Daily Reading List – November 27, 2023 (#211)

    I’m back after a few days of eating turkey and apple pie, while spending time with family and friends. Today was a zoo as everyone was back and fired up, and I’m here for it. Enjoy some fun content today.

    [report] The State of Developer Ecosystem 2023. Outstanding edition this year and all of you should click through it. This survey offers a terrific look at what developers are using, how they’re working, and what their motivation is.

    [blog] Top 6 ORMs for Modern Node.js App Development. I’ve never been a big ORM guy, and usually just went directly at the database and yanked out the results I needed. But, some of these are pretty nice and make it much easier to work with databases from your app.

    [blog] What’s 🔥 in Enterprise IT/VC #369. There’s a good intro in this week’s edition, with a focus on finding the “right” customers early on.

    [article] Providing a Personalized Experience to Millions of Users @BBC. Good look at the architecture and considerations for delivering personalization at scale.

    [article] Can GenAI Do Strategy? We talk about hallucinations and bias in AI models, but remember that humans have those problems too. Generative AI did a pretty good job in this example.

    [article] Does Kubernetes Really Perform Better on Bare Metal vs. VMs? The writer works for a place that sells bare metal for Kubernetes, but nonetheless, there’s a valid argument to be made here.

    [blog] When To Refactor Code – How To Maximize Efficiency And Minimizing Tech Debt. Do you have a trigger point for when you revisit your existing codebase and start making underlying improvements? Does it take a new feature or project to kick it off? Or is there regular maintenance of existing codebases? This post offers some guidance on how to tackle it.

    ##

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

  • Daily Reading List – November 22, 2023 (#210)

    Had a quiet day clearing out my inbox and having a few meetings ahead of the upcoming US holiday. I’ll be taking Thursday and Friday off from the daily reading list, but should be back on Monday the 27th!

    [blog] Broadcom announces successful acquisition of VMware. Thus ends a very long acquisition process for my friends at VMware. I hope this proves to be a great pairing.

    [blog] Integrating langchain4j and PaLM 2 Text Bison Model. Soon, we’re going to see even easier abstractions for talking to LLMs. Don’t wait for that. Learn the “harder way” now (which actually isn’t too hard!) to understand the fundamentals, and then enjoy the simplicity that’s coming.

    [blog] gRPC vs. REST. Both are good choices for service communication in your app architecture. Read this to understand the differences.

    [blog] Debugging Your Go Applications. When you can successfully troubleshoot a technology, that’s when you really know it! This is a good look at aspects of troubleshooting a Go app.

    [blog] Adding runtime threat detection to Google Kubernetes Engine with Falco. AI stuff seems to drown everything else out, but there’s tons of other software out there that deserves attention. Especially security-related software, as Mike shows off here.

    [article] Google Says You Might Be Doing DORA Metrics Wrong. This article goes deep into the DORA program, what it means to measure performance, whether engineers understand the DORA metrics, and more.

    ##

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

  • Building an event-driven architecture in the cloud? These are three approaches for generating events.

    Building an event-driven architecture in the cloud? These are three approaches for generating events.

    When my son was 3 years old, he would often get out of bed WAAAAY too early and want to play with me. I’d send him back to bed, and inevitably he’d check in again just a few minutes later. Eventually, we got him a clock with a timed light on it, so there was a clear trigger that it was time to get up.

    Originally, my son was like a polling component that keeps asking “is it time yet?” I’ve built many of those myself in software. It’s a simple way to produce an event (“time to get up”, or “new order received”) when it’s the proper moment. But these pull-based approaches are remarkably inefficient and often return empty results until the time is right. Getting my son a clock that turned green when it was time to get out of bed is more like a push-based approach where the system tells you when something happened.

    In software, there are legit reasons to do pull-based activities—maybe you intentionally want to batch the data retrieval and process it once a day—but it’s more common nowadays to see architects and developers embrace a push-driven event-based architecture that can operate in near real-time. Cloud platforms make this much easier to set up than it used to be with on-premises software!

    I see three ways to activate events in your cloud architecture. Let’s look at examples of each.

    Events automatically generated by service changes

    This is all about creating event when something happens to the cloud service. Did someone create a new IAM role? Build a Kubernetes cluster? Delete a database backup? Update a machine learning model?

    The major hyperscale cloud providers offer managed services that capture and route these events. AWS offers Amazon EventBridge, Microsoft gives you Azure Event Grid, and Google Cloud serves up Eventarc. Instead of creating your own polling component, retry logic, data schemas, observability system, and hosting infrastructure, you can use a fully managed end-to-end option in the cloud. Yes, please. Let’s look at doing this with Eventarc.

    I can create triggers for most Google Cloud services, then choose among all the possible events for each service, provide any filters for what I’m looking for, and then choose a destination. Supported destinations for the routed event include serverless functions (Cloud Functions), serverless containers (Cloud Run), declarative workflow (Cloud Workflows), a Kubernetes service (GKE), or a random internal HTTP endpoint.

    Starting here assumes I have a event destination pre-configured to receive the CloudEvents-encoded event. Let’s assume I don’t have anything in place to “catch” the event and need to create a new Cloud Function.

    When I create a new Cloud Function, I have a choice of picking a non-HTTP trigger. This flys open an Eventarc pane where I follow the same steps as above. Here, I chose to catch the “enable service account” event for IAM.

    Then I get function code that shows me how to read the key data from the CloudEvent payload. Handy!

    Use these sorts of services to build loosely-coupled solutions to react to what’s going on in our cloud environment.

    Events automatically generated by data changes

    This is the category most of us are familiar with. Here, it’s about change data capture (CDC) that triggers an event based on new, updated, or deleted data in some data source.

    Databases

    Again, in most hyperscale clouds, you’ll find databases with CDC interfaces built in. I found three within Google Cloud: Cloud Spanner, Bigtable, and Firestore.

    Cloud Spanner, our cloud-native relational database, offers change streams. You can “watch” an entire database, or narrow it down to specific tables or columns. Each data change record has the name of the affected table, the before-and-after data values, and a timestamp. We can read these change streams within our Dataflow product, calling the Spanner API, or using the Kafka connector. Learn more here.

    Bigtable, our key-value database service, also supports change streams. Every data change record contains a bunch of relevant metadata, but does not contain the “old” value of the database record. Similar to Spanner, you can read Bigtable change streams using Dataflow or the Java client library. Learn more here.

    Firestore is our NoSQL cloud database that’s often associated with the Firebase platform. This database has a feature to create listeners on a particular document or document collection. It’s different from the previous options, and looks like it’s mostly something you’d call from code. Learn more here.

    Some of our other databases like Cloud SQL support CDC using their native database engine (e.g. SQL Server), or can leverage our manage change data capture service called Datastream. Datastream pulls from PostgreSQL, MySQL, and Oracle data sources and publishes real-time changes to storage or analytical destinations.

    “Other” services

    There is plenty of “data” in systems that aren’t “databases.” What if you want events from those? I looked through Google Cloud services and saw many others that can automatically send change events to Google Cloud Pub/Sub (our message broker) that you can then subscribe to. Some of these look like a mix of the first category (notifications about a service) and this category (notifications about data in the service):

    • Cloud Storage. When objects change in Cloud Storage, you can send notifications to Pub/Sub. The payload contains info about the type of event, the bucket ID, and the name of the object itself.
    • Cloud Build. Whenever your build state changes in Cloud Build (our CI engine), you can have a message sent to Pub/Sub. These events go to a fixed topic called “cloud-builds” and the event message holds a JSON version of your build resource. You can configure either push or pull subscriptions for these messages.
    • Artifact Registry. Want to set up an event for changes to Docker repositories? You can get messages for image uploads, new tags, or image deletions. Here’s how to set it up.
    • Artifact Analysis. This package scanning tool look for vulnerabilities, and you can send notifications to Pub/Sub when vulnerabilities are discovered. The simple payloads tell you what happened, and when.
    • Cloud Deploy. Our continuous deployment tool also offers notifications about changes to resources (rollouts, pipelines), when approvals are needed, or when a pipeline is advancing phases. It can be handy to use these notifications to kick off further stages in your workflows.
    • GKE. Our managed Kubernetes service also offers automatic notifications. These apply at the cluster level versus events about individual workloads. But you can get events about security bulletins for the cluster, new GKE versions, and more.
    • Cloud Monitoring Alerts. Our built-in monitoring service can send alerts to all sorts of notification channels including email, PagerDuty, SMS, Slack, Google Chat, and yes, Pub/Sub. It’s useful to have metric alert events routing through your messaging system, and you can see how to configure that here.
    • Healthcare API. This capability isn’t just for general-purpose cloud services. We offer a rich API for ingesting, storing, analyzing, and integrating healthcare data. You can set up automatic events for FHIR, HL7 resources, and more. You get metadata attributes and an identifier for the data record.

    And there are likely other services I missed! Many cloud services have built-in triggers that route events to downstream components in your architecture.

    Events manually generated by code or DIY orchestration

    Sometimes you need fine-grained control for generating events. You might use code or services to generate and publish events.

    First, you may wire up managed services to do your work. Maybe you use Azure Logic Apps or Google Cloud App Integration to schedule a database poll every hour, and then route any relevant database records as individual events. Or you use a data processing engine like Google Cloud Dataflow to generate batch or real-time messages from data sources into Pub/Sub or another data destination. And of course, you may use third-party integration platform that retrieve data from services and generates events.

    Secondly, you may hand-craft an event in your code. Your app could generate events when specific things happen in your business logic. Every cloud offers a managed messaging service, and you can always send events from your code to best-of-breed products like RabbitMQ, Apache Kafka, or NATS.

    In this short example, I’m generating an event from within a Google Cloud Function and sending it to Pub/Sub. BTW, since Cloud Functions and Pub/Sub both have generous free tiers, you can follow along at no cost.

    I created a brand new function and chose Node.js 20 as my language/framework. I added a single reference to the package.json file:

    "@google-cloud/pubsub": "4.0.7"
    

    Then I updated the default index.js code with a reference to the pubsub package, and added code to publish the incoming querystring value as an event to Pub/Sub.

    const functions = require('@google-cloud/functions-framework');
    const {PubSub} = require('@google-cloud/pubsub');
    
    functions.http('helloHttp', (req, res) => {
    
      var projectId = 'seroter-project-base'; 
      var topicNameOrId = 'custom-event-router';
    
      // Instantiates a client
      const pubsub = new PubSub({projectId});
      const topic = pubsub.topic(topicNameOrId);
    
      // Send a message to the topic
      topic.publishMessage({data: Buffer.from('Test message from ' + req.query.name)});
    
      // return result
      res.send(`Hello ${req.query.name || req.body.name || 'World'}!`);
    });
    

    That’s it. Once I deployed the function and called the endpoint with a querystring, I saw all the messages show up in Pub/Sub, ready to be consumed.

    Wrap

    Creating and processing events using managed services in the cloud is powerful. It can both simplify and complicate your architecture. It can make it simpler by getting rid of all the machinery to poll and process data from your data sources. Events make your architecture more dynamic and reactive. And that’s where it can get more complicated if you’re not careful. Instead of a clumsy, but predictable set of code that pulls data and processes it inline, now you might have a handful of loosely-coupled components that are lightly orchestrated. Do what makes sense, versus what sounds exciting!

  • Daily Reading List – November 21, 2023 (#209)

    Today was indeed quieter than yesterday, and that was delightful. I got a chance to sketch out a “regular” blog post that I’ll finish tonight and publish tomorrow. Meanwhile, check out some fun things I read today.

    [blog] The Impact of Self-Reflection on Productivity. Interesting findings, but not shocking in hindsight. When we stop and reflect, it improves our perspective and planning.

    [blog] Enhancing Cybersecurity with Security Command Center’s Attack Path Simulations and Attack Exposure Scoring. This is a very cool functionality in Google Cloud where we create a virtual model of your environment and run simulations to find threats. More in the docs.

    [docs] Cloud CISO Perspectives: Why ISACs are valuable security partners. Here’s another batch of interesting security-related links to sift through.

    [site] State of AI. Check out these survey results to get a sense for AI use cases, opinions about corporate motivations and appetite for customizations.

    [blog] Angular.dev and Version 17—I Told You the Renaissance was Here. Is Angular back? Maybe it never left. This offers a good look at what’s new and exciting in this web framework.

    [paper] A Survey on Language Models for Code. A bit dense, but this paper can give you a sense of the landscape and what to look for with AI-assistance. As we’ve built Duet AI in Google Cloud, I’ve learned that the model matters, but so do the filters and overall UX wrapped around it.

    [blog] Opinions on Software Delivery & Engineering Metrics. Some thoughts here about continuous delivery and tracking delivery lead time.

    [youtube-video] Spring + Kotlin + Testcontainers. I’ve been liking some of the videos I’ve seen lately that walk us through each step to complete a fairly short example. This is a good one.

    [blog] Creating a SaaS Platform on Google Kubernetes Engine. How are you hosting experiences for distinct tenants? Maybe you’re doing a SaaS-style offering and using Kubernetes as the compute layer. This post walks through architectural options and considerations.

    [blog] Open sourcing Project Guideline: A platform for computer vision accessibility technology. I hope we see some inspired uses of this open sourced project that helps folks with vision impairment walk, jog, and run with the help of on-device ML.

    ##

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

  • Daily Reading List – November 20, 2023 (#208)

    Did you have a decent weekend? I had fun with my family, got some work done, and finished a book. Today was packed, but the rest of the week is quiet due to the U.S. holiday. Find some AI content and more below.

    [blog] Build AI-Powered Chatbots on Cloud Run: A Step-by-Step Guide Using Google’s PaLM API and Cloud Run. Simple walkthrough of a fairly straightforward experience to call our LLM from an app running on our serverless stack.

    [blog] Why I Prefer Trunk-Based Development. Good argument for everyone working on the mainline versus branching off for long periods of time.

    [podcast] A Bootiful Podcast: Google Developer Advocate, Java legend, Alexis Moussine Pouchkine. Listen to this podcast with two folks I like a lot. Josh at VMware chats with our very own Alexis about the next big Spring release and more.

    [blog] Create a Read Replica of an external source/master(AWS) in GCP CloudSQL using GCP Database Migration Service (DMS). Be very careful before you decide to do this, but if the business need outweighs the cost, it’s good to know it’s possible!

    [article] How to Prepare for the Deluge of Year-End Requests. I’ve had quiet end-of-year periods, and absolutely chaotic ones. This article helps you create the former by preventing the latter.

    [blog] Introducing BigQuery cross-region replication: enhanced geo-redundancy for your data. A single DDL statement to create a dataset replica in other cloud region? Wow. This definitely simplifies your architecture.

    [blog] A Cloud Run service was slow, here’s how we fixed it. I like troubleshooting-style posts as they often spark new ideas in my head about how to fix something of my own.

    [blog] Write Clean Code to Reduce Cognitive Load. Brief post about an important point about simplicity in your code.

    [blog] Major steps this year on the journey to multiplatform development. Given the mainstream use of multiple device surfaces—phone, laptop, desktop, tablet, gaming machine—it’s useful to have powerful multiplatform frameworks.

    ##

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

  • Daily Reading List – November 17, 2023 (#207)

    I spent today digging out of a week of email and chats, so it was a light reading day. But check out a few nuggets below.

    [article] Code quality: Is this indicator of a well-run software business going overlooked by investors? Is there one measure that tells you that a team has a good culture or ships good products? No. But there are plenty of clues.

    [article] DeepMind and YouTube release Lyria, a gen-AI model for music, and Dream Track to build AI tunes. Wild stuff. The impact of AI on the creative arts will be noticeable.

    [blog] Early Registration Now Open for Google Cloud Next ’24 (April 9-11) in Las Vegas. Bigger, more technical, and deeper engagement than our terrific 2023 event. See you there?

    [article] 5 tech execs share how they use generative AI at work. It’s good to hear from users, not just vendors. These look good good examples of where generative AI adds value.

    [blog] Demystifying Cloud Pricing. I haven’t seen these topics covered before. Read this post to learn more about what “price” means in the cloud, and some of the different pricing models you’ll encounter.

    [blog] Exsssspanding Possibilities with Python. I’m hoping to spend some quality time with Firebase this weekend, so it’s cool to see that JavaScript support is now complemented with Python support.

    ##

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

  • Daily Reading List – November 16, 2023 (#206)

    Flying home after a good week in Sunnyvale. Today I chatted with customers about how generative AI assists the dev experience, and, approaches to multicloud. I did demos for both, which was fun to put together.

    [blog] Introducing a new Eventarc destination — internal HTTP endpoint in a VPC network. Every cloud offers some way to trigger events when changes happen to cloud services. Ours is called Eventarc, and now it supports routing events to custom HTTP endpoints.

    [article] Is your tech stack making your team feel stuck? Apparently many folks feel like their tools can get in the way. I think all of us feel that way at one point or another. The key is how fast you can make changes.

    [blog] Announcing .NET 8. The latest version of Microsoft’s programming language is out, and this post does a very good job of pointing out the highlights.

    [blog] Scaling multimodal understanding to long videos. I don’t totally understand how all this worked, but creating multimodal models that understand long videos has major implications. More here.

    [blog] Introduction to LangChain. Solid introduction to this technology that’s gotten quickly adopted by those building generative AI apps.

    [blog] Memorystore for Redis Cluster is GA and provides up to 60 times more throughput and microseconds latency. Redis is mature and widely used, and I’m glad we’re offering a clustered service with a 99.99% SLA.

    [blog] Are You Selling a Shovel – Or a Way to Dig a Hole? Doesn’t matter if you’re building APIs or web apps, internal or external products. Focus on the job to be done!

    [blog] Data Intelligence Platforms. The smart folks at Databricks share their thoughts on how AI will change data platforms.

    [blog] How we’ve created a helpful and responsible Bard experience for teens. This is cool to see. Nice job.

    [article] The end of the standalone application. Microsoft’s trying to get their on-prem Office customers to switch to cloud subscriptions. Now they’re getting more pushy about it.

    [article] AWS, Microsoft, Google and Oracle partner to make cloud spend more transparent. Good decision by these companies to work together to help customers get a common view of billing data.

    ##

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