ACM Case Studies
Lessons learned from the solutions to interesting problems
Unlike most of the content served up by ACM Queue, case studies look retrospectively at challenges and problems already addressed, while attempting to draw out some of the lessons learned in the course of those endeavors (so readers needn't learn those lessons for themselves the hard way).
Which is to say we look not only to expose what was done, but also how it was done and what was discovered along the way.
And we work to achieve this by staging conversations between engineers — led by recognized domain experts who focus on drilling down into what it was that made the challenges at the heart of the effort worth undertaking in the first place, the aspects of those challenges that proved to be especially daunting, the tradeoffs that were hard to make, and the reasoning that led people to choose one path over the alternatives.
Wherever possible, the implications of those decisions are also considered, both with respect to the outcomes that were actually achieved and the opportunities that were potentially lost.
(Check out the most downloaded case studies)
Data Science
More Than Just Algorithms
A discussion with Alfred Spector, Peter Norvig, Chris Wiggins, Jeannette Wing, Ben Fried, and Michael Tingley
Cybersecurity
The Arrival of Zero Trust:
What Does it Mean?
A discussion with Michael Loftus, Andrew Vezina, Rick Doten, and Atefeh Mashatan
Healthcare Data
FHIR: Reducing Friction
in the Exchange of Healthcare Data
A discussion with James Agnew, Pat Helland, and Adam Cole
Open Source
It Takes a Community:
The Open-source Challenge
A discussion with Reynold Xin, Wes McKinney, Alan Gates, and Chris McCubbin
Hardware Security
Quantum-safe Trust for Vehicles:
The Race is Already On
A discussion with Michael Gardiner, Alexander Truskovsky, George Neville-Neil, and Atefeh Mashatan
Databases
Always-on Time-series Database: Keeping Up Where There's No Way to Catch Up
A discussion with Theo Schlossnagle, Justin Sheehy, and Chris McCubbin
Privacy
Differential Privacy: The Pursuit of Protections by Default
A discussion with Miguel Guevara, Damien Desfontaines, Jim Waldo, and Terry Coatta
Debugging
To Catch a Failure: The Record-and-Replay Approach to Debugging
A discussion with Robert O'Callahan, Kyle Huey, Devon O'Dell, and Terry Coatta
Blockchain
DAML: The Contract Language of Distributed Ledgers
A discussion between Shaul Kfir and Camille Fournier
Health Care Records
Access Controls and Health Care Records: Who Owns the Data?
A discussion with David Evans, Richard McDonald, and Terry Coatta
Code Review
CodeFlow: Improving the Code Review Process at Microsoft
A discussion with Jacek Czerwonka, Michaela Greiler, Christian Bird, Lucas Panjer, and Terry Coatta
Microservices
Hootsuite: In Pursuit of Reactive Systems
A discussion with Edward Steel, Yanik Berube, Jonas Bonér, Ken Britton, and Terry Coatta
JavaScript Frameworks
React: Facebook's Functional Turn on Writing JavaScript
A discussion with Pete Hunt, Paul O'Shannessy, Dave Smith and Terry Coatta
Software-defined Networks
A Purpose-built Global Network:
Google's Move to SDN
A discussion with Amin Vahdat, David Clark, and Jennifer Rexford
The Road to SDN
An intellectual history of programmable networks
OpenFlow: A Radical New Idea in Networking
An open standard that enables software-defined networking
Quality Assurance Testing
Automated QA Testing at EA:
Driven by Events
A discussion with Michael Donat, Jafar Husain, and Terry Coatta
Testing a Distributed System
Testing a distributed system can be trying even under the best of circumstances.
Adopting DevOps Practices in Quality Assurance
Merging the art and science of software development
JavaScript on the Server
Node at LinkedIn:
The Pursuit of Thinner, Lighter, Faster
A discussion with with Kiran Prasad, Kelly Norton, and Terry Coatta
JavaScript and the Netflix User Interface
Conditional dependency resolution
Browser Security
Browser Security Case Study:
Appearances Can Be Deceiving
A discussion with Jeremiah Grossman, Ben Livshits, Rebecca Bace,
and George Neville-Neil
The Web Won't Be Safe or Secure until We Break It
Unless you've taken very particular precautions, assume every Web site you visit knows exactly who you are.
Resolved: the Internet Is No Place for Critical Infrastructure
Risk is a necessary consequence of dependence.
Resilience Testing
Resilience Engineering: Learning to Embrace Failure
A discussion with Jesse Robbins, Kripa Krishnan, John Allspaw, and Tom Limoncelli
Fault Injection in Production
Making the case for resilience testing
Weathering the Unexpected
Failures happen, and resilience drills help organizations prepare for them.
The Antifragile Organization
Embracing Failure to Improve Resilience and Maximize Availability
Network Congestion Management
BufferBloat: What's Wrong with the Internet?
A discussion with Vint Cerf, Van Jacobson, Nick Weaver, and Jim Gettys
BBR: Congestion-Based Congestion Control
Measuring bottleneck bandwidth and round-trip propagation time
Controlling Queue Delay
A modern AQM is just one piece of the solution to bufferbloat.
Bufferbloat: Dark Buffers in the Internet
Networks without effective AQM may again be vulnerable to congestion collapse.
Supplementary Materials: Bufferbloat Videos
Under common loads, your real Internet "speed" can easily drop by a factor of ten due to bufferbloat.
File Systems and Storage
GFS: Evolution on Fast-forward
A discussion between Kirk McKusick and Sean Quinlan about the origin and evolution of the Google File System
How Will Astronomy Archives Survive the Data Tsunami?
Astronomers are collecting more data than ever. What practices can keep them ahead of the flood?
Keeping Bits Safe: How Hard Can It Be?
As storage systems grow larger and larger, protecting their data for long-term storage is becoming more and more challenging.
Interoperability Testing
Microsoft's Protocol Documentation Program: Interoperability Testing at Scale
A Discussion with Nico Kicillof, Wolfgang Grieskamp and Bob Binder
SAGE: Whitebox Fuzzing for Security Testing
SAGE has had a remarkable impact at Microsoft.
The Robustness Principle Reconsidered
Seeking a middle ground
UX Design
UX Design and Agile:A Natural Fit?
A user experience designer and a software engineer from SAP discuss the challenges of collaborating on a business-intelligence query tool.
Finding Usability Bugs with Automated Tests
Automated usability tests can be valuable companions to in-person tests.
Multicore Performance
Photoshop Scalability:Keeping It Simple
Clem Cole and Russell Williams discuss Photoshop's long history with parallelism, and what they now see as the main challenge.
Managing Contention for Shared Resources on Multicore Processors
Contention for Caches, Memory Controllers, and Interconnects Can Be Alleviated by Contention-Aware Scheduling Algorithms.
RIA Development
Case Study: Making the Move to AJAX
What a software-as-a-service provider learned from using an AJAX framework for RIA development
Commentary: A Trip Without a Roadmap
Instead of simply imagining what your users want or need, it's always a good idea to first get their input.
Reveling in Constraints
The Google Web Toolkit is an end-run around Web development obstacles.
Debugging AJAX in Production
Lacking proper browser support, what steps can we take to debug production AJAX code?