The story of Proxytool
Story

The story of Proxytool

Marcell Simon
Marcell Simon

The best developer jokes are about classic IT Project Managers who cannot code. And there is a reason for that. They suck: They don't know how much time is needed to develop a new feature, despite promising a deadline to the board. And as they inform the developer team - who immediately break out in a cold sweat due to the unrealistic expectations – they act surprised why this might not be possible. You know them too, right? And even though we don't say it - we hate their behavior.

Well, our story starts as well with this kind of project manager. Back then, we worked on the app of a big Hungarian company with about 1m app users. Our project manager promised to add an entirely new section to the app within a week that will be available only for the company employees. I told you that he had problems with setting realistic deadlines. Well, this new section was supposed to show employees the daily menu, give access to coffee orders and inform them about the news.

As we were urged to develop this feature quickly, the backend part wasn't released yet. As the industry standard, our team hardcoded an auth token and a separate URL for that feature only and sent out the new version for the quality assurance team. The solution looked pretty cool and worked excellently as well. Thus nothing else remained than … releasing it.

So we switched the URL to the new prod backend and released the app. All customers were delighted, and we received a rise and were sent for two weeks' holidays to the Bahamas…

Oh, well, no.

Meanwhile, when we sat satisfied at our desks and had already worked on a new project, the first app user found the feature and ordered a cup of coffee. Then the second, … the third… orders have been coming in, which would be a perfect sign. No? But, the problem was that the orders weren't placed by employees,... but by other app users who shouldn't even have the possibility to order coffee, leading to a massive mess in the shop.

But why did this happen? Well, it turned out that we left the test auth token in the app, allowing ALL THE USERS to access features meant for a particular group: the company's employees. We fixed it and deployed the app, but that took days for Apple to review the iOS app.

In the evening after this mistake, I enjoyed my deep-frozen pizza, listened to Tool, and tried to find a way to prevent mock code in the app while keeping the ability to test all the various features on multiple backends.

My solution was creating a proxy backend in the middle between frontend and backend that we could tinker with, so we don't have to touch the mobile app, and the backend can do whatever. We can connect the dots in the middle. And after the backend is done, we can connect directly to it with one click.

You can add mock responses or just replace 1 parameter in the body or any part of the request/response.

The basic architecture of Proxytool

On this night, the idea of Proxytool was born.

In the bottom of the drawer

I created the first version with the tech stack I knew then: Bootstrap, node.js. It didn't have a login or any security, but I could deploy it to our backend system, and we could finally mock without touching the apps. It was pretty simple, but it had most of the functionality in a very blunt way.

It had a lot of flaws, but it worked, so I already used it for all our projects. I saw the great potential in this, and I wanted to make it available to my friends too. So I went back to coding through the night and came up with the next version. Boy, was it good!

I could add users to the db, create projects, add rules, and check out all the logs that went through the proxy, and it even had a (somewhat terrible but usable) design.

But then, for a bunch of reasons, I quit and started at a really awesome startup, where I could learn React and TypeScript. I fell in love with those, so I wanted to use that for Proxytool! Why finish a project when you can start it again from zero?

It started looking nice, but making a real SaaS tool system takes a lot of time. So eventually, it ended up in my drawer for years, always waiting for the day when it could emerge again and become my top priority.

Several years, apps and random projects later, my life turned upside down. We moved to a different country, kids were born, new careers, lot of crazy stuff. But I wanted to get back to starting my own business, so I looked around in my drive folders and realized there's Proxytool I should finish now.

I started filling up a Trello board, and at the time, I had a contractor working for me already on different stuff, so at least I wasn't alone in the development. My idea was to make an MVP as fast as possible and show it to friends first, so I designed this horrible wireframe-looking monster:

It looks like an MVP, right? But still, on the architecture part, I wanted to be different. I wanted it to be scalable from day 1. Not just for the sake of the product, but I wanted to learn new things in AWS. The backend is built with Serverless Lambdas and API Gateways, while the database is DynamoDB.

💡
A lot of people asked me why would I use DynamoDB instead of any relational, but our database is mostly used for the administration site and for some queries with the proxy itself, so eventually, it's a pretty cheap option even with backups and multi-region replicas.

The good thing is, I knew a designer, but the bad is that he never had time. I tell you one thing: The best way to motivate a designer is to create a terrible-looking product, and they feel so bad about it, they'll jump in right away to help you! And that's how our new and fantastic website came to life.

From the beginning of 2022, we started working hard on Proxytool, putting all my free time and nights into the project. The journey took several years, and I learned much from it. It would be a disaster if I started all this when I was still a junior. I'm glad I worked with many companies and helped build startups to grow from 0 to thousands of users and multiple funding rounds. I gained incredible experience from them, seeing their successful steps and watching them fail sometimes.

It became something extraordinary. All my best knowledge is in this project, in every field. I'm proud of the whole architecture and every aspect of the project.

An architecture design in the works

I asked favors from numerous friends to help me with the design, DevOps, marketing, content writing, legal documents, and company forming, and I also hired the best junior developer ever, who very much reminds me of my younger self :)  

Thank you, Martinique Jobin, for teaching me a whole content-writing course in 1 hour.
Thank you, Ágnes Paulovics, for helping us with the entire marketing planning and doing the first steps in our content-writing journey.
Thank you, Dimitrios Moraitidis, for your AWS knowledge that enabled us to evade some future downtimes.
Thank you, designer, who must not be named, for the outstanding design we have now. Every time we get something new, we drop our jaws.
Thank you, Tamás Járdán, for being a long-time friend and helping me focus on staying in the right direction with your coaching.
Thank you, Andrea Turiaková, for noticing all the small bugs we missed.
Thank you, Milán Vigh, for your incredible work on the project.

And, of course, I am incredibly grateful for my lovely wife, who kept me sane and let me work every night on Proxytool. And to my kids, without whom this project would have been ready a year ago. But a dad gonna do what a dad gotta do.