Principles
Every engagement starts from your idea, not a forty-page spec. I would rather spend the first conversation understanding what you are building than reading a document that is already out of date — and if your budget does not match your scope, you will hear it before we start, not halfway through.
From there it is straightforward: I push back on features that do not belong in v1, even when building them would raise the invoice. I flag problems the day I see them, not at the next sprint review. And you work with the engineer who designed your system, not an account manager who relays questions to one.
Working with AI
I use AI coding tools every day, and I build AI systems for a living, so I will be direct about where they sit in delivery. They write first drafts of tests, summarise unfamiliar modules before I read them properly, and turn a migration plan into a checklist. Estimation, delivery and operations here all run with LLM-assisted workflows.
What stays human: architecture decisions, anything touching money, authentication or personal data, and the final review on every pull request. I read every line before it lands. If I could not explain a change to your team without the tool open, it does not ship.
This changes estimates less than people expect. Reading a codebase carefully still takes as long as it takes. Build phases get shorter; review and handover do not.
Your code and data
No client code or data goes into a third-party model without your written consent. When you give it, I use providers and modes that do not train on inputs, and I tell you which ones. Secrets, customer data and anything under NDA stay in your repository and your infrastructure — the tools see source code, never your production database.
Flexipy is an EU company (Estonia, OÜ), so GDPR obligations apply to us directly rather than by extension.
Tools
- Python 3.12+, Django, DRF, FastAPI, asyncio, Pydantic v2
- PostgreSQL (with pgvector), Redis, Celery, RabbitMQ, MongoDB
- Claude and Claude Code; OpenAI, Azure OpenAI, AWS Bedrock
- LangChain, LangGraph, MCP servers, structured outputs, multi-agent orchestration
- RAG over pgvector and Qdrant — hybrid search, reranking, layout-aware chunking
- Langfuse, LangSmith, LLM-as-judge on golden datasets, prompt versioning, token and cost tracking
- Guardrails — prompt-injection defence, PII redaction, per-tenant key isolation, rate-limit backoff
- Twilio Media Streams and Azure OpenAI speech-to-speech; YOLO, OpenCV, PDF parsing
- Docker, Kubernetes, AWS, Azure, Nginx, Gunicorn/Uvicorn, GitHub Actions / GitLab CI
- pytest, Ruff, mypy, uv, OpenTelemetry, Sentry, Datadog, ELK
- React and Vue where the frontend is mine
- Cal.com (self-hosted) for calls
What I decline
- —One-off scripts
- —Maintenance-only work
- —Anything decided on lowest bid — we are not the cheapest option
- —Stacks I do not work in — I will say so on the first call
- —Sending your code to a model you have not approved