I Regret My $46k Website Redesign

Two years ago, I created a website for my business. By combining my terrible design skills with a decent-looking template, I created a site that looked okay. I told myself that if the business took off, I’d hire a real designer to make it look professional.

Screenshot of old landing page

TinyPilot website, before design changes

A year later, the business was generating $45k/month in revenue, but my website still looked like a college student’s hobby project. It was time for that professional redesign I’d promised myself.

There were only three pages I cared about, so I expected the redesign would be straightforward. Maybe a few months and $15k.

Here’s how the site looked after the redesign:

Screenshot of new landing page

TinyPilot website, after design changes

Except it didn’t take a few months and $15k. It took eight months, $46k, and a lot of headache.

Now that the project is over, I’m revisiting what mistakes I made that let this project spiral so far out of control.

I know what you’re thinking πŸ”—︎

If you hear that someone spent $46k to redesign three pages of a website, you probably think they’re a rube with no experience in software or hiring.

But I’ve done this before! I’m a software developer, and I’ve hired dozens of freelancers, including developers, artists, writers, and editors.

I made mistakes on this project, but hopefully they’re more interesting than the ones you expect.

The initial estimate: four weeks and $7k πŸ”—︎

I’m not trying to bash the agency here, so I’ll just call them DesignAgency. They’re based in the US, and I found them through a Hacker News monthly freelancer thread.

DesignAgency quoted the highest rate of anyone I interviewed, but their portfolio best matched the style I wanted. They had a wide range of talent in-house, including design, custom illustrations, and 3D imaging.

Isaac, DesignAgency’s CEO, won my confidence during our initial call by suggesting I reduce the project’s scope. Even though it meant less money for him, Isaac proposed a rebranding rather than a full-blown redesign. DesignAgency would work on the fundamentals like a new logo, color scheme, and fonts.

After rebranding, I could measure results to see if it was worth continuing the redesign. If nothing else, a rebrand would give me a solid foundation to create a marketing campaign with digital marketing agencies.

That sounded smart!

DesignAgency estimated that the rebrand would require 30-40 billable hours over two to four weeks. Their hourly rate was $175, so we were looking at $5-7k for a new logo and branding. That was half my budget, so it was an easy call.

Isaac warned that I was smaller than their other clients. Most of their customers had DesignAgency on expensive long-term retainer agreements. This project was so tightly-scoped that we could do it hourly, but there was a possibility that they’d have to pause my work occasionally if a retainer client needed more time.

I didn’t mind pausing the project for a week or two if things got busy. I was originally expecting the project to take two or three months, so a few extra weeks was nothing.

The honeymoon period πŸ”—︎

The first month of the project was fantastic.

DesignAgency invited me to meetings every two weeks with their lead designer, a senior designer, a project manager, and Isaac. They’d show me samples of the new logos and branding, and I’d give feedback. The next round, we’d be a little closer.

Within six weeks, we narrowed in on a concept we all liked.

The first red flag: scope creep πŸ”—︎

In our first few meetings, DesignAgency showed me mockups of my site with different color options.

Basic designs of TinyPilot website with different colors and logos

At first, the design agency showed me how different color options would look on different basic website designs.

As the project progressed, the mockups became more elaborate. DesignAgency started showing me custom images and icons for the site.

Basic designs of TinyPilot website with different colors and logos

The design agency became less interested in branding and started focusing on the overall website design.

We’d never discussed custom illustrations, but it seemed like a small amount of work, so I let it go.

A few weeks later, DesignAgency called a meeting to share updates, but they hadn’t made any progress on the logo or branding. Instead, they spent the whole meeting showing me design ideas for the website.

“To be clear, the project is still a rebranding and not a redesign, right?” I asked.

“Oh, yes, yes!” the lead designer reassured me. “Some branding choices wouldn’t make sense on top of the old design, so these are just quick sketches of how they could look.”

By December, we were three months into the project. DesignAgency was 95% done with TinyPilot’s new logo. All I wanted was to change some rounding on the corners and eliminate the border. I expected it to be a couple of hours of work.

I was eager to finalize the logo because it would be the first completed asset DesignAgency was giving me. Once it was ready, I could publish it on the website, integrate it into the product’s web interface, and print it on the device’s physical case.

All I needed was a couple more hours of work. But I didn’t get them.

Photos of TinyPilot website, app interface, and case showing the old logo

All the locations I could place the new TinyPilot logo once DesignAgency delivered the final result.

Instead, DesignAgency kept redesigning the website. Their lead designer didn’t have availability to work on the logo, but what did I think about this new design idea for the landing page?

The breaking point came when DesignAgency started showing me new designs for my site’s blog. From the beginning, I had said that I only cared about three pages: the landing page, the product page, and the shopping cart page. All other pages were explicitly out of scope.

Non-Goals: Redesign pages outside the checkout flow. The flow I care about is landing page > product page > checkout. We don’t want to completely break pages outside that flow, but we don’t need to improve their design as part of this effort.

Excerpt from project specification listing the blog as explicitly out of scope.

I pointed this out to DesignAgency, and Isaac called me, embarrassed. He admitted that the designers went beyond mere sketching. They were so excited about the project and got carried away, but he was going to remove the hours they’d spent redesigning the blog.

The two-month holiday slowdown πŸ”—︎

Midway through December, I noticed DesignAgency had stopped making progress on anything.

They stopped scheduling calls to review work with me, and the comments I left on their designs sat ignored for weeks.

I chalked it up to the holidays. Lots of people are on vacation in December, so I assumed things would pick back up in the new year.

The new year started, and not only did the pace stay slow, the quality of the work degraded. The easy, clear communication we had at the start of the project was gone. Now, a minor note about background color required three back-and-forths.

“I just don’t know when we’ll have the hours” πŸ”—︎

In early February, I emailed Isaac to ask what was going on. He called and apologized for how the project was going, admitting that internal issues at DesignAgency were affecting my project. Their project manager quit in November, and Isaac was scrambling to fill the role himself while searching for replacements.

Isaac confirmed that I hadn’t imagined the drop in quality. DesignAgency was overloaded with work from their larger clients. Their designers were squeezing me in when they had a spare moment, but they probably weren’t as focused as when we started.

I understood that TinyPilot was a small client to them. I was willing to wait a few weeks until their other work slowed down, but I wanted the remaining 10-20 hours to be high-quality October hours and not the harried, pop-in-whenever hours I saw in December and January.

“We’ll definitely finish your project,” Isaac said. “I just don’t know when we’ll have the hours.” I asked if they’d have time within the next two months. He wasn’t sure.

Isaac did, however, have an idea for expediting the project.

The solution is to pay more πŸ”—︎

The real issue, Isaac said, was that I was their only hourly client. I would always be at the mercy of long-term retainer clients pre-empting my project. So what if I signed a retainer agreement to guarantee DesignAgency’s time? Their retainers started at 40 hours per month for $160/hr.

I felt duped and manipulated. DesignAgency structured the work so that everything was 80% done, but nothing was usable. If I took the work to a new vendor, there’d be a massive amount of rework. And now they were holding the last 20% hostage until I signed an expensive retainer agreement?

Cartoon of a cat building a mostly complete doghouse for a dog. The cat is holding open an empty bag for money, saying 'I’m not sure what would help me finish...'

As diplomatically as possible, I told Isaac that I felt like the situation was DesignAgency’s fault. If a retainer agreement was better for everyone, why didn’t they propose it months ago? The project could have been done by now.

Isaac conceded that the situation was unfair to me. He promised to retroactively adjust my December and January bills as if I’d been on a retainer agreement and refund the difference. The offer was not even contingent on me signing the retainer.

But what would we do with 40 hours per month? There were only 20 hours left in the project.

Isaac proposed that DesignAgency take over the dev work as well. DesignAgency billed a higher rate than TinyPilot’s in-house developers, but Isaac predicted they’d reduce costs overall. TinyPilot’s devs specialize in programming languages like Python and JavaScript, but DesignAgency’s devs had more experience with design-heavy CSS work.

I signed the retainer. My 60 high-quality retainer hours were scheduled to begin in March.

Development begins with… minor bugfixes? πŸ”—︎

The retainer agreement started off well. Within the first week, DesignAgency wrapped up almost all of the outstanding design tasks. There were still some slight kinks to work out, but two of the three pages were ready to hand over to the developers.

And then, radio silence.

For two weeks, there was no activity from the dev team. I asked Isaac what was going on, and he explained that DesignAgency’s schedule is fluid, so they don’t necessarily work on my project every week. He assured me that by the end of the month, they’d certainly use the remaining 48 hours I’d booked for the month.

When the month ended, DesignAgency hadn’t moved the website any closer to the new design. Instead, they spent the last few days of the month fixing minor bugs from my issue tracker.

Screenshot of new landing page

One of the DesignAgency developers used 15 of the month’s 60 hours to fix the minor bugs from the end of the task queue.

What inspired DesignAgency to take on these insignificant bugs, you ask? Well, DesignAgency had asked me to create Github tickets for each redesign task. DesignAgency warned that they don’t refund or roll over unused hours, so they encouraged me to overbook the schedule with tasks beyond the redesign work.

What I didn’t expect was how DesignAgency would split the tickets among their developers. I thought developer A would work on page X, and developer B would work on page Y. Instead, DesignAgency assigned all the design-related tickets to developer A and left the rest to developer B. And that’s how a quarter of the March dev budget went to minor bugfixes.

The one-week task that took five weeks πŸ”—︎

In April, there was a new problem.

The TinyPilot website uses the Bootstrap CSS framework, and it still had the same Bootstrap theme from when I first launched the website.

DesignAgency pointed out that layering a new design onto a totally different theme would be messy. They proposed replacing the theme and our ad-hoc CSS with a custom TinyPilot Bootstrap theme. Their dev estimated that he’d only need a few days to complete the switch, and it would accelerate the rest of the project.

Sure, that sounded fine.

Days stretched into weeks, and there were no updates about the new theme. Was the work taking longer than they expected? Or was this a repeat of March, and they’d squeeze everything into the last few days of the month?

The following month’s invoice gave me the answer. The “one-week” task of replacing the Bootstrap theme ultimately took five weeks and 38 billable hours for a total cost of $6.1k.

The final month πŸ”—︎

By May, we were seven months and $46k into what was supposed to be a four-week, $7k rebranding. Every month, it seemed like we were weeks away from the finish line, but something always popped up to prevent DesignAgency from finishing anything I cared about.

It was time to call it. I gave DesignAgency the required 28-days’ notice to terminate the contract.

DesignAgency required each month’s payment upfront, so they already had all of my money for the final month. And now I’d fired them, so what incentive did they have to finish the work?

Surprisingly, the dev work was never smoother than after I terminated the contract. The project finally worked at the pace I expected from the beginning. DesignAgency coded up each page within 7-10 days.

There were still issues, but I was prepared this time. DesignAgency kept suggesting new flourishes to the design. I declined them all and told them to focus on the design I’d approved. I’m glad I did because they’d probably still be working on the website today.

On the last day of the month, the final page still wasn’t done. DesignAgency hadn’t communicated with me about disengaging from the project.

On June 1st, the day after our contract officially ended, their dev told me that Isaac had authorized him to finish the outstanding work at no charge. He wrapped up the final page within two days.

And then it was finally done! This project had spiraled so far beyond what I initially wanted and transformed into an interminable drain on my time and finances. I was incredibly relieved to put it behind me.

Before and after πŸ”—︎

Here’s what the site looked like after the redesign:

The postmortem πŸ”—︎

After the project ended, I invited Isaac to a call to discuss what each of us could have done to improve the project’s outcome. I explained that I was writing a blog post about my takeaways from our work together.

Isaac was candid with me that the project hadn’t gone as smoothly as he’d hoped. He felt that the underlying problem was DesignAgency’s difficulty scaling down their workflows to fit TinyPilot’s budget. Their typical client has a retainer in the range of $20-40k per month. TinyPilot was buying only 40-60 hours per month, which they typically reserve for maintenance rather than new development.

I told Isaac that I wished we’d structured the work to give me usable assets sooner. I would have preferred to have the logo first, then a new navbar design, then the landing page design, etc. He said that DesignAgency’s clients are typically only interested in final results rather than intermediate pieces, but he understood why incremental work would have benefitted me.

I shared my surprise at how little DesignAgency managed the project. I expected DesignAgency’s project managers to provide regular status updates and maintain project timelines, but nobody was doing that. Isaac said this was a misstep on his part. DesignAgency tries to keep project management to less than 5% of billable hours. At my scale, 5% would be too limited to provide any tangible benefit, so he eliminated project management entirely. He admitted that, in retrospect, he should have included me in that conversation to make sure it was what I wanted.

We talked about the opaqueness of DesignAgency’s hours. Because they shared their hours so infrequently and worked an irregular schedule, I could never tell when a task was bloating beyond my expectations. I wished I’d raised this issue earlier because it turned out all I had to do was ask. DesignAgency tracks billable time with toggl, and Isaac would have been happy to give me access to their dashboard.

What I’d do differently πŸ”—︎

If I were approaching this project again, here are the things I’d do differently, in descending order of importance.

Hire an individual freelancer instead of an agency πŸ”—︎

I don’t want to overgeneralize agencies based on this one experience, but I think an individual freelancer would have been a better fit for a business of my size.

Many of the problems were around management, resource allocation, and communication. I drastically underestimated how difficult those problems would be with a team rather than a single freelancer.

The agency was working with me for 40-60 hours per month, the same as each of TinyPilot’s other freelance developers. I thought the agency would require similar oversight to one freelancer, but having more people on a project requires more management, even if they’re collectively working only 40 hours per month.

Structure for serial, incremental results πŸ”—︎

At first, it seemed like a no-brainer to let the agency parallelize their work as much as possible. It lets them use their resources efficiently, so I’d get faster results for lower costs.

But think about it this way: if a project involves eight tasks that will take roughly one month each, which would you rather have?

  • One task completed per month for eight months
  • Nothing for seven months and then everything delivered at the end of month eight

The one-at-a-time is better value for your money. At the end of month one, you have one asset that provides value to your business for the next seven months. In month two, you have more, and so on.

Parallelizing everything also puts you in a weak negotiating position. If the agency has eight tasks that are all 80% complete, it’s expensive for you to scope down the project or switch vendors. If you limit the agency to only two or three tasks at once, those are the only tasks at risk if the project goes south.

Lastly, it’s more mentally taxing to oversee eight subprojects at once. Every unfinished task occupies real estate in your mind. It’s better to knock them out in small batches than to drag everything out for the entire project.

Narrow the project scope πŸ”—︎

At the design stage, I let the agency go too far in redesigning the website when they were supposed to focus exclusively on the logo, color scheme, and fonts.

During the implementation phase, I should have been more aggressive in preventing them from working on minor bugfixes until they finished publishing the new designs.

Agree on timelines πŸ”—︎

In my first meeting with DesignAgency’s team, I asked how long they expected my project to take. “How long is a piece of string?” their lead designer asked.

It was up to me, he explained. I might love their first pitch, or I could reject everything for weeks. That was sensible, so I didn’t push for a more exact timeline.

I mistakenly let that lax attitude carry into the development work. I should have pressed the developers to share estimates of each task and asked them to revisit the scope if the work ballooned far beyond our expectations. That would have prevented situations like the five-week refactoring quest that was only supposed to take a few days.

Require a shared view of billable hours πŸ”—︎

Many of the issues with scope bloat resulted from the slow feedback loop in DesignAgency’s reporting.

DesignAgency’s process is to report hours twice per month. On the 15th, they share the total number of hours they’ve used with no details about which tasks contributed to the total. At the end of the month, they send a per-task breakdown.

In contrast, TinyPilot’s in-house developers report their hours at the end of each working session, so I have a better sense of their progress. If a 10-hour task starts looking more like a 25-hour task, we re-evaluate whether to eliminate or downscope the task.

Screenshot of TinyPilot hours reporting on Deel

TinyPilot’s in-house developers report their hours as they go.

If I work with a design agency in the future, I’ll insist on a tool that lets us share a view of billable hours as they happen, similar to what I use with TinyPilot’s regular devs.

Avoid hiring a vendor as their smallest client πŸ”—︎

When we started the project, DesignAgency told me that most of their clients were larger than I was, but they wanted to help me grow. It sounded like a great deal β€” I’d enjoy service normally reserved for large companies despite my limited budget.

Scene from Mad Men where Mohawk Airlines tells Don Draper, 'You said Sterling Cooper Didn’t need a big airline... you were going to make *us* a big airline.'

My initial conversation with DesignAgency, as I remember it.

In reality, I didn’t get the same service as their larger clients. When I was an hourly client, DesignAgency kept deprioritizing me in favor of their retainer clients. When I upgraded to a retainer plan, they struggled to work effectively within my budget.

Why didn’t you just…? πŸ”—︎

I’ve shared pieces of this story in my monthly retrospectives, and I’ve gotten questions about why I didn’t solve the problem in some easy, obvious way. I think this feedback is well-intentioned, but I suspect it comes from armchair experts and people who have only worked with agencies as large, powerful clients.

Below, I’ve addressed why the obvious suggestions I’ve received wouldn’t have worked.

Why didn’t you just refuse to pay them until the work was done? πŸ”—︎

DesignAgency required payment up-front. For the hourly contract, I had to buy time in 30-hour blocks. For the monthly retainer, I had to pay each month’s bill by the 1st of each month. There was no financial leverage to force them to complete the project.

If I had insisted on milestone-based payments from the beginning, DesignAgency likely would have declined the project. They saw me as a small client who could grow, but nobody wants to work with a tiny client who’s as demanding as a huge corporation.

Why didn’t you just find a cheap developer to do it for $4/hr? πŸ”—︎

In my experience, cheap developers are worthwhile if:

  1. You need throwaway code that has to work exactly once
  2. You value your time at zero, so you don’t mind giving two hours of feedback for every hour of work you receive from the freelancer

I plan to keep the TinyPilot website around for a while, so I need code I’m comfortable maintaining. For that, I need a competent developer who can write clear code.

Why didn’t you just fire them and hire someone better? πŸ”—︎

Firing DesignAgency and searching for a replacement would have burned 30-60 hours of management time. And there was no guarantee that I’d find someone better.

For most of the project, I was sitting on a bunch of partially-complete tasks. The cost of reassigning half-done work and spinning up a new vendor would be almost as expensive as starting over from scratch.

Why didn’t you just use a Shopify template? πŸ”—︎

If I could go back to when I first created the website, I would have made it a simple Shopify store with a custom theme.

When I launched the site, I didn’t want to marry myself to Shopify and learn their templating system when all I needed was a simple “buy” button. I hand-coded the site using a frontend framework I knew well.

Over time, TinyPilot’s purchase experience became more complex. I ended up expensively reimplementing functionality that would have been free had I used a Shopify template. But at this point, migrating all the site’s content to Shopify would be its own major project, so I stuck with redesigning what I had.

Conclusion πŸ”—︎

I genuinely believe that DesignAgency tried their best on this project. I don’t feel like they meant to deceive me or squeeze money out of me. We just didn’t match. I was used to working with individual freelancers, and DesignAgency was accustomed to larger clients.

If I had to do it over again, I wouldn’t. But despite all the missteps and stress, the results might justify all the pain. I expected the new website to increase sales by 10-20%, but it’s been closer to 40%. In July, the TinyPilot website hit an all-time high of $72.5k in sales, 66% higher than before the redesign.

It’s too early to tell, but I’m optimistic about earning a positive return on the $46k I paid DesignAgency.

Graph of TinyPilot sales showing a permanent increase in November when we discontinued our low-cost product, a temporary spike in March for a new product, and an increase for the last two months of having the new website.

Sales through the TinyPilot website over the last year


Doghouse illustration by Loraine Yow.

Thanks to the members of the Blogging for Devs Community for providing early feedback on this post.