Python in production since 2016

Python systems that earn their place — not just because it is fast to prototype.

Python development for backend services, data engineering pipelines, and ML infrastructure. We pick Python where it is the right tool — FastAPI, Django, Polars, dbt, Airflow — and tell you when Go or Rust would be better. No "Python everywhere" zealotry. Senior engineers only.

63
production Python services in active maintenance
9YR
median team experience with Python in production
0%
junior data scientists on senior engagements
1.Why teams call us

Three patterns that signal Python is the wrong tool.

Python development engagements often arrive after someone tried Python first and discovered the constraints. The first call is often about whether to keep going or switch stack.

Bottleneck — 1

The data pipeline was prototyped in pandas and now will not scale

The original pandas script worked great in the notebook. In production it now takes 6 hours, OOMs on the larger partitions, and the engineer who wrote it left. The team is staring at Polars, DuckDB, Spark, and Dask — wondering which to migrate to and whether the rewrite is worth the cost compared to throwing bigger machines at the problem.

Bottleneck — 2

FastAPI service is the bottleneck and nobody is sure why

Latency degraded over the last six months. CPU is fine. The async/await code looks correct. py-spy shows time spent in places that do not obviously make sense. The team suspects an N+1 query or a connection pool issue but lacks the observability to confirm. Meanwhile every PR makes it slightly worse and nobody has time for a proper profiling pass.

Bottleneck — 3

Python type hints were supposed to help but the codebase is still untyped

Adoption stalled at 30% coverage. mypy fails on the legacy modules. New code adds types; old code never gets retrofitted. The team would benefit from pyright in strict mode but cannot get there from here. Type drift accumulates faster than the cleanup capacity allows.

2.What we build

Six engineering practices priced by deliverable.

Python development priced by deliverable, not by hour. Senior engineers only — minimum 7 years Python in production on every engagement.

— 1

FastAPI / Django backend services

Production-grade Python backend services on FastAPI 0.115+ or Django 5.x. Async where it actually helps, sync where async hurts. Postgres-first data layer with explicit transaction boundaries. OpenTelemetry from day one. We have shipped backends handling 50M+ requests/day for SaaS clients.

$120,000 – $480,000
— 2

Data pipeline engineering

Airflow, Prefect, or Dagster orchestration with Polars or DuckDB transforms (not pandas at scale). dbt for warehouse-resident transformation. Idempotent jobs with explicit retry semantics. We rebuild brittle pandas pipelines into systems that handle 10× the data without bigger machines.

$95,000 – $360,000
— 3

Python performance engineering

py-spy and Scalene profiling under real production load. CPython optimization where it makes sense; Cython, mypyc, or Rust extensions where it does not. We deliver a written diagnostic before any code changes — so you can compare other estimates honestly.

$32,000 – $140,000
— 4

Type system + code hygiene

Pyright strict-mode adoption across legacy codebases. Coverage budgets, mypy-to-pyright migration where it helps, gradual typing strategy. We do this as a 6-12 week sprint with the team — not as a one-engineer audit that produces a report nobody acts on.

$45,000 – $180,000
— 5

ML infrastructure (not models)

The Python infrastructure under ML workloads — feature stores, training data pipelines, model serving, observability. We do NOT build models; we build the platform underneath. Often paired with a client ML team or with the AI/ML development practice next door.

$140,000 – $520,000
— 6

Senior Python engineer embedded

Staff or Principal-level Python engineer placed inside your team. Same standup, same Slack, same on-call. Named individual on contract. 6-12 month rolling engagements. We have done this with Series-A startups through Fortune 500 platform teams.

$22,000 / month
3.How we run engagements

Four steps from audit to handoff.

Same shape every time. Scope adjusts, the method does not. Python development without method tends to slide into "let us just refactor this one more thing".

01.
Step 01
Step 01

Codebase audit

Two-week paid assessment. Static analysis with pyright, performance profiling on representative workload, dependency hygiene scan, architectural debt inventory. Written report. Flat $14,500 fee whether we proceed.

02.
Step 02
Step 02

Architecture

Architecture decision records for non-trivial choices — service boundaries, sync-vs-async strategy, data layer patterns, observability conventions. Type system policy. CI gates agreed before code changes.

03.
Step 03
Step 03

Engineering

Code in your repo from day one. Weekly demos. PR review by your team mandatory. Production deploys behind feature flags. We do not commit code your team has not reviewed.

04.
Step 04
Step 04

Handoff

Three-week parallel period. Your team operates, we shadow. Runbooks tested. SLOs documented. 30-day and 90-day check-ins, then the system is yours.

4.Common questions

What we get asked before signing.

Questions from recent Python development discovery calls. Honest answers, including disqualifying ones.

Often. Python is excellent for backend services, data engineering, ML infrastructure, and rapid iteration. Python is the wrong tool for: high-throughput networking where Go is 5-10× faster, systems with hard real-time latency requirements, large-team monorepos where Java or Kotlin's tooling discipline scales better, and embedded systems. Roughly one in eight discovery calls ends with us recommending the team migrate part of their stack to Go, Rust, or TypeScript — and us suggesting another consultancy for that work.
Honestly and case-by-case. The GIL matters for CPU-bound workloads — for those we recommend either C extensions, multiprocessing, or a different language for the hot path. The GIL does not matter for IO-bound async workloads, where Python's async story is genuinely competitive. PEP 703 (free-threaded Python) is real and shipping in 3.14, but production maturity for the broader ecosystem is still 2-3 years out. We tell clients to plan around the current GIL semantics, not the future ones.
Primarily backend, infrastructure, and data engineering. We do NOT build ML models — that work belongs to data scientists and ML engineers who specialize in it. We do build the Python infrastructure under ML workloads: feature stores, training data pipelines, model serving, observability. We often work alongside a client's in-house ML team, doing the platform work they do not have capacity for.
Depends on data size and the team that will maintain it. Under 10GB and the team knows pandas: stay on pandas. Over 10GB or pandas hurts: move to Polars (faster, more memory-efficient, cleaner API). Heavy analytical SQL: DuckDB. Petabyte-scale or existing Spark workloads: stay on Spark. We rebuild brittle pandas pipelines into Polars + DuckDB stacks for clients fairly often — typically 4-8× throughput improvement on the same hardware.
For most B2B SaaS, we still recommend Django for the admin panel, authentication, ORM, and migrations machinery — even with the async limitations. For pure API services that need async or where the team prefers explicit dependency injection, FastAPI. For background workers, neither — use Celery, RQ, or Dramatiq with whichever web framework you picked. The "rewrite Django to FastAPI" projects we see rarely deliver enough value to justify the migration cost.
Gradual on legacy codebases, strict on new modules. We have never seen a strict-mode-everywhere mandate work on a codebase over 50k lines without budget allocated to the migration. The realistic approach is: pyright strict on new modules and packages, gradual rollback policy on legacy, no type errors in modified code as a CI gate. We typically get codebases from 30% to 80% type coverage within a 12-week engagement with this approach.
04How engagements are priced

Four engagement shapes by deliverable.

Python development priced by deliverable, not by hour. Numbers below are typical ranges from late-2025 / early-2026 engagements.

STEP 01

Codebase audit

$14,500
2 WEEKS

  • Static analysis with pyright + ruff
  • Performance profiling on representative load
  • Dependency hygiene + security scan
  • Same fee whether we proceed or not
BUILD

Backend service build

$120k – $480k
4 – 8 MO

  • FastAPI or Django service from scratch
  • Postgres-first data layer with explicit transactions
  • OpenTelemetry wired from day one
  • Type coverage + CI gates non-negotiable
PIPELINE

Data pipeline rebuild

$95k – $360k
3 – 6 MO

  • Brittle pandas → Polars/DuckDB rebuild
  • Airflow, Prefect, or Dagster orchestration
  • Idempotent jobs with explicit retry
  • Typical 4-8× throughput on same hardware
EMBEDDED

Embedded engineer

$22,000/mo
6 – 12 MO

  • Principal Python engineer on retainer
  • Same standup, same Slack as your team
  • Same on-call rotation as your team
  • Named individual on the contract
05/What clients say

What our clients say.

Senior engineering practice that took our discovery seriously. The proposal was three pages and it held through delivery.

Elena Novak
Head of Engineering · at a research lab spinout

Friday demos, Monday changelogs, documented decisions. Felt like working with an internal team, not an outside agency.

Adam Lindqvist
Chief of Staff · at a healthcare platform

We had two failed prior engagements. The difference here was that they walked away from parts of the scope they could not own.

Bernardo Mori
Chief of Staff · running an e-commerce platform

Tell us about your Python situation.

Send the rough outline — current Python services, what is breaking, what your CTO is asking for. A senior Python engineer responds within one business day with questions or a direct next step.