Jake Worth

My Development Roadmap

October 20, 20204 min read

I’ve been working on a development roadmap for my projects, and wanted to share my process. Consider this my recipe to turn an idea into software.

The purpose of codifying a workflow like this is to make working with me a predictable and thorough experience. Writing software is pretty hard; it’s much harder when you don’t have a plan. Every item here is à la carte– I wouldn’t typically do more, but I might do less on projects of modest scope.

What do I have to show for these words? Several dozen production greenfield and legacy client projects, an in-development startup where I’m Developer #1, and a few things enumerated on my about page. I’m still a work in progress and learning, and this is how I do my best work right now.

Introduction

Almost everything I know about software, I learned at Hashrocket. This process is very similar to what I’ve done dozens of times with my team there. The main difference is that I’ve added a few steps we don’t typically do, like the competitive analysis, at Hashrocket because our clients have usually done that themselves prior to our engagement. We also have dedicated project managers and designers. For my personal projects I’ve tried to teach myself enough to wear those hats when required.

The flow here also draws inspiration from the following outstanding resources:

Here is my process.

  • Design Discovery
  • Kickoff Meeting
  • Competitive Analysis
  • User Personas
  • Technical Discovery
  • UX Design
  • UI Design
  • Prototyping and Estimation
  • Development

Design Discovery

What kind of design expectations are we beholden to, or do we aspire to?

Deliverable: a written document via Google Docs or Basecamp. If neither of those platforms is your cup of tea, chose your own document-sharing service. I think it’s really important that these docs are accessible by everyone at any time.

Kickoff Meeting

The first of only a few real meetings! Here’s a great overview of this process from Lucidchart.

A few agenda items for this one-hour meeting:

  • Introductions
  • Project Background
  • Project Mission Statement: Short, articulate, and inspiring
  • Scope
  • Development Roadmap Review
  • Roles
  • Collaboration
  • Questions
  • Next Steps

Deliverable: a productive meeting and notes with actionable action items.

Competitive Analysis

What are the other folks doing?

Deliverable: spreadsheet.

User Personas

Who are our users? We’ll brainstorm demographic data about them.

Deliverable: spreadsheet.

Technical Discovery

What kind of technology do we want to use? Which boring technologies are we going to use, and are we planning to spend any innovation credits?

Deliverable: written document.

UX Design

We’ll build a feature map and user flow in Whimsical, and wireframes via Sketch. I’m still refining my wireframes process, and to paraphrase The Pragmatic Programmer chapter 21, I generally ignore:

  • Correctness: details don’t have to be perfect
  • Completeness: leave off things we don’t yet understand
  • Robustness: keep the design simple
  • Style: no colors, no responsive design (desktop or mobile, not both), generic typesetting

Deliverable: feature map, user flow, and wireframes.

UI Design

We’ll produce style concepts and a style guide via Sketch, and high-fidelity mockups via Sketch Cloud. Here I’m taking design and UX more seriously, staying mindful of the Iceberg Secret.

Deliverable: style concepts and guide, mockups.

Prototyping and Estimation

If we haven’t already, we’ll make a high-fidelity clickable prototypes via Sketch Cloud. Then, we’ll do development estimates via storycarding, using Vim Slurper, BDD syntax, and Pivotal Tracker. Finally, we may make a development proposal, a written document in Basecamp or Google Docs.

Deliverable: Prototypes, stories, written document.

Development

Time to write the code! This entire blog summarizes how I’d handle this phase. We’ll be doing Agile, iterative development, with daily standups, refinement, estimation, planning, development, delivery, and retrospectives. The deliverable is the universe-denting software. When we’re finished, we’ll launch! 🚀

I’ll use a wide variety of tools here, writing code with Vim and tmux, hardening my work with techniques like pair programming and code review, persisting data with databases like PostgreSQL, building functionality with languages like Ruby, JavaScript, and Elixir, leveraging frameworks like Rails, Phoenix, Create React App, and Gatsby.js, deploying to platforms like AWS, Heroku, Vercel, Netlify, and Gigalixir, envisioning design with tools like Sketch, managing stories with Pivotal Tracker, video conferencing with Skype, Google Meet, or Zoom, running retrospective via Easy Retro or Basecamp, and more. A craftsperson is only as good as their tools. I am constantly upgrading and sharpening mine.

Deliverable: working software to specification.

Conclusion

That’s it! I plan to update the workflow periodically as I continue to ship and refine. I hope this was helpful.

Keep building!


Blog of Jake Worth, software engineer in Maine.

© 2021 Jake Worth.