Published Sep 3, 2019

Episode 125: Performance Engineering with Chris Grindstaff

Chris Grindstaff dives into the intricacies of performance engineering, emphasizing the need for strategic architectural decisions, efficient concurrency management, and precise optimization techniques to enhance software performance from the ground up.
Episode Highlights
Software Engineering Radio - the podcast for professional software developers logo

Popular Clips

Episode Highlights

  • Measuring Bottlenecks

    In performance engineering, measuring bottlenecks is crucial for improving software systems. emphasizes that you can't improve what you can't measure, highlighting the importance of solid, repeatable measurements with historical data 1. Tools like Loadrunner and Jmeter are used to apply load and gather performance metrics, helping identify when server response times exceed goals 1. However, automation can be challenging due to constant UI changes, requiring scripts to be in sync with real user actions 2. notes that maintaining valid data populations is essential for accurate performance tests, as small datasets can mislead results 2.

    Measurement is very important and very messy. It's not terribly sexy. It's a lot of work.

    ---

    Effective measurement involves defining goals, using automation, and storing metrics historically to guide improvements 3.

       

    Performance Goals

    Setting performance goals is a critical step in software development, ensuring that systems meet user expectations. At IBM, explains that performance goals are formally defined and are essential for product shipment 4. These goals often revolve around response times, throughput, and memory footprint, which are crucial for both server and client-side applications 4. Negotiating these goals involves collaboration between performance, development, and sales teams to balance customer satisfaction and development costs 4.

    Performance engineering does not only mean response times and throughputs, but also memory footprint.

    ---

    also highlights the importance of solid measurements before optimizing performance, advocating for a step-by-step approach to performance testing 5.

       

    Handling Bottlenecks

    Handling performance bottlenecks requires a nuanced approach, often involving architectural changes. describes startup issues as the "death of a thousand cuts," where numerous small inefficiencies accumulate to cause significant delays 6. Solutions include minimizing activated bundles and deferring operations to improve startup times 6. On the client side, common issues include memory footprint and resource leaks, especially in Java applications, which require careful management of UI resources 7.

    Startup tends to be spread across the entire infrastructure. So it's, I like to call it the death of a thousand cuts.

    ---

    Algorithmic problems, while challenging, can often be resolved by identifying CPU bottlenecks and optimizing data structures, such as using maps instead of lists for large datasets 7.

Related Episodes