Matthew Schad

Matthew Schad

Code once, ship twice

As a dev, every time I start a project, I want to think of the "from scratch" process, but why?

The process statement should be "I will want to build many things throughout my life," as opposed to "I want to build this one product differently."

Every time you decide to start a project from scratch, you fall into the pit of deciding on the tech stack, deciding on the framework, deciding on environment configuration settings, deciding on what to use for auth, deciding on if it needs a CMS. While you start from scratch and revisit all of these decision-making processes, another developer begins from a better point, jumping miles ahead of you.

In software, there are plenty of ways to skip some of the pain of restarting:

  1. Github Template Repositories
  2. NextJS and Netlify are an excellent toolkit for rapid deployment
  3. Planning a stepping stone process (from product A to product B, C, or D)
  4. Replicable DevOps Setups (e.g., Azure Resource Groups)

If product A fails, how are you going to use it for product B?

In the order of more to less replicable, there are a few standard online product models in today's world:

  1. Information products

    1. Books
    2. Courses
    3. Newsletters
    4. Data
  2. Community Access

  3. Media (Photography, Video, Sound bites)

  4. Software

  5. Tangible, shipped products

  6. Professional Services

These are mediums for value, and the delivery format is often replicable.

If the delivery is similar for each model, why should my process be different each time?

The output doesn't care if I use raw HTML and JavaScript every time with custom routing code and a nit-picky development process – it cares about getting shipped and into the hands of customers.

TL;DR: When you're building a product, optimize for reusing the output model, not making a "unique product."