Technical Articles

Ruby/Rails Testing

Ruby Testing Micro-Course
How to get started with Rails testing
A Rails testing “hello world” using RSpec and Capybara
A Rails model test “hello world”
The ultimate guide to RSpec + Capybara integration tests
Ruby/Rails testing glossary
Rails testing resource roundup
Factories and fixtures in Rails
How I write characterization tests
Refactoring to POROs (using tests)
How to clear up obscure Rails tests using Page Objects
Test smell: Obscure Test
Code smell: long, procedural background jobs (and how to fix it)
Testing private methods
RSpec mocks and stubs in plain English
Sometimes it’s better for tests to hit the real API
Common causes of flickering/flapping/flaky tests
How dependency injection can make Rails tests easier
How to pick a testing framework for your Rails project
Things you can (and should) ignore when getting started with Rails testing
Taming legacy Ruby code using the “Sprout Method” technique, example 1
Taming legacy Ruby code using the “Sprout Method” technique, example 2
When I use controller/request specs in Rails and when I don’t
The difference between integration tests and controller tests in Rails
How to get RSpec to skip view specs when you generate scaffolds
RSpec hello world
Testing anti-pattern: setup data leak
Achieving blur in capybara
Capybara: expect field to have value
Logging the user in before Capybara feature specs
Why I recommend against using Cucumber
How to see your feature specs run in the browser
How to run feature specs headlessly or not headlessly at will
Avoiding network calls in Rails tests without using mocks, stubs or vcr
Rails scaffolding and TDD are incompatible
In which I dissect and improve a Rails test file I found on Reddit
Reader Q&A: Tommy’s question about testing legacy code


Using tests as a tool to wrangle legacy projects
The five benefits of automated testing
What if I want to do test-first but I find it easier to do test-after?
Deploy to production on day one
What a “walking skeleton” is and why I always start projects with one
What exactly makes “bad” code bad?
Why “users don’t care about code” is a harmful saying
“We don’t have time to write tests”
Atomic commits and testing
All code eventually gets tested, it’s just a question of when and by whom
Continuous integration


Where to put Rails modules
My vim setup for Rails


Getting started with Angular CLI
How to delete an item from a list in AngularJS
How to add a test coverage report to an Angular CLI project

Angular + Rails

Get started with Angular 4 and Rails 5
How to deploy an Angular CLI webpack project to Heroku
How to deploy an Angular 2/Aails 5 app to Heroku
How to deploy an Angularjs/Rails single-page application to Heroku
How to deploy a Rails application with an Angular CLI Webpack front-end


All my best programming tips
Stuck on a programming problem? These tactics will get you unstuck about 99% of the time
Variable name anti-patterns
Common legacy project challenges and how to address them
Unlike real debt, technical debt is unavoidable
Who’s to blame for bad code? Coders.
“Perfect is the enemy of the good” is a false dichotomy
“It’s ugly but it works”
Why small stories are better than big ones
Refactorings should be atomic
Why the boy scout rule is insufficient
My favorite debugging techniques
My first attempt at a genetic algorithm
My second attempt at a genetic algorithm

Non-Technical Articles

How to get traffic for a technical blog
How to make your organization attractive to engineering talent
My experience speaking at 7 tech conferences in 9 months including RailsConf, RubyHACK and RubyConf India


RailsConf 2019 – Coding with an Organized Mind
RubyHACK – Using Tests as a Tool to Wrangle Legacy Projects
RubyConf India – Using Tests as a Tool to Wrangle Legacy Projects
Chicago Angular Meetup – Introduction to Angular 2