Why I Stopped Using Bootstrap After Building 150+ Websites

Sometimes the biggest performance improvement doesn’t come from adding another library—it comes from removing one.

Over the past 12+ years, I’ve had the opportunity to build 150+ custom websites for businesses across multiple industries. Most of them were built on WordPress, ranging from simple marketing websites to large-scale, custom platforms with thousands of daily visitors, complex integrations, and long-term maintenance requirements.

Like many web developers, almost every project started the same way.

  • Install Bootstrap.
  • Create the layout.
  • Customize the theme.
  • Override the framework.
  • Ship the project.

For years, this workflow felt completely normal. Bootstrap was an industry standard, every developer knew it, and it certainly accelerated development in the early stages of a project.

But after building hundreds of websites and maintaining many of them for years, I started noticing a pattern that fundamentally changed the way I think about frontend architecture.

I wasn’t really using Bootstrap anymore.

I was using my own spacing system.

My own typography.

My own responsive layouts.

My own components.

My own utility classes.

Bootstrap had quietly become a dependency that existed mostly so I could override it.

That realization led me to one of the most impactful engineering decisions I’ve made in my career: I stopped using Bootstrap entirely and built a lightweight frontend foundation designed specifically for the way I build websites.

This wasn’t about proving Bootstrap wrong.

It was about reducing complexity, improving maintainability, and creating a better long-term development experience—for both my clients and the developers who work on these projects after me.


The Hidden Cost of “Standard” Frameworks

One of the biggest misconceptions in software development is that using popular frameworks automatically creates better software.

Frameworks absolutely solve real problems.

Bootstrap helped standardize responsive design long before CSS Grid became widely supported. It reduced browser inconsistencies and enabled teams to prototype incredibly quickly.

But every dependency introduces trade-offs.

Those trade-offs don’t usually appear during the first week of development.

They appear six months later.

Or two years later.

Every dependency eventually asks for something in return.

Version upgrades.

Breaking changes.

Compatibility issues.

Additional documentation.

Learning curves for new developers.

Extra CSS that your project doesn’t actually need.

The question I started asking myself wasn’t:

“Is Bootstrap good?”

Instead, it became:

“Is Bootstrap still solving more problems than it’s creating for this particular project?”

After reviewing project after project, the answer became increasingly clear.

For my workflow, it wasn’t.


Experience Changed My Perspective

When you’re building your first few websites, frameworks are incredibly valuable because they remove uncertainty.

When you’ve built hundreds of websites, something different happens.

Patterns emerge.

You start recognizing that almost every project follows similar structural principles.

Most websites need:

  • Responsive containers
  • Flexible layouts
  • Consistent spacing
  • Typography
  • Responsive breakpoints
  • A few reusable utility classes

That’s surprisingly little.

Everything else tends to be highly customized to fit the client’s brand, design system, and business requirements.

I realized I was downloading an entire framework while consistently using only a small portion of it.

Everything else either remained unused or was immediately overridden by custom code.

At that point, Bootstrap wasn’t accelerating development anymore.

It had become another layer that developers needed to understand before understanding the actual project.


Less Code Doesn’t Mean Less Capability

One misconception about removing frameworks is that it means giving up features.

In reality, I experienced the opposite.

By removing Bootstrap, I gained complete control over every part of the frontend architecture.

Instead of adapting my project around someone else’s conventions, I could build conventions that matched the way I actually worked.

Layouts became simpler.

Naming became more consistent.

Responsive behavior became predictable.

Every utility existed because the project genuinely needed it—not because a framework shipped it.

That level of intentionality changed how I approached frontend development entirely.


Website Performance Is More Than a Lighthouse Score

Whenever website performance is discussed, the conversation usually revolves around metrics like Lighthouse, Core Web Vitals, or page speed scores.

Those metrics matter.

I actively optimize for them on every project.

But performance starts long before a browser loads a page.

It starts during development.

A clean architecture reduces the amount of code developers have to understand.

It reduces debugging time.

It reduces onboarding time.

It reduces unnecessary overrides.

It reduces decision fatigue.

These improvements never appear inside Google PageSpeed Insights, yet they dramatically improve the speed at which a team can build, maintain, and extend a website.

Good engineering improves both browser performance and developer performance.

I care deeply about both.


Reducing Technical Debt Before It Exists

Technical debt often sounds like something that appears overnight.

In reality, it accumulates through hundreds of small decisions.

Installing another library because everyone else uses it.

Adding another dependency “just in case.”

Copying another utility framework because it might save five minutes today.

Individually, these decisions seem harmless.

Collectively, they create systems that become increasingly difficult to maintain.

One lesson I’ve learned after years of custom WordPress development is that the cheapest technical debt is the debt you never create.

Removing unnecessary dependencies isn’t about writing more code.

It’s about owning less complexity.


Cleaner HTML Leads to Cleaner Projects

One unexpected benefit of moving away from Bootstrap was how much easier templates became to read.

HTML should describe structure and content.

CSS should describe presentation.

Over time, heavily customized Bootstrap projects often accumulate long lists of utility classes that describe implementation details rather than meaningful structure.

Developers spend more time interpreting markup than understanding the content itself.

By simplifying the frontend architecture, templates became significantly easier to review, maintain, and extend.

That may sound like a small improvement.

Over hundreds of pages and years of maintenance, it becomes a major productivity gain.


Why Maintainability Matters More Than Trends

One of the questions I constantly ask while building websites is:

“If another developer opens this project two years from now, will they immediately understand what’s happening?”

That question influences nearly every technical decision I make.

Clients don’t hire developers for six weeks.

They invest in websites expected to generate business for years.

Those websites will evolve.

Developers will change.

Business requirements will change.

Marketing strategies will change.

The codebase should make those transitions easier—not harder.

Removing unnecessary frontend dependencies helped create projects that remain understandable long after launch.

That is far more valuable than following whatever framework happens to be trending today.


Better Performance Also Means Lower Maintenance Costs

One thing I’ve learned from working with businesses is that clients rarely ask what CSS framework powers their website.

They ask questions like:

  • Can another developer work on this?
  • Will future updates become expensive?
  • Is the website fast?
  • Can we add new features easily?
  • How difficult will maintenance be next year?

These are business questions—not technical ones.

Every engineering decision should ultimately improve one or more of these outcomes.

Reducing frontend complexity makes projects easier to maintain.

Easier maintenance reduces development time.

Reduced development time lowers long-term costs.

That’s where technical decisions begin creating real business value.


The Same Thinking Changed My WordPress Development

This philosophy didn’t stop with frontend architecture.

Over the years, I began applying the same thinking across my entire WordPress development workflow.

Whenever I inherit an existing website, one of the first things I evaluate isn’t how many plugins it uses—it’s how much unnecessary complexity those plugins introduce.

I’ve rebuilt websites that relied on dozens of plugins by replacing repetitive functionality with carefully written custom code, resulting in simpler maintenance, improved performance, and fewer compatibility issues.

If you’re interested in that approach, I wrote about the experience in “From 50 Plugins to Custom Code: Rebuilding a WordPress Website for Performance”, where I explain how reducing unnecessary dependencies dramatically improved a real-world WordPress project.

👉 From 50 Plugins to Custom Code: Rebuilding a WordPress Website for Performance

Although that article focuses on WordPress plugins rather than frontend frameworks, the engineering principle is exactly the same:

Reduce complexity before adding technology.


Complete Ownership Changes Everything

One of the biggest advantages of removing unnecessary frameworks is ownership.

Every part of the frontend architecture now belongs to the project.

There are no external release cycles.

No waiting for upstream fixes.

No wondering whether the next version introduces breaking changes.

If a client needs a new layout capability, I build it.

If a utility needs improvement, I improve it.

The system evolves alongside the product instead of forcing the product to adapt to someone else’s roadmap.

That flexibility has become invaluable, particularly on long-term client relationships where websites continue evolving for years.


Consistency Across Every Project

After building hundreds of websites, consistency became one of the most valuable productivity tools I had.

Every project follows familiar architectural principles.

Responsive behavior works consistently.

Spacing behaves consistently.

Typography behaves consistently.

Layouts follow predictable rules.

Instead of spending time relearning a different frontend architecture every few months, I can focus entirely on solving business problems.

That consistency has saved countless hours throughout my career and makes onboarding into older projects significantly easier.


This Mindset Now Shapes Every Technical Decision

Looking back, replacing Bootstrap wasn’t really about CSS.

It changed how I evaluate technology as a whole.

Today, before introducing any new dependency—whether it’s a frontend library, a WordPress plugin, or an AI tool—I ask the same questions.

  • Does this genuinely reduce complexity?
  • Will another developer understand it quickly?
  • Will it improve long-term maintainability?
  • Does it solve a real business problem?
  • Or am I adding it simply because it’s popular?

Those questions now guide every project I build.

From custom WordPress development.

To backend architecture.

To automation systems.

To AI-powered workflows.

Technology should simplify systems—not complicate them.


What Founders Should Know

If you’re a founder or business owner reading this, you probably don’t care whether your website uses Bootstrap, Tailwind, or a custom CSS framework.

And honestly, you shouldn’t.

What matters is whether the engineering decisions behind your website create long-term value.

  • Can new features be added quickly?
  • Can another developer maintain it without spending weeks understanding unnecessary abstractions?
  • Will your website continue performing well as your business grows?
  • Will maintenance costs remain predictable?

These outcomes rarely depend on choosing the newest technology.

They depend on making thoughtful engineering decisions from the very beginning.

That’s the approach I try to bring into every project I work on.


The Engineering Principles I Follow Today

Every technical decision I make is filtered through a simple set of principles.

Reduce complexity whenever possible.

Optimize for long-term maintainability rather than short-term convenience.

Build systems another developer can confidently inherit.

Choose performance that benefits both users and developers.

Adopt technology because it solves a problem—not because it’s trending.

These principles influence far more than frontend development.

They shape the way I build WordPress platforms, automation systems, APIs, AI workflows, and internal business tools.


Final Thoughts

After more than a decade of building websites, one lesson continues to prove itself over and over again.

Great software isn’t created by collecting more frameworks.

It’s created by making better engineering decisions.

Replacing Bootstrap wasn’t an attempt to reinvent frontend development.

It wasn’t about proving that custom code is always better.

It was about recognizing that my workflow had evolved.

The projects I build today demand performance, scalability, maintainability, and long-term ownership far more than they demand another dependency.

Removing Bootstrap simply reflected that evolution.

Ironically, one of the most valuable changes I made wasn’t adding a revolutionary new technology.

It was having the confidence to remove one.

And that lesson continues to influence every website, WordPress platform, and AI-powered solution I build today.