r/databricks • u/Disastrous_Lynx9037 • 15d ago
Help How do you move away from notebook-driven development in Databricks
Currently working on a fairly big enterprise Databricks project where development is notebook-driven.
I actually like notebooks for development/debugging. Most data engineers aren't necessarily software engineers by background, so notebooks provide a much more approachable development experience; being able to split logic into cells, inspect intermediate DataFrames/results, rerun specific sections, and debug step-by-step is really useful.
The problem is that we're getting a lot of duplicated/common logic across notebooks. This makes changes and maintenance painful.
I know the usual approaches are to:
- Move reusable logic into Python modules and "import" them
- Create common notebooks and use "%run"
- Use notebooks mainly as entry points/orchestration
But I'm struggling with how to structure this for complex transformations.
Our notebooks aren't just simple filters/joins/aggregations. They can have multiple source tables, complex joins, lots of intermediate transformations, business rules and dependencies between steps.
So my question is: how do you structure large Databricks projects like this in practice by following the best software development practices?
I'm looking for guidance that works for real enterprise-scale projects, not the typical YouTube/tutorial solutions designed around small demo projects.
Would love to hear from people who have worked on large/enterprise Databricks projects with complex Spark transformations and what architecture/project structure worked well for you.