naildrivin5.com

Website of David Bryant Copeland

Actual Reasons to Use Test-Driven Development

Test-Driven Development is often sold as a way to be more productive or produce better designs, but it’s these unprovable claims that make skeptics even less likely to adopt the practice. Instead, TDD should be sold as a tool to reduce the risk of software not working as intended without expending huge amounts of effort and time doing so. Because that’s what it does (yes, it’s about testing).

A Framework for Product Design Beyond the Happy Path

Product design—really all of design—is about how the user’s problem is solved. It’s about how it works, not how it looks. Each problem gets addressed in one of five ways: direct support via the happy path, a supported edge case, the customer support team, the engineering team, or oblivion (where it is not actually solved).

Inexperienced designers focus entirely on the happy path, whereas most product designers focus only additionally on edge cases. Even then, the lack of involvement from engineering and customer support can leave the design woefully under-developed.

This post outlines a slightly structured model for thinking through a product design inclusive of the entire user experience, including customer support.

The Four Stages of Testing That Help Your Focus

When writing tests, it’s useful to consider that the tests are always in one of four distinct stages, and knowing which stage they are in can direct your next steps. This can make testing a bit less painful than it might otherwise be.

The four stages are:

  1. The code doesn’t compile/build/parse
  2. The tests produce an error (as opposed to a failure)
  3. The tests are failing
  4. The tests are passing

Start Tracking KPIs Early in Your Startup

Previously, I gave an overview of getting started as CTO of a startup. I’d like to expand on the first part, “Understand How the Business Works” by talking about surfacing business metrics or key performance indicators as early as you can to keep everyone aligned. This is a great way for you to understand the business and motivates good data modeling from the start, which is a great way to manage carrying costs.

At a Startup? Write as Little Software as you Can

Since May of last year, I’ve been CTO of Mood Health, which is a pre-Series-A startup providing clinical treatment for anxiety and depression. The engineering team is myself and one other person, and what I’ve experienced is something I knew intellectually: write as little software as possible.

To do this effectively requires understanding how the business works, designing your code, process, and tools for constant change, and being ruthless in delivering solutions that require the least amount of software. I want to talk about exactly what this means and why it’s important.

Sustainable Rails is DONE!

Way back at RubyConf 2019, I announced a book about sustainable web development using Ruby on Rails, based on my 6+ y ears of experience doing so at Stitch Fix (and 18 months not doing so at LivingSocial).

It’s done, it’s 450 pages, and you can buy it now for $49.95 as an ebook (PDF, epub, Kindle, Markdown formats). If you write Rails code professionally, and struggle with keeping your app maintainable and easy to work on, this is the book for you.

In Which I Attempt to Explain Responsive Images

Getting responsive images to work via the srcset and size attributes to img is not easy, especially because almost all documentation I have found is vague as to what exactly the word “pixel” means in any given context. This post will sort that out.

Interview of SOLID Principles

I recently did an interview with local DC dev community Hatchpad about the dangers of blindly applying patterns, and how not-helpful the SOLID principles are.

One thing mentioned that isn’t in the SOLID book is that we all need to understand not just the advice we’re given, but who is giving it. What is the actual experience of the person telling us how we should code?

If someone is giving out advice I want to know – “Have you done that? Have you experienced this problem, or is it just theoretical?”

I try very hard to only give advice based on my actual experience, and I try to contexutalize that experience as much as I can to avoid it being mis-applied. It’s not easy and I don’t always do a great job, but I’m very aware of it. Even if my advice boils down to “it worked for me, anyway”, that’s better than “I haven’t tried it, but it seems neat”.