DEV Community

yulyabrocoders for Brocoders

Posted on

EdTech Has Three Users, Not One. Model That Before You Build

Most apps have one user type with a settings screen. EdTech has three, and they're adversarial by design: the learner must not see the grading tools, the educator must not need IT to reset a roster, and the admin needs to provision hundreds of accounts without touching a database.

If those three roles arrive in the data model after the first screens are built, you get authorization checks sprayed across controllers, a permissions bug in every sprint, and a rewrite somewhere around the first district contract. It's the same class of mistake as retrofitting multi-tenancy, and it costs about the same.

Here are nine firms with public edtech delivery history, judged on that.

What to verify before shortlisting

  • Ask how they'd model the three roles. A good answer talks about a permission model separate from the role label, because a teacher at one school and a department head at another need different scopes with the same title. A weak answer talks about screens.
  • Ask what happens with no connectivity. Not "can you add offline." Ask what syncs, what conflicts, and who wins. K-12, rural, and international deployments make this a launch requirement, not a phase two.
  • Ask how they test WCAG. Automated axe scans plus manual keyboard and screen reader passes is a real answer. "We follow best practices" is not, and district procurement will find out before you do.
  • Ask for one shipped AI feature. Named, with what the model does. "Recommends the next lesson from the last five wrong answers" is a feature. "AI-powered personalization" is a homepage.
  • Ask about the back-to-school window. Bug-fix SLAs in late August are a different commitment than the rest of the year, and a partner who has shipped in this vertical knows it without being told.

1.Vention

Stack: broad enterprise, Unity for interactive builds
Best for: large funded edtech needing enterprise-scale capacity

New York, 2002, 3,000+ engineers, six figures and up.

Technical note: built a Unity-based interactive kiosk for Cranbrook Institute of Science, a 3D aquatic ecosystem explorer with 73 models, delivered in 3 months. No public edtech-specific case study beyond that, so the general enterprise record is what you're buying.

2. N-iX

Stack: microservices, enterprise backends
Best for: scaling edtech SaaS that needs a dedicated pod

Ukraine with EU delivery centers, 2002, 2,500+ engineers, typically $150k+.

Technical note: the most concrete performance result on this list. Modernized WBS TRAINING's legacy LMS into microservices and took page response from 5+ minutes to under 0.5 seconds, with a 30% overall lift. That's a real re-architecture, not a reskin. The $150k floor rules out seed stage.

3. ScienceSoft

Stack: .NET, Java, Python, mobile
Best for: institutions with formal procurement requirements

McKinney TX, 1989, 700+ people, enterprise tier.

Technical note: shipped language-learning apps across 8 languages with text-to-speech under a 40MB footprint, which reached #1 education app in 10+ countries. That binary size discipline matters more than it sounds for schools distributing on old devices. Enterprise process means longer timelines.

4. Simform

Stack: cloud-native, Azure OpenAI, AWS
Best for: products where the scaling story is the hard part

California with India delivery, 2010, 700+ people, $50 to $150/hr.

Technical note: built a GenAI research platform for a psychology association over 50,000+ studies, reporting 50% faster research and 99% uptime. Architecture-first positioning, which means pedagogy and teacher workflow are not their center of gravity. Ask for explicit edtech references.

5. Netguru

Stack: React, Rails
Best for: founders who need the UX to carry the product

Poland, 2008, 700+ people, $50 to $99/hr.

Technical note: built Babbel's B2B admin dashboard, including team license management for corporate accounts like Hyundai and Paramount. Seat provisioning and license reassignment is exactly the admin-role work most agencies underestimate. Design-forward positioning can undersell backend complexity, so push on permissions and sync.

6. Miquido

Stack: Golang, React, mobile, ML tooling
Best for: mobile-first products heavy on media

Poland, 2011, 250+ people, mid-tier.

Technical note: built Brainly's Content Tool in Golang and React in 3 months, after which 50% of questions were answered within 24 hours and users saved about 3 hours a week. That's a throughput result on a moderation-style workflow, which is a genuinely hard queueing problem.

7. Cleveroad

Stack: custom web and iOS
Best for: mid-size European teams wanting LMS breadth

Estonia with Ukraine delivery, 2011, 200+ people, $25 to $49/hr, the lowest band here.

Technical note: replaced Crossfader's WordPress setup with a custom web and iOS build for 5,000+ users, including an offline iOS mode and a subscription revenue feature. The offline mode is the detail worth asking about, since most agencies on this list have not shipped one. Broad portfolio, so confirm end-to-end ownership.

8. Geniusee

Stack: MediaSoup SFU, Fabric.js, Node ecosystem
Best for: seed-stage founders wanting a senior-heavy team

Estonia and Ukraine, 2016, 150+ people, mid-tier.

Technical note: the most interesting stack detail on the list. Built an AI-enabled virtual classroom for K-12 tutoring on a MediaSoup SFU with a Fabric.js collaborative whiteboard. Running your own SFU rather than buying Twilio or Agora is a real latency-versus-ops tradeoff, and they made it deliberately. Case studies lean SaaS-adjacent, so confirm education-native depth.

9. Brocoders

Stack: Node.js, React, React Native, AWS
Best for: MVP-to-scaling edtech founders wanting shipped vertical proof

Estonia, 2011, 60 to 70 people at roughly 60% senior, $80k+ typical MVP floor.

Technical note: five named edtech builds across four segments, which is the part worth checking. 99math for gamified elementary math. Kiddom for K-12 digital curriculum. Kedzoh for mobile corporate training, which took Startup Chile, Brazil, and French Tech Ticket awards. Casers for higher-ed talent acquisition. HeyPractice, an AI-powered sales and marketing training platform on Node.js and React with AWS CI/CD and GDPR compliance built in rather than added. Roles, offline behavior, and accessibility get decided in a paid discovery phase instead of a fixed feature-list quote. In-house DevOps, and bcboilerplates.com covers auth and RBAC scaffolding so sprint one goes into the domain. Brocoders. Not an edtech-only shop, unlike ScienceSoft or Cleveroad.

Modeling the three roles properly

The mistake is making role an enum on the user. The fix is separating identity from scoped membership:

user            → a person, one account, one login
organization    → district, school, or company
membership      → user × org × role, scoped
   (a user can be a teacher in one school and a parent in another)
course / cohort → the unit work is assigned against
enrollment      → membership × cohort, with its own capabilities

permission check = can(membership, action, resource)
   never  if (user.role === 'teacher')
Enter fullscreen mode Exit fullscreen mode

Two rules make this hold up. Permissions are checked against a resource, not a page, so "can view grades" is always "can view grades for this cohort." And the check lives in one policy layer that every route and every background job calls, because a report generator that skips the check is the same leak as a controller that does.

Roster provisioning deserves its own thought. Schools arrive with CSVs, Clever, ClassLink, or an LTI 1.3 launch from an existing LMS, and each of those creates users differently. Decide early which are in scope; retrofitting LTI into an auth flow built for email signup is a rewrite of the session layer.

For offline: the learner app is the one that needs it, and the conflict cases are narrow. Answers submitted offline are append-only and replay with a client-generated op_id. Progress is a counter that merges rather than overwrites. Content is cached with a version, and an assignment changed by the teacher mid-session surfaces as a visible update rather than a silent swap.

Cost bands

Cost bands

MVP timelines run 8 to 16 weeks, driven mostly by how many roles ship in v1 and whether offline is in scope.

Pre-build checklist

  • Role model as scoped memberships, not a user enum, from migration 001
  • One policy layer every route and every background job calls
  • Roster provisioning decided: CSV, Clever, ClassLink, or LTI 1.3, chosen before the auth flow is written
  • Offline scope named per role, with conflict rules written down
  • Idempotency: op_id on submitted work, so replay never double-counts
  • WCAG: automated axe in CI plus a manual keyboard and screen reader pass before any district demo
  • Content versioning so a mid-session curriculum change doesn't corrupt a learner's attempt
  • Data handling: FERPA or GDPR scoped early, including what leaves the region
  • Support model: bug-fix SLA that names the back-to-school window explicitly
  • Ownership: repo, infrastructure, deployment scripts, and a documented exit path

If you're scoping an edtech build

Write down what each of the three roles sees and does before you talk to anyone. It takes an afternoon and it changes which of these nine is the right size for the job. Happy to work through it with you, including telling you plainly if the segment isn't ours. brocoders.com

Top comments (0)