Unblo and Why Your Projects Keep Getting Heavy
Unblo is one of those terms people throw around in dev channels without defining it properly, so you end up seeing it referenced and assuming it solves your problems even though you aren't entirely sure what it actually is. In practice, it refers to the discipline of stripping unnecessary weight out of your builds — whether that means dependencies, runtime overhead, or unnecessary abstraction layers that add nothing but maintenance debt. I stopped asking people to define it and just started applying the same logic to my own work. At its core, Unblo is a checklist you run before pulling in anything new. Does the library do exactly what you need, or does it pull in three sub-dependencies because someone designed it as a monolith? Have you tested the bundle size after adding it? Does the framework force you into its directory structure or can it live alongside what you already have? The moment I stopped auditing packages and started measuring real impact, I caught an issue where a utility library I trusted was adding over 400 KB to the client build for a single function I used once. Removing it dropped the build time from about 14 minutes to under 3. That kind of thing happens constantly, and Unblo is just the habit of catching it.
How to apply Unblo to your stack without breaking everything
Start by running a dependency tree audit on your project. In Node environments, the npm ls --production --all command will surface everything that is actually installed, including transitive dependencies you did not explicitly ask for. In Python, pipdeptree gives you the same visibility. The output is ugly but honest. Once you see the full list, mark anything you do not recognize. That does not mean delete it immediately — it means flag it for investigation. A few weeks ago I found a package called lodash.merge that had been pulled in transitively by a UI library I thought was tree-shakeable. It wasn't. Dropping it fixed a memory leak in our staging environment that had been showing up as slowly increasing RSS in our containers. After the audit, remove or replace at least one heavy dependency per sprint. Pick something visible. Replace a full framework module with a leaner alternative if one exists. Disable any plugin or extension that runs at startup but you have not opened in months. This is not a one-time exercise. Keeping things light is a continuous task, not a milestone.
Where Unblo fails and you should not push it
The approach breaks when you apply it blindly to shared infrastructure or team dependencies. If you strip a logger from a microservice because you personally do not use it, you will spend three days in incident response trying to figure out why a production bug has no trace. The same happens when teams optimize for their own repo without checking whether other services depend on the same package. It also does not help with language-level overhead. You can remove every third-party dependency and still have a Python script that takes eight seconds to import modules because the GIL is doing what the GIL does. Unblo is about project-level bloat, not algorithmic complexity or runtime limitations. My recommendation if you hit that wall is to separate the concerns. Use a proper benchmark or profiler for the runtime side — cprofile in Python, heapdump in Node, whatever fits your stack — and keep the dependency audit as a parallel track. They solve different problems, and mixing them up just confuses the results.
Get the Full Details

Unblo in practice: a concrete workflow
Here is the routine I follow now before merging anything into main: First, install the dependency and measure the baseline. Record bundle size, startup time, and the number of open file handles or network connections your process maintains at idle. Second, run the dependency tree and tag anything above two levels deep that you do not recognize. Third, test the alternative — if a lighter package exists, use it in a feature branch and compare the metrics. Fourth, commit the change with a short note explaining what was replaced and why. This takes about twenty minutes per dependency in most cases. If a single package audit is taking longer than that, you are probably investigating the wrong thing. Move on and come back later when you have more context.
When to stop optimizing
The trap most developers fall into is treating Unblo as an end goal rather than a constraint. You do not need the smallest possible bundle if your users are not downloading it. You do not need zero unused dependencies if your build pipeline caches properly and your CI time is acceptable. The metric that matters is whether the bloat is affecting your current workload — slower builds, confusing error messages, unexpected memory pressure, or onboarding friction for new team members. I stop auditing when those symptoms disappear and start again when they return. That usually means every few months, or whenever the project grows noticeably. The habit stays useful because the tools stay the same, and the problems repeat in predictable ways.