Bubble Wrap, Duct Tape, and the Struggle for Deep Work in ML Engineering
How can ML engineers escape the cycle of technical debt? By mastering deep work, strategic time-blocking, and continuous learning to stay ahead in a fast-evolving field.
This one is inspired by Joe Reis.
Last week, Joe’s post made me reflect on a lesson I learned from an E7 at Meta.
He was one of the most effective ML engineers I knew—not just in terms of output, but in how he approached his work.
His secret was to plan his week in advance, ruthlessly blocking out time for the things that mattered. He knew that in ML engineering, there are always a million urgent things pulling at your attention—bugs, model drift, data inconsistencies, stakeholder requests. But he also knew that if you don't carve out space for deep work, your career turns into an endless cycle of “bubble wrap and duct tape”.
Deep Work is a term coined by Cal Newport, referring to the ability to focus intensely on cognitively demanding tasks. It’s the kind of work that moves the needle—designing a new ML model architecture, experimenting with novel approaches, reading research papers, or rethinking how data pipelines should be structured. It’s the opposite of shallow work, which is reactive, scattered, and often the default mode in fast-moving environments. Shallow work is by far the most pervasive.
The Bubble Wrap and Duct Tape Problem in ML
Many ML engineers operate in environments filled with technical debt—hastily written scripts, rushed deployments, models trained on outdated data, and a patchwork of quick fixes meant to hold things together. Companies prioritize shipping and iteration speed over robustness, leading to a culture where engineers are rewarded for firefighting rather than craftsmanship. This is how you end up in a cycle of constant maintenance rather than innovation.
When I was at Meta, I noticed that the engineers who had the biggest impact didn’t just accept this reality. They fought against it. The E7 I mentioned earlier blocked out deep work time as if it were a meeting with Mark Zuckerberg himself—immovable, untouchable. No one questioned it because the results spoke for themselves.
ML Engineers Must Not Neglect Learning
ML is a rapidly evolving field. What worked yesterday might be obsolete tomorrow. If you’re spending 100% of your time reacting to immediate tasks, you’re stagnating. You need time to read research papers, tinker with new libraries, and understand emerging paradigms. But that time won’t magically appear—you have to make it.
A common complaint I hear is, “I don’t have enough time.” But if you don’t proactively allocate time to learning, no one will do it for you. It’s too easy to fall into the trap of thinking your job is just writing code. ML engineering is as much about understanding the problem space as it is about implementing solutions. And understanding requires uninterrupted time.
How to Carve Out Deep Work Time as an ML Engineer
Time-Block in Advance – Plan your week ahead. Treat deep work sessions as unmovable meetings.
Set aside at least two 90-minute deep work blocks per day.
Use a calendar tool like Google Calendar to make these blocks visible and non-negotiable.
Prioritize the most cognitively demanding tasks for these slots (e.g., designing new model architectures, debugging complex pipelines, or reading research papers).
If possible, align deep work blocks with your peak productivity hours.
Make sure to have deliverables in the end of each week.
Batch Shallow Work – Reserve specific time slots for Slack, emails, and debugging sessions instead of letting them interrupt deep work.
Designate fixed times in your day (e.g., 11 AM and 4 PM) for responding to emails and Slack messages.
Disable notifications during deep work blocks to prevent distractions.
Group all meetings into a single part of the day (e.g., mornings) to keep large uninterrupted stretches of time open.
Keep a running list of low-effort tasks (e.g., code reviews, minor bug fixes) and batch them together instead of handling them one by one.
Communicate Boundaries – Let your team and manager know that deep work time is critical for making real progress.
Set expectations with your manager and colleagues about your deep work hours.
Use status indicators (like Slack's "Do Not Disturb" mode) to signal focus time. I would recommend sharing calendar visibility with your manager. Use “deep work time” to block time on calendar, but for current week also have a calendar block with the name of the problem you are tackling.
Offer alternative ways for colleagues to reach you if something is truly urgent (e.g., an emergency escalation channel).
Share the impact of your deep work—demonstrate how it leads to better models, cleaner pipelines, and more scalable solutions.
But none of this works if you do not establish trust at your workplace, so if you are still early in your position, stay tuned for a newsletter on establishing trust.
If you don’t take control of your time, you’ll spend your career adding layers of bubble wrap and duct tape to broken systems. ML engineers who prioritize deep work are the ones who innovate, grow, and remain relevant as the field evolves. If your company doesn’t support it, protect your deep work time like your career depends on it—because it does.