Blog Archives
December 5, 2023
Expand/Contract: making a breaking change without a big bang
The expand/contract pattern is the key to zero-downtime deployment, replacing nail-biting stop-the-world rollouts with a series of incremental changes that can be made at a leisurely pace.
March 2, 2023
Five Minutes to Feature Flags
Add feature flags to a node service in no time using OpenFeature, the open vendor-netural standard for feature flagging.
May 19, 2022
OpenFeature - a standard for feature flagging
OpenFeature is a new open standard for feature-flagging. Why we need an open standard for what's essentially a glorified if statement? Let me explain...
June 24, 2021
Explaining Variable
An Explaining Variable is a code-level pattern which reduces the need for code comments, making your software a little more self-documenting.
June 17, 2021
Patterns of cross-team collaboration
Almost every company feels pain when it comes to organizing work that spans multiple teams. Let's look at different patterns for code ownership amongst teams, and code collaboration across teams.
January 28, 2021
Your Platform is a Product
Successful platform teams understand that they're building an internal product, one which is competing for adoption with other internal and external products. To be successful and gain adoption, platform teams need to embrace a product mindset.
January 18, 2021
Engineering Values and Architectural Principles
As startups scale, engineering tribes form. Defining a shared set of Engineering Values and Architectural Principles keeps tribalism in check, helping teams to make coherent decisions while preserving nimble autonomy.
December 1, 2020
Tech Debt Walls
Every engineering team I've met would like to get better at managing their technical debt. The first step in managing something is making it visible. A Tech Debt Wall is a simple, effective way to make tech debt visible.
October 29, 2020
Roadtrip!
Product teams should plan their work like a family plans a roadtrip. They zoom the map out when they need to understand the big picture, then zoom in for precise directions on what's coming up soon. They also hold off on making detailed plans until they're approaching a destination.
September 25, 2020
Service Templates and Service Chassis
Smaller services built by autonomous teams can mean multiple inconsistent implementations of the same basic technical plumbing. Engineering organizations can use Service Templates and Service Chassis to avoid this.
February 9, 2020
Testing a feature-flagged change
Some strategies for safely verifying a feature flagged change, without turning it on for all our users.
January 9, 2020
Creating and sharing Strategic Architectural Initiatives
Strategic Architectural Initiatives help align autonomous teams around a technical strategy. We'll learn techniques for co-creating an SAI and ensuring that it's widely understood.
December 9, 2019
Delivering on an architecture strategy
Achieving sustained architectural progress at scale takes a clearly articulated strategy, a strong product/tech partnership, and empowered teams.
October 4, 2019
Hello, production
Deploying something useless into production, as soon as you can, is the right way to start a new project. It pulls unknown risk forward, opens up parallel streams of work, and establishes good habits.
August 8, 2019
Story Tests - clear, expressive testing for redux reducers
We explore a powerful unit-testing technique for validating the high-level behavior of a redux reducer, by using a true redux store as a test harness.
August 7, 2019
Testing redux reducers - leveraging selectors
We look at various options for validating expectations within redux reducer unit tests, and discover that using selectors leads to tests which are both expressive and resiliant to change.
July 15, 2019
A nice way to test redux reducers and actions - part I
Treating redux reducers and actions as a cohesive unit leads to clear, succinct unit tests.
June 4, 2019
Day-One Deploys
Requiring new engineers to deploy to production on their first day isn't crazy, it's a neat shortcut to enabling robust Continuous Delivery practices.
May 10, 2019
6 Practices for Effective Pull Requests
A simple set of practices which allow teams to reap the most benefit from Pull Requests, while avoiding some of the inefficient side-effects of PR-based code review.
February 8, 2019
Mission Command: enabling autonomous software teams
empower software teams to make self-directed, strategically-aligned decisions within a rapid feedback loop
March 8, 2018
Advice for the Founding Engineer, part 3
Accelerate delivery of your MVP by choosing boring, safe technology and only building what you absolutely have to.
November 6, 2017
Continuous Delivery for Static Sites
Applying straightforward Continuous Delivery techniques to static sites. Remove the human processes so you can move fast and not break things.
August 14, 2017
Advice for the Founding Engineer, part 2
We introduce the second of three maxims which can guide the decisions of a founding engineer: Optimize For Iteration.
April 23, 2017
Advice for the Founding Engineer, part 1
We introduce the first of three maxims to guide the decisions of a founding engineer: You'll Never Know Less Than You Know Right Now.
March 29, 2017
The JS testing ecosystem needs a standard matcher library
November 20, 2016
The Symbol-Keyed State Accessor pattern
December 3, 2015
DIY stir plate for homebrew yeast starters
June 21, 2015
The Ultimate Traveler's Coffee Kit
September 2, 2014
video for my different.js talk
August 27, 2014
optimizing 3rd party JavaScript loading
May 15, 2014
Rails as an SOA Client
March 28, 2014
the 5 rules of an awesome dev toolchain
January 17, 2014
Microstatic: radically simple static microsites
September 13, 2013
Assertions in Page Objects
August 24, 2013
introducing rack-flags
August 6, 2013
iOS Unit Testing Workshop
February 24, 2013
Test-driven Backbone.js - Part Three
January 23, 2013
Test-driven Backbone.js - Part One
January 23, 2013
Test-driven Backbone.js - Part Two
January 22, 2013
Deploying to Heroku from CI - the gory details
January 21, 2013
Deploying to Heroku from CI
November 18, 2012
Writing iOS acceptance tests using Kiwi
November 6, 2012
Cookie-based feature flag overrides
October 16, 2012
Frank with CocoaPods
September 6, 2012
Towards Frank 1.0
August 20, 2012
Introducing PublicAutomation
August 9, 2012
marker branches in git
August 2, 2012
Octopress deployment pipeline
July 22, 2012
Running Frank as part of iOS CI
July 11, 2012
Using the UIAutomation private framework
June 24, 2012
writing your first Frank test
June 16, 2012
Lowering Frank's barrier to entry
June 9, 2012
The Birth Of a Domain Object In Ruby
May 9, 2012
Feature Flags in JavaScript
February 8, 2012
Moving from Blogger to Octopress
February 6, 2012
Class-less javascript
September 2, 2011
Testing Mobile Web Apps With WebDriver
July 2, 2011
Javascript Promises
May 8, 2011
retroactive quality metrics with git
April 19, 2011
Tutorial screencast on Frankifying your app
January 4, 2011
Working with Indirect Input and Output in Unit Tests
November 20, 2010
Creating and publishing your first ruby gem
November 20, 2010
timestamped-scenarios, a custom Cucumber formatter
October 12, 2010
Objective C memory errors pt II - Dangling Pointers
October 11, 2010
Common Objective-C memory management errors, Part I
August 7, 2010
Podcast about Frank and test automation on iOS
July 23, 2010
Frank: Automated Acceptance Tests for iPhone and iPad
April 22, 2010
TDD, Emergent Design, and Punctuated Equilibrium
April 5, 2010
Introducing Noguchi
April 3, 2010
Stormcloud will watch over the unicorns.
March 9, 2010
TickTock: A dirt-simple stopwatch class for actionscript
March 7, 2010
Why do we estimate effort?
February 22, 2010
Primitive Obsession obsessions
February 19, 2010
Encapsulating user interaction events in Flex
February 18, 2010
Ruby Facets: the mash method
February 3, 2010
Partial commits with git
January 31, 2010
an inverted include? for ruby
January 17, 2010
Flex Patterns: Presentation Adapter
November 17, 2009
How much code did I just delete?
November 16, 2009
Introducing Gimme: a lightweight ruby Registry
June 28, 2009
Adding hamcrest-as matchers to mock4as
June 14, 2009
Presentation Model Pattern
April 19, 2009
REST: 'There aren't enough verbs'
April 2, 2009
mock.willExecute(...) in mock4as
April 1, 2009
fun with Symbol#to_proc
March 23, 2009