Blog

Why I am never hiring marketing agencies again

👋

Hope you’re doing well!

In the past three months, I've worked with two marketing agencies—one recommended through a mutual contact and another we found independently. Both experiences were absolute disasters, and I want to share the story with you so you can make a better choice next time.

For our new project, Flips, we wanted to bring in a marketing specialist after our original partner backed out (you can read more about that here). I reached out to my network and got in touch with a two-person freelance team who supposedly (emphasis on "supposedly") took a competitor from 0 to 1,000 orders in less than a month. Sounded great. We had no idea what we were getting into.

The guy managing our account was very enthusiastic and kept conversations lively—until it came time for action. He was all talk. Promised deliverables were delayed or undelivered, and the quality of work was subpar. To give you an example, he would flood our group chat with unrelated jokes but would respond vaguely or not at all if I asked a question. It became clear that either they didn’t know more about marketing than we did, or they were prioritizing other clients. Either way, it was a horrible experience. I'm not one to burn bridges, so after two weeks of overpromising and underdelivering, I tried to set expectations clearly. In hindsight, we should have ended it there. They couldn’t take ownership and offered unrelated excuses. After another two weeks, we parted ways. They didn’t even attempt to salvage the relationship or ask why. All they said was, “We understand.”

So, what now? Six weeks lost and time for damage control. I remembered nearly hiring another agency a year ago for a different project, so I reached out. The initial contact was promising—mature, professional communication. They provided structure, asked the right questions, and seemed to understand our business. Things looked good. They suggested creating a lot of content at once, then testing to find the winning copy. We agreed, still believing they knew more than we did. By week three, they had shot all the content and started post-production. We offered to help, but they said it would only take a week. Week four came with no updates. When I reached out, I was told the video editor was on vacation but it would be ready by week's end. I asked if they could keep us in the loop moving forward—“No problem,” they said. But week five started, and again, nothing. At this point, I was getting anxious. This was beginning to look like the previous agency. Should I hope they’d finish by week six? Hire someone new and go through another three-week onboarding? I didn’t like either option, so I started handling the creatives and campaigns myself, hoping they'd finish soon. By week seven, my patience ran out. I requested the raw footage to make the videos myself, as they claimed the editor didn’t have time. Then the editor suddenly became possessive of his work. Major red flag. If you won’t let clients leave, you’re thinking about your business wrong—you should be providing exceptional service so clients don’t want to leave. We even offered to pay for the source files to avoid reshooting everything. And then the craziest thing happened: they never replied. I know I’ve said this before, but I’ll say it again—I’ve never experienced anything like it.

This made me realize we all live in bubbles. When I freelanced as a developer, I had certain standards that I took for granted, like keeping clients in the loop, even if things didn’t go as planned. Is a feature more complex than expected? Let the client know, offer a new estimate and solution. Minimum courtesy. I discussed this with a friend in Canadian real estate, and we agreed: just this one thing—communicating when things go wrong—sets you ahead of 80% of the competition. Both agencies failed to do this, even after we explicitly asked. We know things don’t always go according to plan; they rarely do. But handling the situation right makes all the difference. That’s my biggest takeaway from all this: Can the person I bring onto the team take ownership? Obviously, there are other important qualities, but for me, this is currently the crucial one. Skills can be acquired, knowledge learned, but the entrepreneurial mindset is essential.

After two failed attempts to find a reliable partner, we had to take matters into our own hands—exactly what we didn’t want. I respect other fields and believe in the value of expertise, but I dove into marketing research and began creating my own ads, testing what works and what doesn’t. Good old trial and error. After two months of what felt like pouring money down the drain, we’re finally seeing a glimmer of hope. Our campaigns’ CTR and CPM are finally where we want them, with a few creatives performing well and our ROAS finally not negative (crazy, I know). To speed things up, I’m planning to consult with experts as mentors, not to actually do the work.

We set out with the idea of not reinventing the wheel, hoping to leverage others’ knowledge to save time. Turns out we had to do it ourselves. Again. Honestly, I believe any project needs to be handled within the founder’s team first to have full control and understanding. Only then can you bring in experts to help you scale. No one else will help you in the trenches.

What’s your experience? What’s the one quality you look for in people you work with? Let me know.

Be Epic,

Ondrej

P.P.S. Not subscribed, yet? Change it! (or don't), your call.

From Text to Takeoff: My Weekend Hacking with an AI Startup

👋

Hope you’re doing well!

Today’s email is a little different—a story about my visit to San Francisco and Paradigm AI, the hyper-productive team behind a new hot product in the Valley.

One Sunday night, I received a text from an unknown number: “Hey, this is Anna. I would love to chat; Caleb gave me your contact.” We scheduled a call for Tuesday, and I went in with no expectations. All I knew was that we shared a mutual connection, and they were building a startup in the Valley. After a nice 20-minute chat, I could sense her enthusiasm, which got me excited about the product as well. We agreed to stay in touch.

Later that day, another text arrived: “It was great meeting you! We would love for you to come meet the team in SF. Can you fly in Thursday and spend the weekend with us?” I love spontaneous trips, especially when they feel right. I started going through my calendar to see if I could pull it off. I wanted to keep the momentum going, but I was scheduled to fly to Europe on Wednesday and knew it would be a lot for my body. After a quick visualization, I booked a Friday 6 a.m. flight from Philly (Thursday was too tight) and was thrilled to finally visit the startup mecca and spend what I hoped would be an inspiring weekend with other builders.

Fast forward: It’s 6 a.m., and I’m at gate D23, half-asleep but energized by the buzz of an early morning start. Today, I’m headed to San Francisco—my first time! Running into a friend in the security line made the wait fly by. I used the six-hour flight well, sleeping for three hours and working the rest to avoid being swamped with tasks once back.

Landing in San Francisco, I was greeted by crisp air and a light morning fog. After a scenic 90-minute Uber ride through the California hills, I arrived at our hacker house for the weekend. Meeting the team felt like stepping into something exciting. The vibe was electric as we dove into discussions, sharing ideas, and experiencing the dedication driving their work. Within an hour of arriving, I shipped my first update into production. I was amazed by what they’d built in just four months and impressed by their dedication to the project.

The days were filled with work, late-night dinners, and hikes where we discussed everything from code to life. It was so energizing that I sacrificed my usual eight hours of sleep without even noticing. The team’s vibe was infectious, and I thought about staying longer more than once.

Leaving was bittersweet, but I knew I’d return. Catching the red-eye back to Philly, I had no downtime—straight from the plane to class, then back to the airport within 48 hours to catch my flight to Vienna. The week was packed with travel, but I loved every moment. I was re-energized and eager to dive back into building and coding, a rush I’d missed in the past few months of founder struggles. It was amazing to see what a small, dedicated team could accomplish in such a short time. I wish Paradigm a stellar future—check them out here.

Be epic,

Ondrej

P.P.S. Not subscribed, yet? Change it! (or don't), your call.

How we outsourced everything just to take it back in-house

👋

Hope you’re doing well!

Last week, I shared another update on our project, Flips. Today, I want to dive into something that might resonate if you’ve ever tried outsourcing—our journey of outsourcing as much as possible, only to end up bringing it all back in-house.

When we kicked off this project earlier this year, we were both pretty busy. So, we thought, why not try a different approach? Instead of getting bogged down with frontend development, why not outsource it? We believed our main value was in the vision we had for the product, and spending time on tasks that could be outsourced felt like a waste. So, to speed things up, we focused on developing the core—backend and the product itself—while hiring developers to handle the frontend.

You hear from countless “gurus” on YouTube that you can build anything for $5 an hour on Upwork or Fiverr. I wasn’t that naive, so after some interviews, I set my sights on developers at around $30 an hour, hoping to find someone more independent and reliable. We thought we had found the right person. He had the right tech stack (TypeScript, React, Node.js) and some experience with Three.js, which we needed for our 3D previews that I mentioned in a previous email.

At first, things seemed to be on track. The dev was meeting deadlines, and the code was okay—not perfect, but good enough for an MVP. We figured we’d rebuild from scratch later anyway, so we didn’t stress about the code quality too much.

Then came the first hiccup: he couldn’t optimize the 3D model for mobile devices. Suddenly, code quality became a big deal because we had to bring in another developer who could work with his code. But that wasn’t the biggest issue. Just two days later, the dev quit, saying the project conflicted with his beliefs. After three weeks of work, we were left with unfinished code and no communication from him.

It was a shock. We scrambled to find another dev, but this one kept missing deadlines and delivering messy, half-functional code. Accountability was nonexistent. We parted ways after he completed just one part of the assignment.

After these back-to-back failures, I realized I was spending more time troubleshooting with devs than if I had just done the work myself. So, I rolled up my sleeves, took over, and completed the project. I reused a lot of what the devs had done, rewriting the critical parts to ensure we had the MVP we needed.

I’ve since talked to a few friends who’ve had similar experiences. There’s a lot of noise out there, and finding someone reliable is tough. Good talent exists—we found a fantastic 3D designer, but at $100 an hour, it defeated the purpose of outsourcing to save costs.

We still use Fiverr for quick, one-off design tasks, and for that, it’s great. But for anything more complex, custom, or long-term, be thorough when assessing candidates. Pay attention to how they respond, and don’t blindly trust testimonials—they can be faked.

What’s your experience with outsourcing?

Be epic,
Ondrej

P.S. I’d love to hear your thoughts on this newsletter! Just hit reply and let me know—I’m always looking to improve. 😊

P.P.S. Not subscribed, yet? Change it! (or don't), your call.

How we built a rendering farm no one needed

👋

Hope you’re having a great day!

Last week I shared the summary of our new project - Flips.

Today I want to focus on a specific feature we really wanted to have in our product and it took us 2 months to figure it out. It will be a bit more technical, but please bear with me. That's where all the juice is.

Our original estimate when starting in January was that we could launch in March. I love how optimistic people are about estimates. Everything was going fast except the 3d preview. We wanted to have a preview of the product so users could see what they are getting. Imagine an animated flipbook where the pages contain user's video.

Being the person responsible for the technical solution I outsourced all the fronted and dove deep down the rabbit hole to figure out what would the best approach be.

There were two possible plays.

Option 1: Server side rendering

+ consistent quality and time of rendering since we have control over the hardware

- need to send more data over the network

- costs more money since we have to pay for each render

Option 2: Client side rendering

+ no extra costs on our side

+ faster in theory since we don't need to upload all the data to server

We decided to first opt-in for option 2. It seemed technically easier and we believed the quality would be sufficient given todays mobile devices power. The developer we hired for frontend, turned out to know some three-js and offered to the demo for us. "Great!", we thought, no need to hire some one else. And we are on schedule. It took a little bit extra time to get exactly what we wanted, but we were happy with the model, the only problem was it wouldn't run on phones. Every single phone, including the newest iPhone Pro would crash. A few days later the developer said he couldn't work with us anymore and ghosted us. I immeditaly posted some job offers to see if anyone could fix it, but I did not get any convcing proposals. Ok, what's next

We decided to go for option 1, it would give us total control over the quality and we wouldn't depend on user's device computing powerd. We hired a blender designer who made a model for us and I looked into cloud rendering. It turned out it is not that easy to do it on scale. The render of this simple animation took over 13 minutes at first. With some tricks (Fargate, paralalyzation, G-instances etc.) I was able to get the generation sub 2 minutes, but I couldn't go much faster as every time the instances had to be launched, also even without g-instances the cost of having thousands of renders per day would be astronomical. So after over a month of struggles and thousands spent we were at square one. This solution was too expensive and too slow.

Time to look into client-side rendering. Again. Oh boi

First lesson learned, Safari sucks. We developers all now that, but this is different. It turned out you can't extract frames from a video in safari, because the video controls are highly unreliable. So we had to upload the whole video to server and extract the frames there, so the initial assumption of making it faster by using client side proved to be a little more complicated (for Safari). Ok, not a big deal. I set up a lambda, S3 all that. Now let's get to the model. I found a guy who said he could do it. It was the first reliable and professional person I have ever worked with on Upwork. With him we managed to get the model working, but at one point it started crashing again. I carefully commed out lines of code to find the issue and learned that mobile devices don't like shadows, so we disabled them and Heureka! We had a working prototype in late April almost 2 months after the inital launch date.

What would I do differently now? I would spend more time and money consulting people and looking into the solutions. We were so eager to get started we did not want to waste extra time researching, thinking we would wing it. While this enthusiasm is definately neccesary when making a project. Taking a step back and looking into a bigger picture can save you a lot of time and resources in the future. It's all about the balance.

Have you ever had to face a similar challenge? I would love to hear about it.

Be epic,

Ondrej

P.S. I'd love to hear your thoughts on this newsletter! Just hit reply and let me know—I’m always looking for ways to improve. :)

P.P.S. Not subscribed, yet? Change it! (or don't), your call.

How many memories do you have in your camera roll?

👋

Hope you’re having a great day!

How many memories do you have on your camera roll? I just checked mine—6398 pictures and 874 videos. That’s a crazy amount of memories in just the last two years. But how often do I actually look back at them? Hardly ever.

Wouldn’t it be nice if you could turn the best memories into something you can hold in your hand? Or even give as a gift to someone special?

That’s where Flips comes in.

It was January 4th, 2024, when Tom hit me up with an idea: "Let’s make flipbooks from our memories." That was it—the idea we’d been waiting for. Tom’s work as a designer had already landed him a gig creating merch for the biggest influencer in the country. So we thought, let’s build it, and he’ll sell it. Easy.

At least, that’s what we thought. We were optimistic (probably too optimistic), thinking we could launch by March. But life had other plans, and it wasn’t until May that we were ready to go. And then, the thing I had quietly worried about all along happened—Jon, the big influencer, backed out.

I saw it coming. Influencers can be flaky—I’ve learned that from experience. And there we were, with a great product and no marketing partner.

I had promised myself I’d never create a product without first making sure there was demand. But this time was different. With Jon’s support, demand seemed guaranteed. Normally, I’d throw together a website over the weekend, print a few flipbooks, make some content, and run campaigns to see if anyone would actually buy. If people pre-ordered, great! Then I’d go all-in—find a printer, a fulfillment partner, build out the packaging, test different papers, and create a fully automated pipeline.

But because we were aiming for millions of eyes at once, we went all-in from the start.

And then came the call on May 14th. Jon was out. Weirdly, I felt calm. The sleepless nights, the pressure to launch—it didn’t faze me. I just knew I had to find a solution or quit. And I wasn’t ready to quit.

Quitting has its time and place, but after everything we’d invested—money, time, and energy—I wasn’t ready to give up just yet.

So, we did what we least wanted to do: started marketing it. Given our aversion and our feeling of getting it to market ASAP, we hired an agency. And yep, another expensive lesson learned. Lies, work half done, disappointment, and delays. I was wishing we had just done it ourselves and spent the money on educating ourselves. We decided to give it one more try with another agency, and that brings you up to speed on where we’re currently at.

I’ll dive deeper into each part of the project in future emails, but I wanted to give you a bit of a bird’s-eye view for now.

It’s September 8th, and next week, after a month of preparation (which, honestly, has been insane), we’re launching a new campaign with 28 fresh creatives. We’ve got a new team that we’re hoping will outperform the last one. If this doesn’t work out, well... we might have to rethink a lot of things. We’re running low on ideas, energy, and cash.

Not exactly the upbeat ending, but I prefer to keep it real. I don’t know what’s coming next. I don’t know if we’ll hit a profitable ROAS. I don’t know if I just spent the last 9 months building something no one wants. But I do know this: it’s all about persistence. You only need to hit it right once.

So, whatever you’re working on, give it your all—but pace yourself. With patience, we’ll all get there.

Be epic,

Ondrej

P.S. I'd love to hear your thoughts on this newsletter! Just hit reply and let me know—I’m always looking for ways to improve. :)

P.P.S. Not subscribed, yet? Change it! (or don't), your call.

How we got 10k new users without lifting a finger

👋

Hope you’re having a great day.

It's been 8 months since we touched the project. Results?

It is still running, users are not cancelling their subscriptions and the user base has stabilized. Yes, it declined from what it was when we were investing heavily into marketing, but we got 10k new users reaching a total of 80k users registered without lifting our finger.

Did we make money? Yes, enough to cover our fixed costs, but not our time. But the product is definitely doing something well otherwise the user base wouldn't grow.

The past 8 months we worked on a new project and now with most of the work being done we can circle back to ensayador. The new advanced text generation tool I mentioned was never promoted, so we might try to do that now or maybe not. We are not certain about it yet.

I am very happy with the fact that 80k people registered into our app, the total market is about 500k, so we have over 18% which is crazy to think about. I guess at one point I was disappointed it did not make us rich, but that was a long time ago. We were able to use the connections and extra funds in our new project and I am sure ensayador is not done giving.

What do you think? Should we go back and try to revive the project?

Should we just make it completely free and try to get even bigger chunk of the market? I am looking for new angles and will appreciate every input.

Be epic,

Ondrej

P.S. I would love to know what you think about the newsletter, let me know by simply replying to this email! I am always trying to improve :)

P.P.S. Not subscribed, yet? Change it! (or don't), your call.

How we quadrupled prices to increase LTV

👋

Hope you’re having a great day.

As I explained in my last email we struggled with profitability as our LTV was too low. Feeling we had nothing to lose we increased the prices 4 times. Or not exactly we increased the prices of one-time packages 4 times and subscription 2.5 times, making an irresistible offer and with 6 month retention providing a nice ROI on this little experiment.

Good, so we got rid of the "never paying" customers, converted everyone from our base who actually used our product into a paying customer and we increased the prices. What's next?

We were running out of ideas. The conclusion was inevitable we learned again that students are not a good market to make money as they themselves don't have that much money.

My last attempt would be to increase dramatically the value of our product that would allow us to target college students. At that point I was the only one of the three of us who was remaining hopeful about the project, but that did no discourage me. I dove deep into the lang chains to create a completely new product and next week I will tell you what happened.

Be epic,

Ondrej

P.S. I would love to know what you think about the newsletter, let me know by simply replying to this email! I am always trying to improve :)

P.P.S. Not subscribed, yet? Change it! (or don't), your call.

How we removed free version to get rid of our users

👋

Hope you’re having a great day.

As I said last time we decided to take a scary step - disable the free version of our app.

We were limiting the free version features for a while, but we got to the point where we couldn't remove more. So I came up with and idea of a paywall. Similar to online magazines. We let users use all the features, but the resulting text would only display the first paragraph. To see more user's had to log in and pay. The results were immediate - 50 % drop in visiting users and 200 % increase in revenue, we got rid of the users who were never going to pay and converted everyone from our big user-base into customers.

It was a big success, but what to do next? At that point we assumed that practically everyone in our target group has seen our product as we raked over 3M views on our ads alone, some of the influencer's paid posts even became their most viewed videos ever!

It was becoming obvious that our customer's LTV was too low. So that's when I got another bright idea of mine. It was New Year's Eve and I texted my co-founders. Let's increase the prices - 4 times...

...and the results did not take long to come.

Until the next time

Till the be Epic!

Ondrej

P.P.S. Not subscribed, yet? Change it! (or don't), your call.

How we let users to share access with subscription

👋

Hope you’re having a great day.

As promised today we will look into our transition to subscription based model.

We realized that our main issue - users sharing access would only be a problem if we offered "all you can eat" membership. How about we offer xyz amount of tokens every month? We ran the numbers and found an amount that would always make us profit even if users used all the tokens every month.

Now all that there was left to do was to play with the pricing and this is what we, after a few iterations, came up with.

image

One ridiculously expensive package, our "preferred" subscription packed for less than a one-time package and one "normal" package with many tokens for a reasonable price.

This was a great start and we slowly starting getting a constant monthly revenue, but the conversions were still now enough. We had to find a way how to make users pay for our premium features.

And that's when I got the next idea - remove the free version.

Sounds crazy, we thought that too. And we did anyway.

We had nothing to loose, because we weren't making enough to make it sustainable and we knew that we could get our users back with some smart TikTok marketing in case this action would result in a total out-flux of users from the platform.

I will tell you next week how it went.

Be Epic,

Ondrej

P.P.S. Not subscribed, yet? Change it! (or don't), your call.

How we gave users our app for free 🆓

👋

Hope you’re having a great day.

Last time I mentioned that after a few feedback cycles our users' #1 complaint was that they had to pay.

Just to remind you, we did not provide a subscription; we sold tokens, and depending on the length and other settings, users would be charged a certain amount.

We gave a lot of thought to it. Did our app not provide enough value? Could our users not afford it? Either way, we decided to look into other sources of revenue.

And the first thing that comes to mind is - ads. Yes, how about we display ads to users using the free version? Should be easy enough, right? Except it wasn't. It turned out getting ads on your site if you are not a blog is not that easy, even with 100k+ monthly visitors.

We tried everything, called our friends interning at Google, hired experts, filled petitions, even started our own blog, but it did not lead anywhere. Eventually, we decided to look into another network and we found reward ads for websites.

This seemed perfect. We would get paid more, and it seemed there was nothing holding us back. So we implemented the ad network and launched. Given that anyone could advertise on these networks, we made sure to filter out ads that were not suitable for our audience. We launched it during the summer break and were generally content with the solution. This way, users had a choice to either buy tokens with real money or earn them with reward ads.

We eventually decided to turn it off, however. We weren't happy with the quality of the ads, and it was putting us in a bad light, making our site look sketchy, so we had to go back to square one.

"How about we try a subscription?" I said one day. We never wanted to have a subscription because we thought our users would easily share access. But it was time to reconsider that decision.

Want to know what happened? I will tell you next Sunday.

Till then,

Stay Epic
Ondrej

P.P.S. Not subscribed, yet? Change it! (or don't), your call.

How we got 1000 feedback forms filled out in 2 days

👋

Hope you’re having a great day.

In my last email I talked about how we went from 1k to 10k registered users for less than $150. In case you missed it, you can read about it here.

Today I want to focus on how we managed to quickly iterate and adjust the product, so our users were happy with our app. To be able to ship a new version every single week, we had to know what to ship in the first place. Being huge fans of the ship it -> give it to users -> get feedback -> ship it -> .... cycle, we wanted to make sure to get a lot of feedback from our users.

First, we simply put a widget on our websites offering free tokens for premium features to give us feedback. However, we quickly realized that anyone could fill that out without actually using our app. So we only showed the widget after our users used the app. This resulted in over 1,000 polls to our form in 2 days!

One of the big challenges was to make sense of the data. Obviously, customers know best what your app needs, but they are not always right. What was important for us to find out was what they would be willing to pay for and what we could implement with the least amount of effort. This is important; otherwise, your users will keep asking for features, and you will never see their money.

What we found out from the first few iterations was that our advanced text options were not being very appreciated (analytics also confirmed that), but what users wanted was support for different languages. Something very easy for us to do, but very appreciated by users. So we did it, but put it as a premium feature. This resulted in a bump in revenue, but not to the level we would have wanted.

So next time, we found out users were generally happy, NPS 8.3, but did not want to pay. That was actually the most requested "feature"—make the app free. What could we do about it? What would you do? I will tell you what we did next week.

Until then, be Epic,
Ondrej

P.P.S. Not subscribed, yet? Change it! (or don't), your call.

How we turned $150 into 10k users 💸

👋

Hope you’re having a great day.

Today I want to share a little bit about one of our newer projects that started during the AI frenzy last year.

In March 2023, we embarked on a new project. With the rise of AI, we wanted to explore what OpenAI wrappers could do. Our concept was straightforward: a tool to help high schoolers write their essays. We paid a high school influencer $150 to create a video, which garnered 300k views in a day. This was our first time using TikTok, and we were blown away.

We generated thousands of texts, but few sign-ups and even fewer premium purchases. To address this, we made the freemium service require registration and launched another campaign with a different influencer. This time, we struck gold: 1M views on TikTok and 700k on Instagram, leading to 10k user registrations in three weeks.

This did not happen without hiccups. Overnight, we gained 3k users who used up all of our OpenAI credits (feeling generous, we enabled GPT-4, which we had priority access to), and we had to switch between our personal accounts (and disable GPT-4) before OpenAI increased our limit. But apart from that, we were running strong.

Being big fans of quick prototyping, we added a widget to our website: “Give us feedback and get free essays,” which appeared after users received their free essays. Within a week, we had over 1,000 responses with an average NPS of 8.3. The number one complaint was that advanced features were paid. Our target group was very price-sensitive (not surprising). Despite this, most users really liked the app and didn't feel anything was missing. The free version was too good. Through experiments, we found ways to increase the conversion rate but not the AOV to the level we desired.

Fast forward a year, and we have about 80k users, still generating revenue without spending on marketing for the past six months. Sounds great, right? Well, the truth is more complex. Our MRR is about $300, barely covering costs, which is why we stopped. It turns out making money from high schoolers is challenging. But that's a story for another time...

Let me know if you would like to hear more about our little AI adventure, there are many more lessons to be shared!

Be awesome 🚀,
Ondrej

P.P.S. Not subscribed, yet? Change it! (or don't), your call.