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.