Full stack engineer. Bring me a problem and I'll tell you what actually needs building, which is usually less than you were told it was. Then I build it, front to back.
Novi Sad, Serbia 7+ years hello@pekic.dev
I'll sit down with you and turn a vague idea into a written spec, a plan and dates everyone has actually agreed to. It's far cheaper to argue here than in code.
Services in .NET and Node.js: domain modelling, integrations, REST and event-driven designs, plus the reliability work nobody ever demos.
React and TypeScript, with data fetching and navigation kept boring as an app grows. React Native when it needs to live on a phone.
Containerised deployments on AWS and Azure, horizontal scaling, CI/CD and quality gates. I'm comfortable owning infrastructure end to end.
Tech lead for small teams: one to ones, hiring, and documentation templates that kept what we were building separate from how it was built. A new developer was useful in about a day. I'm comfortable in front of your client as well as your team.
Admins were waiting a minute for the screen they worked in all day. Often it timed out instead. Nobody was confused about why. The platform had been built ad hoc under constant deadline pressure. The reporting endpoints pulled whole tables into memory, joined them in code, then filtered. Fine at launch. Not fine three years of data later.
I pushed for the time to fix it and got a reluctant yes. The work happened over several months, alongside normal features and bugfixing. Indexed queries doing the filtering, a normalised schema, pagination where there had been none, Redis in front of the expensive reads. Sixty second timeouts became roughly 200 milliseconds. Infrastructure billing came down about 30%. Management got enthusiastic once the numbers landed. One admin told me he did not believe the data was right, because it was too fast.
Same platform, different portal. A list view returned whole object graphs. Orders, with their products, with user data hanging off each one. The DTOs had been shaped by whatever the UI wanted that week. I tightened the queries and added pagination. Two megabytes became under one kilobyte. It broke the API contract, but I owned both ends, so there was nobody to negotiate with.
Two admins would open the same record and overwrite each other. The product owner had already settled on real-time sync over WebSockets and wanted it soon.
That is one line in a plan and a lot more than one line in practice. Connection lifecycle, auth on the socket, a message protocol, reconciliation for clients that fall behind, and something new to get woken up about. The team was thin and shipping weekly. The real requirement was simpler: two people must not collide on the same file. Nobody cared who took what. They cared about not losing work.
Arguing would have cost a week, so I built a prototype instead. An explicit owner on each record, and a check that refuses a conflicting write. The estimate dropped from weeks to about two days and she was on board.
We gave something up. The socket work would have been a start on a backend overhaul we wanted later. I would still make the same call.
An education platform used by schools across the US. A Unity build wrapped in React, with interactive lessons broken up by short animated films. I owned the infrastructure, the APIs, and everything on the frontend that was not the game itself.
Two things drove the design. Load was predictable rather than spiky: a wave every morning, another after lunch, across several time zones, with a step up whenever a new district came on. And a school's connection is not an office connection. This one held about a megabit, unreliably. Streaming video into that was never going to work.
So the APIs were stateless and scaled out against mean response time, delivery moved to the edge, and the films were fetched ahead during the interactive parts and kept in IndexedDB. By the time a child reached one, it was already on the machine. The alternative was renting bigger hardware. I moved off soon after launch, and I am told it held up with few complaints.
A multi-tenant, multi-region asset platform for large organisations sat behind a custom wrapper over Keycloak, with tenant-aware policies and RBAC across it. Standard PKCE underneath, awkward above. Nobody on the frontend team would go near it, and the release date depended on it. So I took it: token exchange, refresh, session handling, end to end. I also made sure everyone knew what it would cost us if it went wrong. Two weeks, and it has been in production since 2024.
A company we knew well lost their tech lead to illness on the morning of a meeting. That meeting decided whether they kept a client they badly needed. Their CEO called ours. I had four hours and I knew nothing about the client.
They spent most of them sending me brochures and case studies from old projects. None of it came up. The client was afraid of three things, and it is usually these three: whether it holds up under real load, what happens to their data, and who takes over if the people building it leave. So I went through the scaling approach, then how we document and how we pass work on, then a level deeper on security than they expected. It was a medical platform. That last fear deserved a real answer.
Partway through, the room relaxed. They signed, for less than originally planned, and I was told afterwards I had saved them the client. I had been introduced as the stand-in, which I was.
Odradek, Novi Sad · Jul 2026 – present
I do the same lead-developer work as before, now on my own and with European clients directly. At the moment that's a customer portal and an infrastructure modernisation for a large EU company.
Marble IT, Novi Sad · Dec 2024 – Jul 2026
I led engineering across several client projects at once and still wrote code. Five engineers, 10+ technical interviews, and a set of documentation templates that kept what we were building separate from how it was built. A new developer was useful in about a day, and we stopped having the same argument twice.
Marble IT, Novi Sad · Oct 2021 – Dec 2024
Built and scaled products across quite different industries: a multi-tenant, multi-region digital asset platform for large organisations, a long-running multi-role medical system, and a cross-platform mobile app with a headless CMS, subscription billing and an LLM-powered chat.
Schneider Electric DMS NS, Novi Sad · Jan 2019 – Oct 2021
Internal enterprise software in .NET, shipping features and fixes inside a large engineering organisation. I wrote a diagnostic tool that turned opaque errors from an external system into something a human could read, which made troubleshooting much quicker.
I started at a large engineering company, writing internal tools. Most of what went wrong there was not technical. Two people had described the same thing differently and nobody caught it. Since then it has been client work, where requirements arrive half finished and the first job is working out what someone needs. These days I spend as much time setting direction and reviewing other people's code as writing my own. I did not expect to like that.
The best of the job is not the part that demos well. Making a slow thing fast. Turning a fragile one boring. Writing the document nobody asked for, so a question gets settled once instead of three times. I care how fast something feels and not only how fast it measures. A quick screen that stutters still reads as broken. I keep a hands-on habit with infrastructure outside of work. Most of my operational instinct comes from there.
I have not always got that right. Early on I gave a platform the infrastructure it might one day need instead of the one it had. Load balancing, caching, queues, all of it, for a user base that never arrived. It cost very little money, since most of that billing is usage based. It cost complexity, and it cost the next person an afternoon working out why any of it was there. The mistake was not technical. I took the client's growth assumptions at face value and did not push back. Now I push.
I work from Novi Sad in Central European time, in English, mostly with distributed teams.
If you're planning something, weighing a decision you'd rather not get wrong, or stuck with a system that's misbehaving, I'm glad to talk it through.
hello@pekic.dev or find me on LinkedIn