How We Use LLMs to Build Software

LLMs have completely changed our process for building software. It's part of why we've been able to complete consulting projects efficiently and deliver robust solutions. Here's our general workflow:

Research

  • Research the problem with ChatGPT (GPT-4o), since it formats the results better than Claude
  • Manually summarize what we've learned. We could probably use LLMs for this, but manual summarization helps ensure we understand the problem and remove unnecessary context

Architecture

  • Give the summary to Claude (Sonnet 3.5), and describe our high-level idea of how to design the system. This is based on our collective experience writing design documents over the past decade
  • We ask Claude to give suggestions as a list, which we then confirm or deny based on our domain expertise
  • Ask Claude to create a design doc. We provide examples of docs we've written manually before, which is important so it understands our style and requirements
  • Give a list of feedback on the doc, and have Claude provide a list of updates to approve. We iterate through this feedback cycle several times
  • After a few iterations, it's not worth prompting Claude to edit the doc anymore. At that point, we take over and finish the document ourselves

Scaffolding

  • We maintain starter templates for various types of LLM projects. We upload the files plus directory structure into a Claude project and add the design doc. Then we ask Claude to set up the initial codebase
  • This approach doesn't always work perfectly, but we usually get at least some usable pieces. When we have specific technical preferences, we provide additional guidance
  • We typically only prompt like this for a few cycles before stopping. Sometimes we'll go back a few steps and reset the context so it doesn't confuse itself
  • If the AI-generated scaffolding isn't meeting our standards, we can always code manually as needed

Coding

  • From there, we mostly use Cursor (with Sonnet 3.5) and GitHub Copilot to write most of the code
  • We've developed numerous techniques to get this to work properly (primarily giving small enough chunks of work with the minimal necessary context)
  • This part of our process is so detailed that it could be an entire blog post on its own!

We find that working with LLMs automates most of the mundane aspects of starting a project: writing documentation, debugging, scaffolding, etc. Plus, it's like having unlimited access to a domain expert who can also code at a Principal Engineer level.

Our team estimates that we're 2-10x more efficient with these tools, depending on the project! Sometimes even more because we can work effectively in areas where we don't have extensive prior experience.

This approach to software development allows us to deliver high-quality solutions for our clients more rapidly and with greater flexibility than traditional development methods. It's one of the key advantages we bring to every project engagement.

← Back to Home