otvet.co
Marketplace for finding licensed psychologists for online and in-person consultations — topsweteam is the in-house engineering team behind it.
- client
- Otvet.co
- industry
- Mental health / Marketplace
- role
- In-house engineering team
- timeline
- Started 2021, ongoing
- team
- 3 — 1 backend, 1 frontend, 1 tech lead
- status
- live · ongoing
Otvet.co — Case Study
Marketplace for finding licensed psychologists for online and in-person consultations. topsweteam is the engineering team that runs it.
Summary
Otvet.co matches clients with licensed psychologists for video, chat, or in-person consultations across Russia and Kazakhstan. topsweteam is the engineering organization behind the product: we own the public site, the booking flow, the consultation mechanics, and the internal operations back-office. The engagement runs as a dedicated three-person team — backend, frontend, and a tech lead — that has functioned as Otvet's in-house engineering team since 2021.
- Client: Otvet.co
- Industry: Health-tech / Mental-health marketplace
- Engagement: Dedicated team (engineering as a service)
- Timeline: Started 2021, ongoing
- Team: 3 — 1 backend, 1 frontend, 1 tech lead
- Status: Live in production, ongoing development
Challenge
A mental-health marketplace has an unusually high duty of care for a consumer product. Matching, scheduling, payment, consultation delivery, and follow-up all have to work — and on top of that, the data being handled is sensitive, the specialists operate under professional constraints, and the user is often in a state where a rough edge in the UX is more costly than it would be elsewhere. The product also has two very different operating modes: online (where the platform is the consultation channel) and offline (where it's the coordination layer for an in-person meeting).
Approach
We operate as Otvet's engineering team since 2021. That framing shapes every decision — there's no scope handoff, no milestones-then-goodbye structure. Roadmap planning happens jointly with the product team, release cadence is weekly, and we're responsible for the runtime as well as the codebase. The team is intentionally small (one backend, one frontend, one tech lead) — enough to carry a multi-country marketplace, small enough that coordination overhead disappears.
The stack reflects a small team optimizing for long-term maintainability rather than short-term velocity: Django on the backend (mature, batteries-included), React + MobX on the frontend, GraphQL as the contract.
- Python/Django for the backend because the domain fits it — forms, admin, auth, ORM all work out of the box, and the built-in Django admin handled the operations surface on day one.
- GraphQL for the client contract. The same backend serves the public site, the client app, and the internal tools; GraphQL let each surface pick the shape it needs.
- Docker Compose for local and staging environments. Lightweight enough for the team size, and the complexity of our deployment doesn't warrant Kubernetes.
Solution
The platform has three surfaces. The public site is where clients discover specialists and book consultations; the specialist-facing tooling lets psychologists manage availability, sessions, and paperwork; the internal admin is where Otvet operations handles quality, disputes, and the editorial surface of the marketplace. Backend is a Django monolith with a GraphQL API; frontend is React with MobX for local state. Postgres is the system of record. Docker Compose handles environments.
Key features shipped
- Public marketplace: discovery, booking, payment
- Consultation mechanics for online and in-person sessions
- Specialist-facing tooling for availability, sessions, paperwork
- Internal admin for operations, quality, and content
- Ongoing feature work across all three surfaces
Outcome
Otvet.co runs on the stack topsweteam owns. Our team ships to production weekly; incidents and operational issues come to us directly. The engagement has been continuous since 2021 — this is the version of "dedicated team" where the handoff has simply never happened because we are the handoff target.
- Product live in production, continuously shipping since 2021
- Full operational ownership of the runtime
- Multi-country payment surface (Russia and Kazakhstan) integrated with Alfa-Bank, Sber, and Halyk Bank
- Three-person team has carried the product end-to-end across multiple years
- Weekly release cadence sustained across both client-facing and internal surfaces
Tech stack
Infrastructure: PostgreSQL, Docker, Docker Compose Backend: Python 3.8, Django, GraphQL (Graphene) Frontend: React, MobX, JavaScript, GraphQL Payments / banking integrations: Alfa-Bank, Sber, Halyk Bank (Kazakhstan)
What we learned
- Django is undervalued for domain-heavy consumer products. The built-in admin saved us an entire surface of bespoke tooling for the first year.
- Mental-health UX has a tolerance-for-roughness floor that you don't see in most consumer products. Copy, pacing, and empty states matter more than in any comparable marketplace.
- "Dedicated team" only works if both sides treat it as one team — shared standups, shared roadmap, shared on-call. Anything else collapses back into vendor-client dynamics within a quarter.

tech
- backend
- Python 3.8, Django, GraphQL, PostgreSQL
- frontend
- React, MobX, JavaScript, GraphQL
- infrastructure
- PostgreSQL, Docker, Docker Compose
- payments
- Alfa-Bank, Sber, Halyk Bank