As companies move from monolithic to multi-service architectures, existing techniques for debugging and profiling begin to break down. Previously, troubleshooting could be accomplished by isolating a single instance of the monolith and reproducing the problem. With microservices, this approach is no longer feasible, because no single service provides a complete picture of the performance or correctness of the application as a whole. Old approaches for distributed tracing include enforcing a policy across the development teams, such as writing manual traces inside the code. In serverless, cloud-based systems, new things can be achieved. Since some of the environmental characteristics are known in advance, tracing can sometimes be done automatically, which makes it far more powerful.