Creating scalable web services
with speed, precision, and
uncompromising quality

A small senior team building production systems in Ruby and Go. We design APIs, ship microservices, and run the infrastructure that keeps them online — on demand, on contract, on call.

Avg. p99 latency
0ms
Production uptime
0%
Services shipped
0+
Team experience
0yrs
S/01 — Services

Three disciplines.
One team that owns the outcome.

Engaged à la carte or as a unit. Each track is staffed by senior engineers who write code, review code, and stay on long enough to see it run in production.

Ruby, end to end

Greenfield products and serious upgrades to existing monoliths. We write the kind of Ruby that scales past the seed round — clear domain models, boring infrastructure, and tests that mean something.

  • +Our own dry-rb framework / Ruby on Rails Rails 7+
  • +API-first apps with versioned JSON contractsREST · GraphQL
  • +Background work with Sidekiq, GoodJob, Solid QueueAsync
  • +Postgres performance, indexing, partitioningDB
  • +Audited rescues of legacy Rails apps (4.x → 7.x)Migration
users/models/booking.rbRB
class Booking < ApplicationRecord
  belongs_to :account
  has_many   :line_items, dependent: :destroy

  scope :billable, -> { where.not(invoiced_at: nil) }

  # settle the booking, idempotently
  def settle!
    transaction do
      lock!
      return if settled?
      Ledger.post(self)
      update!(settled_at: Time.current)
    end
  end
end

Go microservices that earn their keep

For the parts of your system where latency, throughput, and resource cost actually matter. We design services around clear boundaries, then we ship them with the observability you need to operate them.

  • +gRPC + Protobuf service contractsRPC
  • +Event-driven systems on NATS, Kafka, RedpandaStreams
  • +Strangler patterns — peeling services off a Rails monolithMigration
  • +Custom CLIs, controllers, and operatorsTooling
  • +Load & chaos testing before launchHardening
internal/booking/handler.goGO
func (s *Server) Settle(ctx context.Context,
    req *pb.SettleRequest) (*pb.SettleReply, error) {

  ctx, span := otel.Tracer("booking").Start(ctx, "Settle")
  defer span.End()

  b, err := s.repo.Lock(ctx, req.Id)
  if err != nil { return nil, status.Errorf(codes.NotFound, "%v", err) }

  if b.SettledAt.Valid { return &pb.SettleReply{Idempotent: true}, nil }

  if err := s.ledger.Post(ctx, b); err != nil {
    return nil, err
  }
  return &pb.SettleReply{SettledAt: timestamppb.Now()}, nil
}

DevOps & SRE on call

The deploy pipeline, the dashboards, and the pager. We bring up the platform that lets your engineers ship without blocking on infra — and we stay long enough to hand it back cleanly.

  • +Kubernetes platforms on EKS, GKE, bare metalPlatform
  • +Terraform / Pulumi infra-as-code from scratchIaC
  • +CI pipelines that go from PR → prod in minutesCI/CD
  • +Observability: OpenTelemetry, Prometheus, Grafana, LokiObs
  • +Cost audits, right-sizing, multi-AZ & DR drillsReliability
infra/booking-svc.tfHCL
module "booking_svc" {
  source  = "./modules/svc"
  name    = "booking"
  image   = "ghcr.io/acme/booking:${var.sha}"
  cpu     = "500m"
  memory  = "512Mi"
  replicas = { min = 3, max = 30 }

  observability = {
    traces  = true
    metrics = true
    logs    = "json"
  }

  slo = { availability = "99.95", latency_p99_ms = "75" }
}
S/02 — Technology

A deliberately small toolbox
that we know cold.

We pick stable, well-understood technology and use it well. Below is roughly everything that ends up in a typical engagement.

Backend
Ruby
Rb
Backend
Go
Go
Database
PostgreSQL
Pg
Cache · Queue
Redis
Rd
Streams
NATS · Kafka
Ns
RPC
gRPC · Protobuf
Pb
Containers
Docker
Dk
Orchestration
Kubernetes
K8
IaC
Terraform
Tf
CI / CD
GitHub Actions
Ga
Cloud
AWS · GCP
Cl
Observability
OpenTelemetry
Ot
S/03 — How we work

Senior engineers, end to end.
No handoffs, no theatre.

A four-step engagement that matches how good software actually gets built. We size the team to the problem and stay until production is calm.

Discover

One week. We read your code, talk to your team, and write back what we heard. You decide if our model of the problem matches yours.

Design

Architecture sketches, API contracts, and a phased plan with concrete milestones. Costed and dated.

Build

We ship in two-week increments behind feature flags. Every increment is reviewable, deployable, and reversible.

Operate

We stay on-call through launch and beyond. When we leave, your team owns the runbooks, the dashboards, and the code.

Plan / 01
Project

A scoped piece of work with a fixed shape. New service, monolith carve-out, platform spin-up.

  • 4–16 week engagements
  • Cross-functional pod (2–4 engineers)
  • Deliverables and milestones agreed up front
From 6 weeks · fixed scope
Plan / 03
DevOps retainer

Platform & SRE coverage on a steady monthly basis. Pipelines, dashboards, on-call, incident review.

  • Defined SLOs and response windows
  • 24/7 on-call rotation available
  • Quarterly reliability reviews
Monthly · cancel any quarter
S/04 — Contact

Tell us what you’re building.
We’ll write back within a day.

Short note is fine. We’ll follow up with the right questions before any meeting.

Email
client@wetter.team
Office
Montenegro · Remote
Hours
Mon–Fri · 09:00–18:00 CET
On-call
24 / 7 for retainer clients