Dec 11, 2025
I’ve been a professional software developer since the early 2000s and an enthusiastic amateur even longer. I was also, for a while, a manager of developers. I’m deeply interested in organizational dynamics and group consensus: software, like ourselves, lives in a society, and both serves the needs of and serves to help shape that society.
I’m always interested in hearing from people and organizations that I can help, whether that means coming in for a few days to talk about end-to-end testing or joining your organization full-time to help turn an idea into reality.
I regularly mentor people new to programming, teaching them how to craft working systems. This is less about teaching people to write code and more about teaching them why we care about source control, how to think about configuration, how to and why to automate testing, and how to think about software systems and data flow at a higher level. I strongly believe that software development needs a formal apprenticeship program, and mentoring has done a lot to validate that belief.
As a staff security developer for Slack, I worked with a team focused on backend security posture improvements, designed to support developers across the organization in building out new capabilities and improving the security of existing ones.
Major projects I contributed to include a declarative policy engine to allow developers to define reusable access control rules for Slack’s API and for the data that API exposes, as well as library selection and vulnerability management for services handling user-submitted media to limit the risks posed by malicious files to Slack and its customers.
As an engineering manager at Ada, I led a team of engineers to build an internal platform for chat applications. Our goal was to enable growth into new markets, by making it possible to extend Ada’s product in novel ways based on the needs of new customers.
During my tenure, the team set out on building an event processing system based on Kafka, intended to decouple the company’s in-house chat frontend from the response generation services and to become the common interface for other customer service platforms, so that Ada could intervene to assist customers via email, phone, and other services our customers might already be using.
In my time with Heroku (and with Salesforce, Heroku’s parent organization), I contributed to the delivery and operation of services that let developers bring their ideas to life on the internet, both as a developer and as a manager. I was involved in maintaining and expanding existing features, exploring and developing new products, and in cultivating my peers and my team as people and as developers.
As an engineering manager (2018 to 2022), I was responsible for building and supporting an effective, unified team across North and South America and Europe. Moving into management was motivated by a desire to act as a force multiplier, which I practiced through coaching, process management, facilitating ongoing discussions about the direction and health of the team, and through active investment in my reports’ progress.
As a lead developer (2015-2018), I worked on the Heroku build system, which ingests code from end users and deploys that code to applications running on the Heroku platform. As part of that work, we implemented a number of features to control abuse, support language-specific features and needs, and to develop new ways to deploy code to Heroku.
While I was with the company, it grew from a 20-person one-room organization to a healthy, growing two-hundred-person technology company. As an early employee, I had my hand in many, many projects and helped the development team absorb the massive cultural changes that come with growth, while also building a SaaS product that let others realize their dreams. Some highlights:
As the team’s database administrator, I was responsible for balancing concerns about reliability and availability against the need to deliver new services and functional improvements for customers. Alongside the operations team, I handled capacity planning, reliability, outage planning, and performance monitoring. Alongside the development team, I was responsible for designing processes, tooling, and expertise on the most effective ways to use MySQL.
As an ops toolsmith, I worked extensively on deployment automation and standardizing process for internal services. I created a standard development VM to ensure developers had an environment consistent with reality. I automated packaging and rollout to testing servers. I explored options around platform-as-a-service products to look for fit. As part of this work, I built training materials and ran sessions to teach other developers how to think like a sysadmin, covering Linux, Puppet, virtualization, and other topics.
You can get in touch by email at owen@grimoire.ca. I’d love to hear from you.