I’m Mahfuz Shaikh, known online as mah3uz. For more than seventeen years I have worked on both sides of the line
that many organisations draw between building software and running it. I write applications, and I administer the
Linux servers and infrastructure they depend on — provisioning machines, managing configuration, automating deployments,
securing and patching systems, and keeping production healthy long after launch day.
I started out in 2009 as a freelancer on oDesk, now Upwork, and spent five years there taking on development and server
work for clients I knew only through the platform. That is where I learned that the job isn’t finished until the client
can understand what was done and the next person can maintain it.
Linux has been my operating system since I first started using computers. That shaped how I work: I would rather
understand the whole system than one layer of it, and I am most at home in a terminal, reading logs and source code until
the behaviour makes sense.
What that combination is good for
The most expensive problems I have solved lived in the gap between application and infrastructure: the slow page that was
really a database configuration, the failed deploy that was really a full disk, the intermittent error that was really a
DNS cache, the “random” restart that was really a memory limit. When the same person understands the code and the
machine, those gaps close quickly — and, more importantly, the next system gets designed so they don’t open at all.
It also changes how I write software. I build things that are pleasant to operate: they fail loudly and safely, log what an
on-call engineer needs, start and stop cleanly, back themselves up, and upgrade without drama. You can see that in the
products I build today — a CMS whose upgrades refuse to run over modified files, a system monitor whose first rule is that
the last reading before a crash is already on disk, a lock-screen manager designed so it can never lock you out.
What I do
- Software engineering — web applications and APIs, back ends and front ends, command-line tools and desktop software;
from architecture and data modelling to the last detail of the interface. Ruby and Rails, Rust, Python, TypeScript and
Vue, and whatever a problem actually needs.
- Linux systems administration — building and maintaining servers, users and permissions, services and their
configuration, storage, networking and VPNs, monitoring and logging, security hardening, patching, backups and recovery.
- DevOps and delivery — containerised applications, repeatable deployments, CI and release automation, staging
environments that tell the truth, and production operations.
- Self-hosting and homelab — an extensive homelab of my own: virtualisation on bare metal, private networking, and
running the services a team depends on without handing them to someone else. It is where new infrastructure gets tried
before it goes anywhere near a client.
How I work
I like small, frequent releases, written changelogs and runbooks, and automation that anyone on the team can run. I would
rather spend an afternoon making a failure mode safe than a week hoping it doesn’t happen. I keep things simple on
purpose, and I take security seriously by default rather than as a phase at the end.
Working together
Through my company, mah3uz – IT Consultancy, I take on a limited amount of client work alongside my own products — engineering, infrastructure, or the place where the
two meet. If you have a platform that needs to be built carefully and run reliably, tell me about it.