Blog Archive A Simple Explanation of Postgres' Timestamp with Time Zone October 10, 2024 Custom Elements Reacting to Changes October 01, 2024 HTML Web Components Re-Use Logic, Which is What You Want September 30, 2024 Achieve Static Typing Benefits in Ruby with Keywords Args and Class Constants September 25, 2024 Create public-facing unique keys alongside your primary keys August 26, 2024 Three Good and Three Bad Things about Docker May 24, 2024 Estimates are Fine. They Build Trust When You Provide Them And Deliver On Them May 10, 2024 Ruby's Complex Branching Options April 29, 2024 Sustainable Dev Environments with Docker and Bash Available Now April 01, 2024 Methods Don't Succeed our Fail: they Have Outcomes March 01, 2024 Web Components in Earnest January 24, 2024 Ideas for RailsConf January 12, 2024 Picard Sidekiq Tip: Split Up Independant Operations December 20, 2023 Web Components: Templates, Slots, and Shadow DOM Aren't Great November 20, 2023 Web Components Custom Elements Lifecycle is What Makes Them Useful November 19, 2023 Appearance on Software Sessions Podcast November 18, 2023 What is WebComponents Buying Us? November 17, 2023 Sustainable Rails Available in Humble Bundle November 13, 2023 Fan-out Sidekiq Jobs to Manage Large Workloads November 09, 2023 Ruby on Rails Background Jobs with Sidekiq is Complete October 19, 2023 The Katz Conjecture: You Must Understand What an Abstraction Abstracts October 17, 2023 Appearance on the Maintainable Podcast October 03, 2023 Starlight Dawn August 28, 2023 Getting 'Save to Home Screen' to Kinda Work on iOS August 24, 2023 Appearance on Rooftop Ruby August 03, 2023 Ruby on Rails Background Jobs with Sidekiq Beta July 12, 2023 My Toolchain for Building Programming Books February 03, 2023 Dealing with Flaky Tests November 29, 2022 An Alternative View on Avdi's Barewords Video November 21, 2022 Your Rails and Ruby Versioning and Gemfile Policy November 17, 2022 RSpec Examples are, well, Examples November 09, 2022 Wrap Third Party APIs in Service Wrappers to Simplify Your Code October 31, 2022 How I Use Tachyons for CSS October 28, 2022 Treat Rails for What it Is and Organize Code By Structural Purpose October 25, 2022 Actual Reasons to Use Test-Driven Development September 06, 2022 A Framework for Product Design Beyond the Happy Path August 15, 2022 The Four Stages of Testing That Help Your Focus August 04, 2022 Talking SOLID is not Solid on Code with Jason January 04, 2022 Code Reviews—or not—at an Early Startup April 27, 2021 Start Tracking KPIs Early in Your Startup April 07, 2021 At a Startup? Write as Little Software as you Can March 31, 2021 Ruby on Rails: Still the Best Web App Framework for Most Teams November 23, 2020 Sustainable Rails is DONE! November 16, 2020 In Which I Attempt to Explain Responsive Images October 31, 2020 Interview of SOLID Principles June 17, 2020 Names matter June 11, 2020 50% of Self-Published Royalties Being Donated to The Bail Project June 02, 2020 Docker on Mac for Development with Fast Disk Access and Webpack Dev Server May 13, 2020 Sustainable Web Development with Ruby on Rails now in Beta April 07, 2020 The One Strategy for Working Remotely March 12, 2020 Podcast Appearance on Code With Jason March 10, 2020 The Law of Demeter Creates More Problems Than It Solves January 22, 2020 SOLID is not Solid: The Book January 14, 2020 Dependency Inversion Principle…is a Tradeoff (SOLID is not solid) December 02, 2019 Interface Segregation Principle is Unhelpful but Inoffensive (SOLID is not solid) November 21, 2019 Liskov Substitution Principle is…Not a Design Principle (SOLID is not solid) November 18, 2019 The Open/Close Principle is Confusing and, well, Wrong (SOLID is not solid) November 14, 2019 SOLID Is Not Solid - Examining the Single Responsibility Principle November 11, 2019 A Reasonable Development Environment September 24, 2019 How Can I Help? September 03, 2019 Leaving Stitch Fix September 03, 2019 A Rubric for Open Source Documentation August 23, 2019 Event Sourcing in the Small August 14, 2019 Choosing Technology August 08, 2019 Four Better Rules for Software Design July 25, 2019 The Frightening State of Security Around NPM Package Management July 10, 2019 Coding without (many) Expressions June 29, 2019 Timeline: the programming language for time travel June 24, 2019 Database Design for Beginners Talk at RailsConf May 27, 2019 Brustalist Web Design Dark Mode May 23, 2019 Agile Web Development with Rails 6 in Beta April 30, 2019 Webpack From Nothing Updated For Webpack 4 March 28, 2019 Brutalist Web Design June 12, 2018 Creating a Culture of Consistency May 06, 2018 What Problem Does a Blockchain Solve? April 16, 2018 Running a Static Site with SSL on AWS February 20, 2018 Now using SSL February 18, 2018 Explicit Code is Inclusive February 02, 2018 How to Travel to San Francisco Every Other Month for Five Years January 25, 2018 Work vs Meta-Work: Delivering the Right Results January 19, 2018 Explaining Serverless Architectures January 11, 2018 Rails Is More Relevant than Ever December 11, 2017 On Slow Test Suites and CI Servers November 21, 2017 The JavaScript Ecosystem and Interoperability October 12, 2017 Webpack from Nothing: WTF is a Webpack? October 02, 2017 Stacktrace Typography September 13, 2017 Zeal Interstings Podcast Discusses My Post on Developer Productivity September 11, 2017 Four Reasons Developers are Unproductive July 17, 2017 Rails, Angular, Postgres, and Bootstrap is Done and in Print! June 25, 2017 I'm Co-authoring Agile Web Development With Rails May 11, 2017 Patterns of Service-Oriented Architecture May 09, 2017 Appearance on the Tech Done Right Podcast March 08, 2017 Articulating a Vision January 17, 2017 What Westworld Can Teach Us About Devops January 10, 2017 Learn Graphviz and Up Your Diagramming Game December 08, 2016 On Being On Call December 07, 2016 Configuration Design is User Experience Design…and it's hard December 06, 2016 Writing even more legible SQL November 04, 2016 Rails, Angular, Postgres, Bootrap Second Edition in Beta! October 19, 2016 Imagined Rails 6: Why A Service Layer? June 16, 2016 Imagined Rails 6: Doubling-down on Resource-based Design June 15, 2016 Imagined Rails 6: Out with JQuery, in With ES6 June 14, 2016 Imagined Rails 6: No More Per-View CSS June 13, 2016 Why did I Recommend What I Did for Rails 6? June 12, 2016 Don't Use the UNIX Environment Directly June 10, 2016 My talk on scaling Rails from RailsConf 2016 May 31, 2016 Test Behavior, not Configuration May 23, 2016 Announcing Rails 6: An Imagined Keynote May 17, 2016 The 'Type Wars' Are Far From Over May 03, 2016 Technology is Terrible April 10, 2016 It's not Naming That's Hard—It's Types March 15, 2016 “Why You Need a JavaScript Framework” in March's PragPub March 03, 2016 More on Leveling Up March 02, 2016 Dishonest Abstractions are Not Abstractions February 22, 2016 There is no Happy Path in Programming January 29, 2016 Rails, Angular, Postgres, and Bootstrap is in print! January 22, 2016 Hierarchy of Software Needs January 13, 2016 My Talk from Full Stack Toronto 2015 November 30, 2015 All my books are on sale! November 27, 2015 Rails Validations vs Postgres Check Constraints November 15, 2015 Embrace the Full Stack November 05, 2015 Simple Rails Apis With Stitches November 04, 2015 My New Book July 29, 2015 What I learned interviewing with Instagram July 21, 2015 Naming and API Design June 15, 2015 Anatomy of a Rails Service Object June 02, 2015 How to be a Great Software Engineer in 2 Steps February 21, 2015 What You Don't Get With ActiveJob October 01, 2014 Why Scrum Should Basically Die in a Fire September 18, 2014 Rails' Degenerate Front-End Support August 07, 2014 What Makes Code Hard to Understand? July 13, 2014 The Complexity of Object-Oriented Design July 11, 2014 Dealing With Resque Failure July 02, 2014 Thinking In Types June 30, 2014 Resque Brain - a Better Resque Web UI June 12, 2014 Understanding New Programming Languages June 05, 2014 What Swift Tells Us About Programming Language Trends June 04, 2014 Rails Does Not Define Your Application Architecture May 27, 2014 Use Bower for managing front-end assets in Rails April 10, 2014 Getting Angular and Rails Working Together April 07, 2014 Doing your best work March 16, 2014 What Rails says about your application design March 07, 2014 A defense of ivars in Rails controllers February 09, 2014 Rails Application Templates January 06, 2014 Presenters: Delegation vs Just Making a Struct December 20, 2013 Startup Engineering Team Super Powers December 10, 2013 Org Charts and Diff Production December 03, 2013 Introduction to GLI December 02, 2013 Square Wallet is Almost Awesome November 18, 2013 Self vs Professional Publishing October 14, 2013 An Introvert Goes to Dinner September 27, 2013 My Book is On Sale September 13, 2013 Chromebook Keyboard Slightly Innovative September 06, 2013 A real keyboard for programmers? August 29, 2013 Inconsistent Architecture August 21, 2013 Responsible Refactoring August 08, 2013 Manual vs Automatic Continuous Deployment August 07, 2013 Stitch Fix Git Workflow July 30, 2013 Agile Email Management July 23, 2013 The Senior Software Engineer - My New Book July 15, 2013 Production is all that matters June 16, 2013 Source Code Typography May 17, 2013 Getting OmniAuth with Google Apps to Work on Heroku April 29, 2013 How to switch to Vim April 24, 2013 The Painful World of JavaScript Testing April 10, 2013 Technological Conservatism April 08, 2013 What RSS Means to Me March 18, 2013 Is Your DSL Really a Type System? February 28, 2013 Stitch Fix! February 19, 2013 What I mean by 'calling out' bad code January 30, 2013 What I learned working at LivingSocial January 27, 2013 If you call out bad code, make sure it's bad first January 24, 2013 Bad Programming in Java is Dangerous January 20, 2013 What Dependency Injection Really Is January 07, 2013 DCI vs Just Making Classes January 02, 2013 DHH on Hypermedia Hype December 20, 2012 Re-use in OO: Inheritance, Composition and Mixins December 19, 2012 Why you can't refactor test code November 16, 2012 Making it Right: Technical Debt vs. Slop October 05, 2012 GLI 2.0 August 19, 2012 Hate COBOL, not Java? August 13, 2012 End of Rational Discourse? August 10, 2012 Running Stock August 02, 2012 Hungry Academy graduates July 30, 2012 Six languages to master July 29, 2012 A world without nil July 25, 2012 Slides from my OSCON talk July 19, 2012 Adventures in functional programming with Ruby July 17, 2012 What is 'better' code? June 27, 2012 Tap versus intermediate variables June 22, 2012 Single Responsibility Principle and Rails June 10, 2012 Lookup tables with lambdas May 16, 2012 † What Makes an Awesome Command-Line App? May 02, 2012 Five Months of eBook Sales April 24, 2012 Methadone 1.0 with Awesome Tutorial April 11, 2012 I heartily endorse Ruby off Rails April 05, 2012 A Protocol for Code Reviews April 02, 2012 The Nine Facets of an Awesome Command-Line App April 01, 2012 Slides from my Talk on JRuby and Threads March 23, 2012 Trailer for my Book March 19, 2012 Something fun I'm working on February 23, 2012 Quote: Mocking and Dynamic Typing February 22, 2012 Mountain Lion Does Not Concern Me February 19, 2012 Even More Clean Tests:Magic Values February 16, 2012 Avoid the Kingdom of Nouns with Procs January 30, 2012 More Clean Tests: Handling Mocks & Block-based asserts January 16, 2012 The War on Comments January 11, 2012 Make Tests Clean and Clear without Duplication January 08, 2012 2011 In Review January 02, 2012 Review of 'Working with Unix Processes' December 22, 2011 Introducing Methadone, the Awesome Command-Line Library December 19, 2011 My Book's in Beta! October 25, 2011 DC's New 52 Review October 21, 2011 Curation FTW and the End of References August 07, 2011 Why I'd never work for Google, Twitter, or Facebook August 01, 2011 I spent a dollar on something that's free April 28, 2011 Hyperscheduling - How I find time to do things I hate April 06, 2011 Why not use bash? April 02, 2011 One Week of using my iPad for personal stuff at work January 10, 2011 2010 in review; what's next for me in 2011 January 01, 2011 Static vs. Dynamic Typing: A matter of keystrokes? August 24, 2010 In "Offense" of Scala's Option class; a guarded defense of Cédric's rant July 30, 2010 My first iPhone App - Part 5 July 18, 2010 My first iPhone App - Part 4 July 08, 2010 My first iPhone App - Part 3 June 29, 2010 My first iPhone App - Part 2 June 27, 2010 My first iPhone App - Part 1 June 23, 2010 In defense of vi June 14, 2010 Are private methods code smells? May 26, 2010 Video of My Talk at ScalaDays 2010 April 30, 2010 Scala Days Impressions April 22, 2010 The only four types of classes in your OO system March 08, 2010 Reading a File in Scala vs. Java vs Ruby January 26, 2010 Unicode in Your Domain Names January 24, 2010 Top 5 Shocking Omissions from Spring MVC January 09, 2010 Prezi on decoding the Scala Map literal November 24, 2009 Writing a URL Shortener in Scala - The Good, The Bad, The Ugly November 23, 2009 Make your own literals in Scala November 14, 2009 Deconstructing the Scala Map Literal November 12, 2009 Why Github Can Open-Source Their Libraries November 01, 2009 An anecdote about Joel Spolksy at DevDays DC October 27, 2009 Mocking Enumeration in Scala with EasyMock October 21, 2009 Moved my blog to Jekyll October 17, 2009 My own personal tour of Scala September 10, 2009 Intro to Scala for Java Developers - slides August 17, 2009 Simple Metrics for Team and Process Improvement June 29, 2009 Stand While You Work! June 20, 2009 Lead or Bleed May 25, 2009 Learning Cucumber - With Dynamic types must come documentation May 21, 2009 Why maven drives me absolutely batty May 13, 2009 Git Workflow with SVN April 28, 2009 REST Compliance Officer March 17, 2009 Java Annotations - Java's love of configuration over convention March 11, 2009 Git, GitHub, forking: the new hotness February 05, 2009 Execute on your ideas now; forget secrecy, forget tweaking January 22, 2009 Command line interface for Gliffy January 14, 2009 GitHub does it again; another killer feature December 18, 2008 Gliffy API private beta: what should I do? December 12, 2008 Why underscores might be better than camel case December 10, 2008 Gliffy updated their site! December 09, 2008 EMMA and TestNG for Simple Java Code Coverage December 07, 2008 I can haz job December 01, 2008 Ruby's awesomely dangerous awesomeness October 31, 2008 Interview Rubric really needed? October 24, 2008 Things I'd like to leave behind October 14, 2008 Ruby and dead simple code coverage October 14, 2008 Interviewing the Interviewer: A Rubric October 07, 2008 Are you emailing yourself your log errors? You should be. September 26, 2008 Getting Rake's PackageTask to depend on generated files September 17, 2008 Better open-source hosting: SourceForge is looking weak September 17, 2008 Test REST Services September 12, 2008 Schema for REST services September 11, 2008 Didn't do Test-Driven Design? Record your test cases later September 08, 2008 Daily backups are gonna save my butt June 01, 2008 Using ThreadLocal and Servlet Filters to cleanly access JPA an EntityManager May 14, 2008 Time Machine almost saved me, but git won out in the end May 09, 2008 Using Java Persistence with Tomcat and no EJBs May 08, 2008 Git and SVN: connecting git branches to svn branches April 28, 2008 REST Security: Signing requests with secret key, but does it work? April 21, 2008 Shell history meme April 17, 2008 Distributed version control with Git for code quality and team organization April 15, 2008 Quick and Dirty Code Reviews: Check commit logs April 03, 2008 Imports considered annoying and pointless December 01, 2007 Why is J2EE/JBoss configuration such a nightmare? November 26, 2007 Google Maps Pedometer June 29, 2006 The Power of Digital Audio June 28, 2006 Wikipedia and the speed of eBusiness June 20, 2006 Acquisition of a USB cable June 14, 2006