Development
ARTICLE
Add Approval Testing to Your Toolbox

November 29, 2022
ARTICLE
Make Developing Easier by Building a Beautiful Makefile

September 20, 2022
ARTICLE
How to Find the Value in Legacy Code

July 22, 2022
ARTICLE
Of Ducks and Go Interface Misuse

May 10, 2022
VIDEO
100 Percent Test Coverage

February 24, 2022
PODCAST
Just in Time: Hands-On Learning with Aaron Patterson

February 02, 2022
ARTICLE
How to Solve Wordle (Without Spoiling the Fun)

January 19, 2022
VIDEO
How to Build Video Games With Rust

December 28, 2021
ARTICLE
Responding to the Log4Shell Vulnerability

December 15, 2021
VIDEO
Understanding Queuing Theory and Software Performance

December 08, 2021
ARTICLE
Life After Moment.js

June 16, 2021
ARTICLE
SQL, JSON, and Domain Objects

March 16, 2021
ARTICLE
Dependency Injection in React

February 18, 2021
ARTICLE
Improving Agile Process at Scale

September 01, 2020
ARTICLE
Polyglot Influences in Python

November 05, 2019
ARTICLE
Functional lessons learnt

October 29, 2019
ARTICLE
Escape Hatches: Principles vs. Guarantees

October 15, 2019
ARTICLE
"Works on my machine" doesn't work

October 01, 2019
ARTICLE
Handling Blocking Threads in Java

August 01, 2019
ARTICLE
Some Common Gotchas in Python

May 07, 2019
ARTICLE
Types of Types in Elm

February 26, 2019
ARTICLE
Functional Exceptions In Java

January 22, 2019
ARTICLE
Sharing Secrets with GPG

October 23, 2018
ARTICLE
What’s in a Name?: Domains and Domain Name Servers

October 16, 2018
ARTICLE
What is VS Live (VS Code) and Why Should You Care?

September 25, 2018
ARTICLE
Dependency Inversion in React with Render Props

August 30, 2018
ARTICLE
Legacy Code: Spying On Global Functions

October 23, 2017
ARTICLE
Framework Seams

September 20, 2017
ARTICLE
Myths About Unit Tests

September 19, 2017
ARTICLE
How JSON decoding works in Elm—Part 3

August 29, 2017
ARTICLE
Refactoring React

August 21, 2017
ARTICLE
Does the open/closed principle apply to Elm?

August 08, 2017
ARTICLE
Project Build Protocol

August 07, 2017
ARTICLE
How JSON decoding works in Elm—Part 2

July 17, 2017
ARTICLE
How JSON decoding works in Elm—Part 1

June 28, 2017
ARTICLE
Scope And Closures In Javascript

June 13, 2017
ARTICLE
The Core of Erlang

May 02, 2017
ARTICLE
Using an Elixir Umbrella

May 01, 2017
ARTICLE
A few DTrace gotchas and workarounds on OS X

February 02, 2017
ARTICLE
Keeping Third-Party Swift Dependencies Testable

January 30, 2017
ARTICLE
Comparing Common LISP and Clojure: Cons Cells

January 24, 2017
ARTICLE
Common Code Smells

January 19, 2017
ARTICLE
Optimizing your Workflow with Vim

January 17, 2017
ARTICLE
Estimation for Fun and Profit (but mostly for sanity)

November 29, 2016
ARTICLE
Code is better when we write it together

November 28, 2016
ARTICLE
The problematic pull request

November 18, 2016
ARTICLE
Don't Make It Perfect, Make It Work And Refine

November 17, 2016
ARTICLE
Perfect code is an illusion

November 11, 2016
ARTICLE
Assimilating with Clojure

October 27, 2016
ARTICLE
Clojure is boring

October 06, 2016
ARTICLE
TDD in ClojureScript

October 05, 2016
ARTICLE
Fundamental Tensions in Code Smells

September 29, 2016
ARTICLE
Constructor Injection with the Unity Container

September 27, 2016
ARTICLE
Keeping Laravel Controllers Clean with Form Requests

September 26, 2016
ARTICLE
Better RSpec Stubs

September 08, 2016
ARTICLE
RubyMine Remote Debugging via Vagrant

August 03, 2016
ARTICLE
That's Not a Decorator!

July 18, 2016
ARTICLE
Three A's of Responding to Bugs

July 06, 2016
ARTICLE
How to Find a Bug in Your Code

June 29, 2016
ARTICLE
So You Live In Spacetime?

June 20, 2016
ARTICLE
Running tests in Vim

June 13, 2016
ARTICLE
Go Build Your Own Tools

April 21, 2016
ARTICLE
Baking a Cake with Rails

April 14, 2016
ARTICLE
Using Functions to Make Better Abstractions

February 16, 2016
ARTICLE
Don't Make Me Remember Things

January 28, 2016
ARTICLE
Refactoring as a Feature Tax

January 26, 2016
ARTICLE
Ask DTrace: Why are my tests so slow?

December 01, 2015
ARTICLE
DTrace: [Even Better Than] Strace for OS X

November 06, 2015
ARTICLE
Caring about coding

October 30, 2015
ARTICLE
Entity Framework & Resolving Team Migration Conflicts

September 18, 2015
ARTICLE
Optimizing the Sustainable Pace

September 15, 2015
ARTICLE
Internationalize Your Way to Cleaner Code

September 11, 2015
ARTICLE
Loosely Coupled Tests

August 26, 2015
ARTICLE
Git Disciplined

July 08, 2015
ARTICLE
Los Angeles Mastery Cohort Code Katas

June 12, 2015
ARTICLE
Debug like a doctor

June 04, 2015
ARTICLE
Decorators in Ruby

May 18, 2015
ARTICLE
[Un]Planned Obsolescence in Software

May 14, 2015
ARTICLE
To meet or not to meet

May 11, 2015
ARTICLE
Using The Option Type Effectively

April 29, 2015
ARTICLE
Stack Overflow

April 27, 2015
ARTICLE
Refactoring a Regex

April 22, 2015
ARTICLE
Tail Recursion In Clojure

March 23, 2015
ARTICLE
The Option Type

March 11, 2015
ARTICLE
Learning from porting selecta

March 02, 2015
ARTICLE
The Cumulative Effect of Inefficient Workflows

February 26, 2015
ARTICLE
Identifying and avoiding the cargo cult

February 24, 2015
ARTICLE
Loose Coupling in Go lang

February 06, 2015
ARTICLE
Your Test Suite is Useless

January 12, 2015
ARTICLE
Don't mix test code with production code

December 19, 2014
ARTICLE
Mistaking Encapsulation for Abstraction

November 04, 2014
ARTICLE
Hide Your Queries

October 23, 2014
ARTICLE
Flaky crusts: Good for pies; bad for test suites

October 22, 2014
ARTICLE
Tweaking the Varnish Cache

October 16, 2014
ARTICLE
Test-Driving the Game Loop pt. 2

October 14, 2014
ARTICLE
Apprentice Blog of the Week: Isolate CSS

October 07, 2014
ARTICLE
Clojure Stack Traces for the Uninitiated

September 12, 2014
ARTICLE
How Long Is Too Long?

September 11, 2014
ARTICLE
Apprentice Blog of the Week: Did Java Break My byte?

September 10, 2014
ARTICLE
Apprentice Blog of the Week: Setting Date Ranges in Ruby

September 03, 2014
ARTICLE
Functional-ish Ruby

August 20, 2014
ARTICLE
Test-Driving the Game Loop pt. 1

August 18, 2014
ARTICLE
Abstraction To The Rescue

July 25, 2014
ARTICLE
Avoiding the Drift to Low Performance

July 22, 2014
ARTICLE
Command Objects Are Gerunds

July 15, 2014
ARTICLE
Diving Into Swift With Swiftest

July 14, 2014
ARTICLE
Take Pride in Your Legacy (Code)

July 11, 2014
ARTICLE
Pattern Language of Thieves

July 09, 2014
ARTICLE
What Good are Strong Parameters?

April 05, 2014
ARTICLE
Buy the Sandwich, Not the Meal

March 17, 2014
ARTICLE
Adding Namespaces To Ruby

March 07, 2014
ARTICLE
Five Years of Raising the Bar

March 06, 2014
ARTICLE
Store Data Not Types

February 24, 2014
ARTICLE
How I Evaluate Open-Source Software

January 03, 2014
ARTICLE
validates_presence_of false

December 29, 2013
ARTICLE
Nested Contexts are Only Kind of Evil

December 17, 2013
ARTICLE
Lispy Elixir

November 26, 2013
ARTICLE
Check Your Work

October 31, 2013
ARTICLE
Ruby DeRailed: Emergent Data Design

October 17, 2013
ARTICLE
Test Extraction and Readability

October 15, 2013
ARTICLE
Ruby DeRailed: Fast Tests

October 10, 2013
ARTICLE
Synchronization in a Distributed System

October 04, 2013
ARTICLE
Modular JavaScript

September 27, 2013
ARTICLE
Using Katas To Improve

September 26, 2013
ARTICLE
Coding fast and coding slow

September 23, 2013
ARTICLE
A Case Against Cucumber

September 18, 2013
ARTICLE
Higher-Ranked Types

September 13, 2013
ARTICLE
ActiveRecord Mass-Assignment Order

August 12, 2013
ARTICLE
Deferred Objects

August 09, 2013
ARTICLE
The Right Tests in the Wrong Order

July 18, 2013
ARTICLE
Strive for Simplicity

July 08, 2013
ARTICLE
Procedural Polymorphism

June 26, 2013
ARTICLE
For Want of a Static Language

June 26, 2013
ARTICLE
Idempotent HTTP

June 02, 2013
ARTICLE
Performing Code Katas

May 28, 2013
ARTICLE
Replace Temp with Query in Clojure

May 21, 2013
ARTICLE
What is a Bug?

May 13, 2013
ARTICLE
When is a character not a Character?

April 11, 2013
ARTICLE
Stable Sorting in Ruby

March 26, 2013
ARTICLE
The Repository Pattern

March 23, 2013
ARTICLE
Help Prevent Session Hijacking

March 01, 2013
ARTICLE
Riak, MapReduce, and large numbers

January 18, 2013
ARTICLE
Protect Yourself From SQL Injection

January 04, 2013
ARTICLE
Testing Recursion

January 01, 2013
ARTICLE
Don't Fail at Failure in Ruby

December 21, 2012
ARTICLE
Reflections on Using Backbone.js

December 13, 2012
ARTICLE
Transformation Priority Premise Applied

November 17, 2012
ARTICLE
Composition over Mixins

November 16, 2012
ARTICLE
Taking Password Storage Up A Notch

November 04, 2012
ARTICLE
Servers in Source Control

October 30, 2012
ARTICLE
Implementing and Testing the Singleton Pattern in Ruby

October 20, 2012
ARTICLE
Data Validation in Clojure

October 16, 2012
ARTICLE
Applying DRY to Editing

October 03, 2012
ARTICLE
Mind Your Git Manners

September 27, 2012
ARTICLE
Welcome To The Gilded Rose (in Clojure)

September 26, 2012
ARTICLE
Owning Your Dependencies

September 24, 2012
ARTICLE
The Sheep And Their Feet

September 21, 2012
ARTICLE
Adapting To Change

September 18, 2012
ARTICLE
Explicit Collections

September 12, 2012
ARTICLE
C++ is Not Slow

August 14, 2012
ARTICLE
The Community Guide to Monads

August 11, 2012
ARTICLE
The Classic Buffer Overflow

August 03, 2012
ARTICLE
With Proper TDD, You Get That

July 18, 2012
ARTICLE
Test Driven Assembly

June 07, 2012
ARTICLE
On Obsession, Primitive and Otherwise

June 05, 2012
ARTICLE
Be a Relentless Programmer

May 22, 2012
ARTICLE
Quoting Without Confusion

May 22, 2012
ARTICLE
A Scope Heuristic

May 01, 2012
ARTICLE
Polymorphism in Clojure

April 26, 2012
ARTICLE
14 Ways to Make Remote Audio Better

February 28, 2012
ARTICLE
Things You Should Know About JavaScript

February 06, 2012
ARTICLE
Modules called, they want their integrity back

February 03, 2012
ARTICLE
Hello iOS Development

December 19, 2011
ARTICLE
Mind Your Own Business Rails

December 09, 2011
ARTICLE
Why I Pair Program

December 02, 2011
ARTICLE
Three Reasons To Roll Your Own Mocks

November 28, 2011
ARTICLE
Avoiding Common Errors in Your Jasmine Test Suite

November 13, 2011
ARTICLE
That's Not Yours

October 27, 2011
ARTICLE
Out of Controller

October 17, 2011
ARTICLE
Inconsistent APIs Are Costly

October 03, 2011
ARTICLE
Testing Code That's hard to test

October 01, 2011
ARTICLE
Pointers, Schmointers

October 01, 2011
ARTICLE
Appreciative Inquiry Retrospectives

September 19, 2011
ARTICLE
Winning at Consistency

June 10, 2011
ARTICLE
10 Ways to Do Acceptance Testing Wrong

April 26, 2011
ARTICLE
Clean This Code

April 23, 2011
ARTICLE
Jenkins, RVM, and Selenium

March 02, 2011
ARTICLE
That‘s Not In My String!

February 02, 2011
ARTICLE
Post-Agile: Standing on the shoulders of giants

January 06, 2011
ARTICLE
Clojure Libs and Namespaces: require, use, import, and ns

December 05, 2010
ARTICLE
Agile Manifesto Chinese Translation

December 02, 2010
ARTICLE
A Leiningen Tutorial

November 26, 2010
ARTICLE
Clean Acceptance Tests

October 18, 2010
ARTICLE
TDD in education, they're doing it wrong

April 09, 2010
ARTICLE
Limelight 0.5.0 Released

October 19, 2009
ARTICLE
Reflection on Hangman

October 04, 2009
ARTICLE
Hangman Tournament

August 28, 2009
ARTICLE
Up and running with TDD on Android

July 11, 2009
ARTICLE
Announcing chiPhone

July 09, 2009
ARTICLE
A Functional Refactoring in Scala

June 16, 2009
ARTICLE
TDD and iPhone—NSTimer

May 11, 2009
ARTICLE
Copyrights Conundrum

March 12, 2009
ARTICLE
Selenium on Rails Released, Again

March 07, 2009
ARTICLE
When is a Mock not a Mock

January 10, 2009
ARTICLE
Embedded Ruby Talks Morse

January 09, 2009
ARTICLE
Embedded Ruby Sings Sinatra

December 30, 2008
ARTICLE
Embedded Ruby—First Steps

December 19, 2008
ARTICLE
Kata: Langston's Ant in Ruby

November 13, 2008
ARTICLE
Simon

November 10, 2008
ARTICLE
Ruby Battleship Sparring Tournament

November 08, 2008
ARTICLE
Limelight 0.3.0 Released

November 05, 2008
ARTICLE
Limelight Tutorial: Tic Tac Toe Example

September 29, 2008
ARTICLE
Selenium on Rails released

September 14, 2008
ARTICLE
That's Not Agile! Bibliography

August 07, 2008
ARTICLE
That's not Agile, Live

July 26, 2008
ARTICLE
Some Random RubyCocoa stuff

July 23, 2008
ARTICLE
Active Record migration dependencies

June 13, 2008
ARTICLE
Code Less: A Language Keystroke Experiment

June 08, 2008
ARTICLE
Announcing Limelight

June 02, 2008
ARTICLE
Erlang and the OCP

May 24, 2008
ARTICLE
Bowled Over by RubyCocoa

April 20, 2008
ARTICLE
Rinda and setting up Rindlets

April 16, 2008
ARTICLE
Rinda 101

February 11, 2008
ARTICLE
Want clean code? Stop using the editor.

December 21, 2007
ARTICLE
Un–Rubify

December 19, 2007
ARTICLE
Ruby and the Art of Computer Programming

November 06, 2007
ARTICLE
Sockets Enable Multi-Lingual Applications

November 04, 2007
ARTICLE
Test Driven Debugging

October 11, 2007
ARTICLE
Micah's General Guidelines on Ruby require

October 08, 2007
ARTICLE
RubyCocoa Tutorial

August 13, 2007
ARTICLE
That's Not Agile!

August 05, 2007
ARTICLE
Something new, every day

June 26, 2007
ARTICLE
Test Driving Module Methods—Part Two

June 15, 2007
ARTICLE
Lost in Portland, and Thinking

May 20, 2007
ARTICLE
Ruby DSL Blocks

May 20, 2007
ARTICLE
Test Driving Module Methods

May 03, 2007
ARTICLE
Test, Code, There Is No Step Three!

April 13, 2007
ARTICLE
Sharing a Database Among Multiple Rails Applications

February 20, 2007
ARTICLE
Storing Binary Data in Postgres? Beware!

February 18, 2007
ARTICLE
Understanding Statemachines, Part 3: Conditional Logic

February 12, 2007
ARTICLE
Clean as You Code

January 29, 2007
ARTICLE
Three Reasons to Use FitNesse

January 19, 2007
ARTICLE
Getting started with Rails and FitNesse

January 15, 2007
ARTICLE
Understanding Statemachines, Part 2: Actions

November 29, 2006
ARTICLE
BOC

November 12, 2006
ARTICLE
Rails Migrations and Subversion

September 28, 2006
ARTICLE
Ruby and Human Compilers

September 26, 2006
ARTICLE
Self Shunt

September 11, 2006
ARTICLE
Buffer to the Rescue

September 07, 2006
ARTICLE
Delegates Vs Command Pattern

September 07, 2006
ARTICLE
Fresh Testing

September 07, 2006
ARTICLE
IList, IComparable, ICarumba!

September 07, 2006
ARTICLE
Over Mocking

September 07, 2006
ARTICLE
Pre–Factoring

September 07, 2006
ARTICLE
Prelude to the Mock Off

September 07, 2006
ARTICLE
Smalltalk Bowling

September 07, 2006
ARTICLE
Apples and Tigers

November 17, 2004