DEV Community

Cover image for Building a File Upload Time Estimator: Your Users Will Thank You
Learn Computer Academy
Learn Computer Academy

Posted on

Building a File Upload Time Estimator: Your Users Will Thank You

Ever stared at a loading bar, wondering if you have time to grab coffee before it finishes? Here's a solution I built for that universal pain point.

Try it now: Upload Time Estimator

The Backstory

Last month, I was uploading a 2GB video project over a flaky connection. The browser gave me zero insight—just a spinning wheel of doom.

"How long is this going to take?" I wondered. "Should I cancel and try later? Will it finish before my meeting?"

That frustration sparked an idea. What if I built a tool that could predict upload times before users commit to them?

Why Every Developer Should Consider Upload UX

We often overlook upload experiences in our applications. But for users, especially those with slower connections, this can be a major pain point.

Consider these stats:

  • 47% of users expect a web page to load in 2 seconds or less
  • 40% will abandon a site that takes more than 3 seconds to load
  • How do you think they feel about lengthy, unpredictable uploads?

The Solution: A JavaScript Upload Time Estimator

I wanted a clean, simple tool that could:

  1. Calculate upload times based on file size and connection speed
  2. Give users a visual simulation of the upload process
  3. Provide helpful comparisons to set expectations
  4. Work without actually uploading anything

Here's what I came up with:

Upload Time Estimator Screenshot

How It Works: The Technical Bits

The core calculation is straightforward:

Upload Time = File Size (in bits) ÷ Upload Speed (in bits per second)
Enter fullscreen mode Exit fullscreen mode

But the UX considerations make it useful:

1. Multiple Input Methods

Users can:

  • Drag and drop files (using the HTML5 Drag and Drop API)
  • Select files through a traditional file input
  • Manually enter file sizes with unit selection

2. Connection Speed Detection

The tool offers:

  • Preset connection speeds (1, 10, 50, 100 Mbps)
  • Custom speed input with unit conversion
  • Visual indicators for connection type

3. User-Friendly Results

Beyond just showing numbers, the tool:

  • Formats time intelligently (2h 15m 30s vs. 2:15:30)
  • Simulates a progress bar animation
  • Provides comparative upload times for common file types

The Code Structure

I kept the architecture simple:

  • HTML: Semantic structure with clearly defined sections
  • CSS: Clean, responsive design with intuitive visual feedback
  • JS: Event-driven architecture handling user interactions

The most interesting parts were:

Time Formatting Logic

Converting raw seconds into human-readable formats required two approaches:

  1. A user-friendly format for display: 2h 15m 30s
  2. A compact format for the progress simulation: 2:15:30

Progress Simulation

Rather than making users wait for the actual calculated time (which could be hours), I implemented a simulation that:

  • Completes in ~10 seconds max for visual feedback
  • Updates proportionally to show accurate percentage progress
  • Displays the real expected time alongside the progress bar

Accessibility Considerations

Building for all users means thinking about:

  • Keyboard navigation for all controls
  • Clear visual states for interactive elements
  • Sensible tab order
  • Drag and drop with keyboard alternatives
  • High contrast for important information

Performance Optimization

Since this tool runs locally in the browser, performance is excellent. All calculations happen client-side with no server round-trips needed.

The simulation uses requestAnimationFrame for smooth animation with minimal CPU usage.

Deployment

The tool is hosted on my learning platform, but you could easily deploy this anywhere—it's just HTML, CSS, and vanilla JavaScript with no dependencies.

What I Learned

Building this seemingly simple tool taught me:

  1. UX is about anticipating user anxiety and addressing it
  2. Small tools solving specific problems are incredibly valuable
  3. Time formatting and unit conversion are trickier than they seem
  4. Progress indicators are psychological as much as functional

Ideas for Enhancement

If you want to fork this project, consider adding:

  • Network speed testing integration
  • File compression estimation
  • Multiple file queue calculations
  • Past upload history tracking
  • More detailed network usage visualization

The Impact on Users

Since deploying this tool, I've received feedback like:

"Finally! No more guessing if I should start my upload now or wait until morning."

"I used this to explain to my client why their 500MB video would take forever on their upload form."

"This saved me from starting an upload right before a meeting that would've failed halfway through."

Try It Yourself

Test out the Upload Time Estimator with your own files.

Want to know how I built specific parts of this tool? Drop a comment below with your questions! I'm happy to share my approach to any aspect of the implementation.

I firmly believe small utility tools like this demonstrate care for users. And sometimes, the simplest tools are the most useful ones.

What everyday annoyances would you solve with a simple web tool? Let me know in the comments! 👇


Top comments (0)