Hassan Nadeem · backend engineer

I move legacy backends onto modern stacks, without breaking them.

Rails, PHP, Java or .NET codebases that are slow to change and hard to hire for. I port them one module at a time, with tests at every step, so the old system keeps running until the new one has proven itself.

Get a free migration plan See the code

Case study

Fat Free CRM: Ruby on Rails to FastAPI

Fat Free CRM is an open-source Rails CRM with 3,600+ GitHub stars. I read every model and controller in the core and rebuilt it in async Python, keeping each validation, soft delete, relationship and piece of business logic.

5,913lines of Python
35API endpoints
4modules
Fulltest suite
LayerBefore (Rails)After (FastAPI)
ORMActiveRecordSQLAlchemy 2.0 async
AuthDevise sessionsJWT + bcrypt
ValidationActiveModelPydantic v2
TestsRSpec + FactoryBotpytest + httpx
MigrationsActiveRecord migrateAlembic

Read the full source and write-up on GitHub →

How a migration runs

  1. Map the system.Read the models, controllers and data to find the business rules that must survive, and the parts nobody remembers writing.
  2. Pick the first module.Start with one self-contained piece so there is working, tested code within the first week instead of a big-bang rewrite.
  3. Port with tests.Tests pin down current behaviour first, then the new code has to pass them.
  4. Run side by side.Old and new run together until the numbers match. Nothing is switched off early.
  5. Hand over.Clean code, docs and tests your team can own without me.

Start here

A free written migration plan for one module

Tell me which part of your backend hurts most. I'll send back a short written plan covering what it would take to move it, the risks, and a rough timeline. No call required, no obligation.

Email hello@hassandevs.online