Why We Built EZLinks

Docs team
11 Jan 2022
5 min read

It started with a seemingly simple task: implementing universal links for our sports fantasy app, PlaySquares.

"Just add universal links," they said. "It'll be straightforward," they said.

After weeks of wrestling with documentation, inconsistent behaviors across iOS versions, edge cases on Android devices, and an ever-growing pile of Stack Overflow tabs, I hit my breaking point. What should have been days of work had stretched into weeks, pulling me away from building the actual features that would make our app valuable to users.

The frustration wasn't just about time—it was about witnessing firsthand how a technical implementation challenge was directly harming our user experience. Our marketing links were sending users to the wrong places. Authentication states weren't being preserved. Users who clicked an email link to view a specific fantasy matchup were landing on the home screen, forced to navigate again to find what they'd been promised.

This wasn't just an engineering problem; it was breaking the implicit promise we'd made to our users about how our app should work.

The Real Costs We Discovered

As I dug deeper into fixing our implementation, I uncovered the true costs of complex deep linking solutions:

1. The Developer Time Sink

The publicly documented APIs for universal links and app links are just the beginning. The reality includes:

  • Undocumented platform quirks that change with OS updates
  • Device-specific behaviors that require extensive testing
  • Interaction complexities between web-to-app and app-to-app linking
  • Debugging tools that provide limited visibility into what's actually happening

For our small team, this meant multiple developers spending up to 30% of their time troubleshooting linking issues rather than building core features.

2. The Opaque Vendor Problem

We initially tried using a popular third-party linking service, which introduced its own challenges:

  • Black-box routing logic that we couldn't fully control
  • Dependency on their servers and potential points of failure
  • Complex dashboard configurations that required specialized knowledge
  • Significant monthly costs that scaled with our link usage

When things broke (and they did), we had limited visibility into why or how to fix them.

3. The Maintenance Burden

Even after getting links working, the maintenance overhead was substantial:

  • Each platform OS update required testing and often adjustments
  • Attribution parameters needed constant updating for marketing campaigns
  • Analytics implementation across platforms was fragmented and inconsistent
  • Documentation for our own team became outdated almost immediately

4. The Ultimate Cost: User Experience

Most concerning were the metrics showing the real impact on users:

  • 40% drop-off when users were forced to re-authenticate after following a link
  • 15-second average delay when transitioning between platforms
  • 25% abandonment rate when context wasn't preserved between web and app
  • Frustrated support tickets from users who couldn't access what our marketing had promised

These weren't just engineering inconveniences—they were directly affecting our bottom line.

What We Wanted Instead

After months of frustration, I stepped back to clarify what we actually needed:

  1. A unified approach to handling links across platforms that didn't require platform-specific expertise
  2. Simple, reliable configuration that developers could implement without weeks of specialized knowledge
  3. Transparent routing logic that we could understand and adjust when needed
  4. Comprehensive analytics that tracked the entire user journey, not just clicks
  5. Context preservation to maintain user state across platform boundaries
  6. Reasonable costs that wouldn't explode as our app grew

Most importantly, we wanted to spend our time building features users love, not debugging linking infrastructure.

Building from First Principles

When we couldn't find a solution that met these needs, we built EZLinks.

Instead of treating it as a technical implementation challenge, we approached it as a user experience problem. We started by defining what a truly seamless experience should feel like, then worked backward to create the technical infrastructure to enable it.

This first-principles approach led to several key design decisions:

  1. Centralizing linking logic in a platform-agnostic layer that handles implementation details
  2. Creating a simple onboarding flow that generates all required technical configurations
  3. Building powerful but intuitive analytics that track complete user journeys
  4. Developing reliable context preservation mechanisms across platforms
  5. Designing for developer experience first, with clear documentation and troubleshooting tools

The Results in Practice

We implemented EZLinks in PlaySquares first, and the impact was immediate:

  • Development time spent on link-related issues dropped by 95%
  • Cross-platform conversion rates improved by 32%
  • User retention from email campaigns increased by 47%
  • Context preservation eliminated the most common user complaints

But beyond the metrics, we recovered something more valuable: the ability to focus on building our core product rather than maintaining infrastructure.

Why We're Sharing EZLinks

While building this solution for ourselves, we realized we weren't alone in our frustration. Every developer we talked to had their own horror stories about implementing universal links or app links.

We're launching EZLinks because we believe creating seamless experiences shouldn't require weeks of specialized work or ongoing maintenance headaches. The technical complexity of linking should be invisible to both developers and users.

By sharing EZLinks, we hope to help other developers avoid the painful journey we experienced, so they can focus on building products their users love rather than debugging infrastructure.

Docs team
11 Jan 2022
5 min read
Ready to unify your linking strategy?
Start your 30-day trial today and see how EZLinks can transform your user journeys.
Get Started