Pete Hodgson

Software Delivery Consultant

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


May 7, 2013

Using Travis CI and xctool to build and test iOS apps


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


May 1, 2011

Inspect the state of your running iOS app's UI with Symbiote


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

Liberal Mocks