Notebooks
JupyterLab
- Kept as itself
- Cells, kernels and the notebook habits people bring with them.
- The shell adds
- The module you already chose, your theme, and Save as plugin into the governed library.
Enterprise data science · o9 Digital Brain
Extract. Transform. Load, and trust it.
A data scientist’s day is an ETL loop: find governed data, shape it, test a model, ship it, watch it run. I designed the workspace where that loop stays connected instead of scattering across six separate tools.
System design
Carried to every stageProjectEnvironmentModel
Extract · 01 / The problem
Six tools.
One model.
No shared thread.
Data scientists worked in specialist tools while planners worked inside the governed enterprise model. Between them sat copied identifiers, brittle scripts, hidden assumptions, and delayed feedback.
How I framed it: how might we connect flexible data-science work to governed enterprise planning, without losing context at each handoff?
A solid line: context carried from stage to stage.A reconstruction of the operating model, informed by observation, not a recorded trace
Extract · 02 / The evidence
I ran the same extract, transform, load discipline on the research itself: five inputs, one synthesis, three concrete decisions.
What this research is
A day-in-the-life walkthrough and fly-on-the-wall sessions with data scientists, then the implementation specification, the platform’s existing patterns, mature specialist tools, and architecture reviews with engineering.
What it isn’t
A formal study. The sessions were early in the project and the notes weren’t kept, so there are no quotes or session counts here; what they taught me is recalled and labelled that way. It set a design hypothesis, not a measured usability result.
Extract · 03 / Who it’s for
The same model passes through data science, engineering, planning, and operations. Each role needs different evidence before they can move the work forward.
Extract · 04 / What already worked
The specification embeds three open tools rather than replacing them. I studied what each already did well, then designed only what the shell around it had to add.
Notebooks
Experiments
Observability
Borrow the tool. Own the shell. Module, environment, role and scope stay stable around whatever is embedded.
From the implementation specification and pattern research · the pairing is design judgement
Transform · 05 / Strategy & principles
The specification described six services. Read as one person’s task, they became three moves, repeated. Then I settled the open questions most likely to fail quietly.
Model Explorer and Data Explorer pull from the live planning model or cloud files, never a silent copy.
EDA, notebooks, and plugins turn a raw frame into a versioned, reusable artifact.
Deployments and Observability put a result into production and keep it traceable when it fails.
Is a separate “create plugin” flow needed?
No. A notebook saves as a plugin: one artifact in two states, not two products.
What does “context aware” mean for the logs?
The request’s identifiers travel into observability, so a failure is traced from its own run, not searched for.
Who can see a file, and at what level?
Five access scopes, from private to tenant-wide, recorded in the file’s own metadata.
Questions paraphrased from the implementation specification · answers are design judgement
Five principles, set before the screens
Hold the screens that follow to these five.
Transform · 06 / Entry points
A data scientist arrives mid-task: from another workspace, a finished run, or a plugin’s code. Each door lands on the right screen with the context already set.
The workspace is switched on per organisation and shown to the people whose role needs it, so everyone else’s navigation stays unchanged.
The modules are already loaded and the one you were in is still selected.
The notification opens the exploratory analysis with that run’s results.
Code is read-only in the plugin view. Edit opens it in a notebook, ready to change.
Every door lands inside one shell
DSML StudioArrives withRoleModuleEnvironmentModel
Entry rules from the implementation specification, drawn as a diagram · no internal screens shown
Transform · 07 / Architecture
First, where it sits in the platform. Then the navigation, organised by four goals: find data, build, operationalise and monitor.
↑ A governed writeback into the measures planners already use
↑ A governed query or a cloud file, never a silent copy
Find + qualify
Model ExplorerData ExplorerMetadataCreate + package
NotebooksPluginsParametersCompare + release
ExperimentsDeploymentsRegistryTrace + recover
HardwareLogsRun historyGroups follow the product’s navigation; layers are named as in the implementation specification.
Designed scope, not impact. These count what the design covers. None of them is a measured result.
Transform · 08 / Key decisions
Each adds a deliberate check before a consequential action, or removes repeated work where context can travel on its own.
Decision / 01
Decision 01 · ModeSystem state
Editing changes the reusable artifact; executing creates a run with scope and parameters. Mixing them would make save state, permissions, and failure recovery harder to understand.
The trade-off: one more explicit switch, far less ambiguity.
Mode clarity
Error prevention
Decision / 02
Decision 02 · PreviewSystem state
The final query is composed from plugin config, scope, and parameters. Preview turns that hidden composition into evidence you can inspect before Execute becomes available.
The trade-off: a step before execution.
Safe exploration
Commitment threshold
Decision / 03
Decision 03 · TraceIdentifiers · sample
PluginId, BatchJobId, and RequestId travel from execution into observability. The user should never have to copy an opaque identifier between tools.
The trade-off: it needs service-level handshake contracts.
Visibility
Recoverability
Decision / 04
Decision 04 · ShellContext layers
JupyterLab, MLflow, and observability patterns stay recognisable, while the o9 shell keeps module, environment, role, and planning context stable.
The trade-off: integration complexity around theme and navigation.
Familiarity
Contextual integrity
Designing with data
The experiment view avoids a “dashboard of everything.” It prioritises run identity, model family, accuracy, duration, owner, version, and status: the minimum set needed to register a candidate with confidence.
demand_forecast_w27 · first four runsRun records · sample
Load · 09 / Follow the request
Finally, everything above in one run. Watch it end to end, then step through each stage: the screen, the question it answers, the context it receives, and what it passes forward.
Then take it one stage at a time.
Six stages · one model’s context
Stage questions and handoffs are from the design’s journey; the global context bar (project, environment, model) is on every screen of the rebuild. Captures are from the Carbon rebuild, and all data is sample data.
Load · 10 / Outcome & reflection
The six workspaces now form one understandable workflow. The next step is measuring whether teams complete cross-role tasks faster and recover from failures with less support.
What I can say
The designs and the Carbon rebuild show six workspaces joined by carried context, a preview gate before execution, and request-level traceability into observability. The implementation specification defines the services underneath.
What I don’t claim
A launch, adoption, or any measured change in task time or failure recovery. Quotes or counts from the early observation sessions, whose notes weren’t kept. The run metrics shown are sample data.
Component handshakes, identifiers, preview gates, and service boundaries made the experience coherent in ways a polished screen alone could not.
Next, I’d measure time to a first governed dataset, failed-run recovery, confidence when registering a model, and what gets lost at cross-role handoffs.
Surface model lineage, feature contribution, and confidence where a planner consumes the writeback, not only inside DSML Studio.
Six stages.
One model.
One thread, end to end.
Complex systems become usable when every handoff carries context.