Charis Nikolaidis, Software Engineer and Architect in Athens, Greece

Career

I'm Charis, a software engineer and architect based in Athens. I design distributed data intensive systems in Python and C#. My systems serve in a global scale, even in the middle of the ocean. I keep the infrastructure boring on purpose since a system that needs me at 2 AM is a hostage situation.

Full Stack

Backend is where things make sense, but I ship the frontend too (React or Angular, depending on which one reached the repo first). I have a soft spot for the unglamorous wins: rewriting a query that reads like a crime scene, or generating the frontend's types from the backend's schema so the two can't quietly drift apart. Most of the job is removing surprises rather than adding buttons.

Architecture

I design for the failure before the feature, because distributed systems don't fail politely. A worker dies mid-sync, two of them grab the same tenant, a cache serves a write that got rolled back. So the interesting decisions are the boring ones: where the transaction ends, what's safe to retry, what breaks when one box disappears. The rest of the job is talking people out of turning a CRUD app into a service mesh.

Security

Security is invisible right up until it's catastrophic. I have an MSc in Computing (Internet Technology & Security), which mostly handed me professional paranoia for life. Access control fails closed, audit trails survive the post-mortem, secrets live anywhere except the codebase, and tenant isolation is enforced in the query layer, not a WHERE clause somebody has to remember. I overthink this so nobody else has to.

Infrastructure

I write the cloud the apps land on, not just the apps. On Azure that means the whole environment in Bicep: container apps, Postgres and Redis reachable only through private endpoints, deploys signed in by federated identity so there's no cloud secret left lying around to leak. Every pipeline has a rollback job, because "we'll fix forward" is what people say right before a long evening.

Integrations

A surprising amount of real engineering is convincing two systems that clearly despise each other to share data. Tax platforms, payment providers, a legacy database with deep trust issues. I keep each one behind a translation layer, so when a vendor renames a field it breaks one file instead of the application. The hard part is never the happy path. It's the undocumented error that only surfaces on a Friday afternoon.

The Domain

I know the businesses I build for. Ship supply and marine catering: how a vessel call turns into an inquiry, a quotation, an order and an invoice, why the same crate costs different money in two ports, and why a fleet manager loses sleep over cost per man-day. Overspend is rarely caught by a report. It's found in a spreadsheet, six weeks after anyone could have done something about it.

Meet My Work

Here's what I've actually shipped to production, plus a few weekend builds I made purely for the technical dopamine. If it was a 48-hour hack, I'll say so. If it was a year of production work and the awkward trade-offs that come with it, the deep dives will tell you which trade-offs and why. Have a look.

Contact

If you're designing a system, rescuing a vibe coded application, planning a migration you'd rather not do, or just want to argue about whether AI is coming for my job, get in touch.


Powered by coffee

What I've built

Enterprise work, AI slop, homelab experiments and academic projects. I could list a bunch of other side projects I'm spinning in the free time I don't have, but got bored mid-way through.

Technical Glossary