We've been fairly effective at getting Claude Code to write useful code on our repos. I say useful, in that it saves some time. Not in that it's ready to ship.  However, this seems to be in a large part because we have a lot of patterns that are supportive of human developers as well:

  • Good README in each repo
  • Makefiles (with help) in each repo that make it easy to work with the service locally
  • All service defaults work in dev so locally you don't have to specify any configuration
  • Docker builds and all deps running in `docker-compose` so you can stand a service up locally
  • Shared patterns between repos that are enforced (e.g. same libs, same DBs, etc)
  • Shared protobuf schemas used by all services
  • Extracted libraries with common code
  • Standardized testing framework
  • 80+% test coverage on Go repos, higher on Elixir repos where type safety doesn't help as much
  • A system-wide YAML file describing each service, what it depends on, what it produces and consumes

All of the above makes it easy to work on our codebases for humans. And it makes AI much less likely to go off script and make a mess.