Martin Thwaites: Building Software for Production - Episode 271
Nov 13, 2023
auto_awesome
Martin Thwaites, Developer Advocate at Honeycomb, discusses observability in software production, tracing unknown unknowns, open telemetry, and the mechanics of committing to the main branch in software development.
Observability focuses on understanding the customer experience rather than technical metrics in order to build reliable software for production.
OpenTelemetry provides a standardized and vendor-neutral way of capturing telemetry data, making it easier to integrate observability into applications.
Deep dives
Observability and Building Software
Observability is crucial for building software that performs well in production. It involves understanding how our system performs and how it affects users. This goes beyond monitoring metrics like CPU usage and focuses on the customer experience. Reliable software should prioritize the impact on customers rather than technical metrics. To achieve observability, we need to ask questions that we didn't know we needed to ask. This requires adding contextual data to our production systems, such as user location, feature flags, and specific user actions. By adding context and asking the right questions, we can gain insights into production issues and address them effectively.
The Role of OpenTelemetry
OpenTelemetry is a new initiative that aims to provide a standardized, vendor-neutral way of capturing telemetry data from applications. By using OpenTelemetry SDKs, we can easily generate telemetry data for various applications, including web, mobile, and desktop. The inclusion of auto-instrumentation capabilities allows us to capture telemetry data without writing custom code. This makes it easier to add additional context to our telemetry and adapt to specific application requirements. OpenTelemetry helps streamline the process of integrating observability into our applications and promotes a consistent approach to capturing and analyzing telemetry data.
The Importance of Developer Tests
Instead of traditional unit tests, which focus on isolated code components, the emphasis should be on developer tests. These tests exercise the user functionality of the application in an end-to-end manner, ensuring that the APIs and user interactions work correctly. Developer tests should be fast, easy to maintain, and independent of production dependencies. They can be executed in memory using tools like the web application factory in the .NET ecosystem, enabling developers to validate the behavior and functionality of their application without relying on external services. With developer tests, confidence in the application's performance and reliability can be enhanced, promoting a more efficient development process.
The Merits of Mainline Development and Continuous Integration
Mainline development, also known as trunk-based development, promotes continuous integration and fast feedback loops by merging code changes frequently into the main branch. This approach reduces the risk of lengthy branch merges and conflicts that can hinder the development process. By merging smaller, short-lived branches into the main branch daily or even more frequently, developers can ensure a smoother integration process and early detection of issues. Alongside mainline development, continuous integration plays a vital role in automatically building, testing, and verifying the code changes. This allows for faster identification of errors and enables teams to ship software with more confidence.
Martin Thwaites is a Developer Advocate at Honeycomb, an o11y enthusiast, and a delivery-focused Developer from the UK. With over 20 years of experience in development in the .NET ecosystem, he’s worked with many companies on scaling up engineering teams and products. The past few years have been spent working on solving complex problems with some of the UK’s big names, including e-commerce retailers and credit lenders.
Topics of Discussion:
[2:42] Martin getting his start in testing.
[5:55] What other products is Honeycomb similar to?