Lead Software Engineer, ATH Greece charisnikolaidis.com · LinkedIn
I build things assuming a tired version of me has to debug them at 2am. That version shows up before schedule.
I spend most of my time on the parts nobody screenshots.. where a boundary should sit, what gets to scale on its own, what gets to wake me at 2am. Python and FastAPI have a place in my heart; C#/.NET wins the argument more often than I'd like to admit. React on the front because I hate myself, Azure underneath all of it. Anything I do manually twice starts to bother me. The third time it becomes a script.
Frontend
Backend
Database
Infra
Start simple. Complexity shows up on its own, it has never once needed my help. I reach for microservices late, usually once a monolith has earned the split rather than before. Design patterns are worth it when they kill real duplication; the rest of the time they just make a diagram look busy.
Infrastructure I keep deliberately boring. The API, the scheduler, and the workers scale on different curves, so they don't share a box. Autoscaling on CPU, managed Redis and Postgres, the whole thing defined in Bicep so nobody edits the portal by hand. Deploys run on OIDC instead of stored secrets, migrations gated, rollback that works. If a deploy is exciting, something already went wrong.



