Media forecasting

Media Forecasting is a planning tool inside a large B2B marketing platform. It helps media planners spot campaign groups that may be overspending or have room to grow.
They can then test different budget scenarios, compare the current plan with a simulated one, and see the projected impact before making any live changes.
When a scenario is ready, planners can apply the selected changes directly to their Media Plan.
I owned the design from early exploration through launch.
Product
B2B media planning platform
Timeline
2023–2024
Role
Design owner
Scope
Product structure, interaction design, data visualization, bulk planning, and edge cases
The starting point was a table of raw forecast values. My challenge was to turn it into an interactive experience that made the relationship between budget, revenue, and ROI easy to explore and understand. With no existing feature or interaction pattern to build on, I had to define the structure myself.
The experience also had to work across 20–50 campaign groups. A change that looked good for one group could still make the overall plan too expensive. Planners needed to see both the individual forecast and its effect on the full plan.
The model had limits too. Some values were supported by historical spend, some required extrapolation, and others were too far outside its range to forecast at all. I needed to make those differences clear without covering the screen in warnings.
I didn’t know which capabilities would come next, but I knew the feature would keep growing. So the first version needed a structure that could evolve without being rebuilt each time.
Forecasting had to work across dozens of campaign groups, so I began with the pattern planners already knew. The early concepts helped me understand what the experience needed to do — and what a table could never explain on its own.
The first version put every campaign group in a row with its current budget, a proposed budget, projected revenue, ROI, and a status badge. It was easy to scan and compare. It also made the feature feel like another report: the numbers changed, but the relationship behind them stayed hidden.

I kept the table and opened a curve for the selected group. Planners could change the budget and see the forecast move without leaving the list.
In later iterations, I separated spend, revenue, ROI, and the current, simulated, and recommended points more clearly. The interaction was becoming useful, but the page now had two competing centers of attention: the table and the forecast attached to it.

Next, I removed the table and made every forecast visible as its own card. The curve, together with Growth opportunity and Requires attention, became much easier to read at a glance.
It worked well for a handful of groups, but a real Media Plan could contain 20–50. Repeating the same chart across the page created too much noise, and editing through a modal pulled planners away from the plan they were trying to adjust.

I moved the forecast back into the list — but this time the list was made of expandable campaign groups rather than table rows. Collapsed groups kept the current numbers and status visible; an expanded group revealed the curve and simulation controls in place.
This was the first direction that held overview and detail together. It also removed the need for a separate editing modal.

Finding the overall structure did not solve the internal layout. I tested multiple arrangements for the curve, current values, simulated inputs, and status badges. I also tried larger stacked cards that gave every forecast more room but quickly brought back the repetition I was trying to remove.
The useful question was not which composition looked best. It was what planners needed to read first, what they might change next, and what could stay secondary until they opened the group.

In the final direction, simulated budget, revenue, and ROI fields stayed available in the collapsed state. Planners could make quick changes across several groups, then expand only the forecasts they needed to understand more deeply.
A sticky footer kept total planned and simulated values visible and carried the final Update plan action. The finished structure let people scan, edit, investigate, and review the effect on the whole Media Plan without switching context.

The final answer was not one winning screen. It came from keeping the useful parts of each direction: the table’s scanability, the curve’s explanatory power, the cards’ focus, and the expandable list’s control over detail.
I treated each curve as both an explanation and an input. To keep it readable, I anchored it to three points: the planned budget, the minimum ROI point, and the simulated budget.
Planners could drag the simulated point or type an exact budget, revenue, or ROI value. Everything else recalculated immediately, including the totals for the whole plan. I wanted a scenario to feel like something you could explore, not a form you had to submit.
Before planners changed anything, the curve already showed where the current budget sat. This made the forecast useful even without running a simulation.
I used that position to identify campaign groups that might need action. Requires attention appeared when the current budget was in the overspend zone. Growth opportunity appeared when the group was underspending and had room to invest more.
The badges made the full plan easier to scan. Planners could quickly see which groups were worth opening, while the curve explained why each badge appeared.
When choosing a Media Plan, planners also selected how far ahead to forecast — up to the plan’s end date and a maximum of 12 months. The first version returned one aggregated budget and one projected result for that entire period.
That made it possible to test the overall scenario, but not to see how the money would be distributed over time. Since the Media Plan stored budgets month by month, planners needed that detail before applying a change.
We added a Monthly breakdown inside each campaign group. It compared the planned and simulated budget month by month. I kept it collapsed by default to avoid adding unnecessary cognitive load to the main forecasting view.
When a planner changed the budget for one month, the remaining months automatically recalculated to keep the total budget unchanged.
During research, four jobs kept coming up: set a new budget, reallocate the current one, increase it, or decrease it. I designed the bulk flow around those situations instead of asking planners to repeat the same edit group by group.
Rather than present one large form, I made the flow ask for one decision at a time: choose the action, select the groups, enter a value, then review the result.
For reallocation, we kept the total budget unchanged while the product redistributed money across the selected groups. I marked every updated field as Simulated in bulk, so planners could tell those values apart from manual edits.
I kept the plan visible underneath and updated the sticky totals with the result. A large change still felt traceable rather than like a leap of faith.
The forecast wasn’t equally reliable in every situation. Depending on the available historical data and the value being simulated, a result could be reliable, less certain, or impossible to calculate.
We defined three states to make those limits visible in the interface. When a budget went beyond historical spend but could still be forecasted, we kept the result visible and indicated that it should be treated with more caution.
When a value moved outside the forecasting range, projected revenue and ROI were no longer shown. The curve still indicated where the value sat, while the UI explained why a forecast wasn’t available.
Some campaign groups couldn’t produce a forecast at all because required performance or revenue data was missing. Those groups remained in the plan, but unavailable values were clearly separated from actual predictions.
The same logic applied to the plan totals: if some forecasts were missing, we showed that the total was incomplete rather than presenting it as a fully calculated result.
We shipped the first version and kept expanding it as the product evolved — adding monthly planning, bulk simulation, clearer confidence states, and a direct way to update the Media Plan.
What started as a way to explore a forecast became a practical planning workflow. Planners could test budget decisions, understand the impact across the plan, and apply changes without rebuilding everything in a spreadsheet.
Adoption grew significantly after launch and continued to increase as the feature expanded.
I’m especially happy with how we turned raw model data into an intuitive, interactive experience — and how we structured all that information without making the product feel overwhelming.



