← Back to engineering journal

Your Website Isn't Slow. Your Decisions Are.

A website rarely becomes slow because of one dramatic mistake. More often, performance disappears through dozens of small decisions that nobody notices individually.

Performance is not a feature you add at the end. It is a result of hundreds of decisions made while building.

Developers often notice performance only after a website starts feeling slow.

The page takes too long to appear. Images pop in late. Buttons feel unresponsive. Mobile users wait while desktop users wonder what the problem is.

Then someone says:

THE USUAL QUESTION “How do we make this website faster?”

A better question is:

FIELD NOTE 003

What are we asking the browser to do that it does not actually need to do?

01 / THE PROBLEM

Speed is the sum of many small decisions.

A page can be slowed down by large images, unnecessary JavaScript, excessive network requests, inefficient rendering, third-party scripts and poorly planned data fetching.

None of these necessarily looks disastrous in isolation.

Together, they become expensive.

THE REQUEST CHAIN BROWSER
HTML
 ↓
CSS
 ↓
JavaScript
 ↓
API Requests
 ↓
Images
 ↓
Fonts
 ↓
Third-party Scripts
 ↓
Page becomes usable

The user does not care which request caused the delay. They simply experience the delay.

02 / IMAGES

The biggest file on your page may be a picture.

Images are one of the easiest places to create unnecessary network cost.

A photograph exported at several megabytes may look almost identical to a properly compressed version that is a fraction of the size.

Modern formats such as WebP and AVIF can significantly reduce image transfer sizes when used appropriately.

BETTER IMAGE LOADING HTML
<img
  src="profile.webp"
  alt="Prince Tiwari"
  width="600"
  height="600"
  loading="lazy"
>

There is another important idea here: do not send a huge image to a small display area.

If the browser only needs a 400-pixel image, delivering a 3000-pixel source creates unnecessary work.

03 / JAVASCRIPT

JavaScript is powerful enough to become expensive.

JavaScript can make an interface interactive, dynamic and useful. It can also become one of the most expensive parts of a page.

Every script has to be downloaded, parsed and executed. Large bundles can therefore affect both network performance and CPU time.

THINK BEFORE LOADING JAVASCRIPT
Do I need this script?

Does it run on every page?

Can it load later?

Can this interaction work
without JavaScript?

The goal is not to remove JavaScript. The goal is to avoid asking the browser to execute work that provides little value to the user.

04 / NETWORK

Every request has a price.

A page that makes dozens of unnecessary requests creates additional network overhead.

This becomes especially noticeable on mobile networks where latency can matter as much as download size.

01 REQUEST Browser asks
02 SERVER Processes
03 RESPONSE Data returns

Good performance often comes from reducing unnecessary work instead of making the existing work slightly faster.

05 / RENDERING

The browser has work to do after downloading everything.

Downloading HTML, CSS and JavaScript is not the end of the story. The browser still has to parse the resources, calculate styles, build the page and paint pixels.

This is why a small file size does not automatically guarantee a fast experience.

Heavy animations, unnecessary DOM complexity and expensive JavaScript operations can still make an interface feel slow.

THE REAL TARGET Don't optimize for a smaller website. Optimize for a faster experience.
06 / MEASUREMENT

Never optimize only by feeling.

A page can feel fast on your own laptop and perform very differently for someone on a slower device or network.

That is why performance should be measured.

MEASURE WORKFLOW
1. Measure
2. Find the bottleneck
3. Change one thing
4. Measure again
5. Compare
6. Repeat

This approach is much better than changing ten things at once and then guessing which change helped.

07 / MISTAKES

The performance mistakes I keep watching for.

01 Huge unoptimized images

High-resolution assets are useful when necessary, but delivering them everywhere is wasteful.

02 Loading everything immediately

Not every image, component or script needs to be available during the first moment of page interaction.

03 Too many third-party scripts

Analytics, widgets, trackers and external libraries can quietly add significant work.

04 Optimizing without measuring

If there is no measurement, it is difficult to know whether an optimization actually improved the experience.

08 / FINAL THOUGHT

Fast websites are usually intentional websites.

Performance is not about blindly removing things.

It is about understanding what the user actually needs and delivering that work efficiently.

Smaller images. Fewer unnecessary requests. Less JavaScript. Better loading strategies. Smarter rendering. Real measurements.

None of those ideas are particularly complicated. The difficult part is remembering them while building.

FIELD NOTE / 003 The fastest code
is often the code
you decided not
to run.
PREVIOUS ARTICLE ← React Is Not the Hard Part NEXT ARTICLE From localhost to the Internet →

Have something
worth building?

Need a developer or want to discuss an interesting project? Let's build something useful.

Contact Prince →