cd CosmicDevelopment

Discipline is the product.

Most of what separates a codebase that is pleasant to work in from one that is not comes down to conventions being enforced by machinery rather than remembered by people. This is standard on every project we run.

What that looks like on an average project.

First daybin/setup
$ bin/setup

  database      dropped, created, migrated
  fixtures      loaded, 2 tenants, every role
  credentials   owner / admin / staff / customer

  ready on http://localhost:3000              4.1s
Before every pushbin/test
$ bin/test

  models          1,284 assertions            1.9s
  jobs              212 assertions            0.6s
  controllers       891 assertions            3.1s
  mailers            96 assertions            0.7s
  system (rack)     340 assertions   12w      6.4s
  system (js)        54 assertions    4w      9.2s

  2,877 assertions, 0 failures, 0 skipped       22s
  coverage  models 100%  controllers 100%  jobs 100%

Representative, not a target. Seconds, not minutes, and that is deliberate. A suite that takes twenty minutes stops being run, and a suite nobody runs is decoration.

How we operate

Nobody here manages anybody.

We do not hire people in order to manage them. No delivery manager, no ceremony, no status meeting that exists to reassure someone else. You get the problem, the context and the access.

It fails immediately with anyone who needs to be told what to do next, which is most of what we screen for.

Agents

We use agents. The standard did not move.

We use coding agents where they earn their place, and our repositories carry written briefs for them. It has made us faster on the mechanical work. It has not changed what we are willing to ship, and the reason is worth stating plainly.

Generated code is fluent whether or not it is correct. It compiles, it reads well, it passes the tests that already exist. That removes the signal experienced reviewers have always relied on, which is that bad code usually looks bad. So the discipline has to carry the weight instead.

Teams with real test discipline get faster with this. Teams without it get faster at producing unverified change, which feels like acceleration for about a quarter.

Stack

What is actually in production.

Languages
Ruby, JavaScript and TypeScript, Python, Swift, Kotlin, SQL, Bash. Rails because it is the best of what we have used, not out of loyalty
Backend
Rails, Node, PostgreSQL, Redis, Sidekiq, Solid Queue, GraphQL and REST
Front end
Hotwire, Turbo, Stimulus, Sass, React where a codebase already has it. Barebones by default
Mobile
Native iOS in Swift, native Android, on-device computer vision, speech recognition, push infrastructure, in-app purchase
Payments
Multi-gateway routing, sub-merchant settlement, double-entry ledgers, reconciliation, open banking, on-chain rails
Infrastructure
Cloudflare Workers and R2, Heroku, AWS, DigitalOcean, Neon, Supabase, Kamal. Containers when a client requires them, never as a default
Data
PostgreSQL, Redis, DuckDB, Elasticsearch where search demands it, Python for analysis and pipelines
Testing
Minitest, RSpec, Capybara, Selenium, VCR, WebMock, parallel system tests
Quality
RuboCop with project-specific cops, Brakeman, Bullet, Rack::Attack, migration safety checks, Sentry and Datadog
Agents
Used where they help, held to the same standard as anything else. Written project briefs in every repository, and nothing ships on the strength of looking right
Localisation
Fully bilingual applications, key parity enforced in CI