Build the Right Thing
Great software starts with understanding what customers truly need—what will make their lives easier and more enjoyable. It’s not just about delivering functionality; it’s about getting close enough to uncover what will genuinely delight users and improve their daily experience.
The Business Is the Point
A solid product strategy aligns with business goals. This includes identifying the right target markets, defining ideal customer segments, and figuring out how the product can stand out from competitors. Of course, there are always constraints—budgets, deadlines, and shifting priorities—that have to be managed to ensure the product is not only valuable but also viable.
Plan to Pivot
Building the right product is never a one-time decision. It’s an ongoing process that demands flexibility for strategic changes and unexpected opportunities. Strong coding practices, like Design for Test and Push on Green, create a structure that makes pivoting and adapting as smooth as possible.
Engineers Should Sleep Well
A great developer experience is being able to confidently make a code change, run tests, push to production, and then go to bed without a second thought. We’ve designed CI/CD strategies that not only ensure happy engineers but also deliver a more reliable and resilient product.
Tests Are Great—Unless They Are Terrible
One of us introduced Test-Driven Development (TDD) and a high-code-coverage culture to a team at Apple, transforming the codebase into something faster, reusable, and far less buggy. But TDD isn’t a religion. Bad tests can slow development and make refactoring a nightmare. Good tests provide confidence without becoming obstacles.
Design for Test, Design for Simplicity
Effective test design doesn’t just catch bugs—it shapes better architecture. Testing interfaces enforce clean abstractions, making the code easier to test, understand, and update. Well-designed tests improve both the product and the process, creating code that’s maintainable and adaptable over time.
Code, Reviews, and Collaboration Tools
We’ve used everything from Atlassian’s Bitbucket and Bamboo to Google’s custom internal tools and GitHub. But tools aren’t the focus—it’s the team’s culture that matters. The right tools help, but a collaborative, open, and communicative engineering culture is what actually drives great work.
Agile and Scrum Are Useful—In Moderation
The Agile Manifesto has its strengths, especially its emphasis on individuals and interactions over processes and tools. Scrum is a great framework, but we customize it for each team and project. Too many meetings can sap coding time, so we strike a balance, keeping teams connected enough to deliver consistently without unnecessary overhead.
Keeping Production Stable
Shipping is just the beginning—it’s not a real product until there’s a pager. Unreliable rollouts or flaky tools can crush morale, so we focus on stability. Practices like CI/CD testing, blue-green deployments, feature flags, monitoring, and gradual rollouts help keep production running smoothly while minimizing disruptions.
Observability, Monitoring, and Metrics
“You get what you measure” is more than a saying—it’s a core principle. We design for observability from the start, using tools like Google’s Borg/Monarch or AWS CloudWatch to define meaningful metrics. This gives insight into performance, uptime, and costs, ensuring control over reliability and efficiency as the product evolves.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam tincidunt lorem enim, eget fringilla turpis congue vitae. Phasellus aliquam nisi ut lorem vestibulum eleifend. Nulla ut arcu non nisi congue venenatis vitae ut ante. Nam iaculis sem nec ultrices