Why I Am Using McKinsey's Vizro (And Why You Should Too)

After two decades building data systems in resource-constrained environments, I discovered Vizro—McKinsey's open-source framework that transforms dashboard development from painful to productive.

Published 2025-12-03 · By Shahzad Asghar

I have spent two decades building data systems in resource-constrained environments. Whether it is processing refugee data at scale for UNHCR or analyzing supply chains in the field, I have learned that the sophistication of your analysis means nothing if you cannot get the insights into the hands of decision-makers in under an hour.

Here is the reality: building dashboards is painful. You finish the hard work, cleaning data, building models, validating findings, and then you hit the wall. You are either wrestling with Streamlit, which falls apart the moment you need something slightly complex, or writing hundreds of lines of boilerplate code in Dash only to make your dashboard look professional. It is exhausting.

I needed a better approach. Enter Vizro.

The Problem I Was Trying to Solve

Last quarter, I needed to build something that our leadership team could interact with, multiple visualizations, filters that actually worked across datasets, and something that did not look like it was built in a weekend hackathon. Normally, this would mean days of development. I would spend more time on styling and callbacks than on the actual data storytelling.

Vizro, McKinsey's open-source low-code framework, promised something different. I decided to test it properly.

What Actually Impressed Me

First, the defaults are set up well. When I built my first Vizro dashboard, it looked professional immediately. No CSS tweaking, no alignment issues, no tech dashboard aesthetic. It looked like something you would show a board room, not something you would apologize for. That matters more than most data tools acknowledge.

Second, Pydantic validation is effective here. Vizro is built on Pydantic, which means your configuration is validated before your app runs. I made a mistake in my filter definition once and received a clear error immediately. That is rare in Python dashboarding tools. It brings real engineering discipline to a process that is often very ad hoc.

Third, the modularity works as expected. In my previous work with Dash, adding a filter that affected multiple charts required rewriting callback functions. In Vizro, you define the filter once and it works automatically. That is not a small thing when you need to iterate quickly.

A Real Example

Here is what took me about 15 minutes to build:

```python import vizro.models as vm import vizro.plotly.express as px from vizro import Vizro

Set up the page page = vm.Page( title="Regional Impact Dashboard", components=[ vm.Graph( figure=px.scatter( data, x="gdp_per_capita", y="life_expectancy", color="region" ) ), ], controls=[ vm.Filter(column="region"), ], )

Deploy it Vizro().build(vm.Dashboard(pages=[page])).run() ```

That is a fully interactive dashboard with filtering. The fact that I can build this without thinking about callbacks or CSS is productive.

The Reality Check

It is not perfect. You do need to think differently, less about divisions and callbacks, more about Pages and Components. The documentation is improving but it is not complete yet. If you need something highly customized, you will still adjust configurations directly.

But here is what matters: for typical data-driven applications, dashboards that need to communicate insights clearly and let people filter data, Vizro removes the friction.

My Takeaway

I have worked in this area long enough to know that the bottleneck in data work is rarely the analysis. It is the translation, getting insights from the model into the mind of the decision-maker. Tools that reduce barriers in that translation are worth your time.

If you are spending weeks on dashboard development, this is worth a serious look. If you want to focus on data strategy instead of front-end engineering, Vizro deserves a place in your toolkit.

The Visual Vocabulary documentation they provide is useful for pattern-matching and fast iteration. It is worth spending 30 minutes on that resource alone before you build anything.

← All articles