Deep Work: Self-Aware Software Artisan

Mario Novak
Published in
12 min readJul 29, 2021


We are cutting down on “ineffective” work, and propelling you into a flow-state where you are able to solve problems — with ease.

If you want to do the best work possible, you need a framework for properly managing your working states. The framework, outlined in this essay, focuses on:

  1. managing your emotional states,
  2. managing your environment,
  3. investigation, formulation, and decomposition of problems.

Deep work means having yourself and the environment in sync, which allows you to tackle any problem and formulate optimal solutions — with ease.

Working like a mad man could do justice if you have a pattern that solves the problem, and you can just repeat the steps.

On the other hand, when working on, previously, unknown problems — it is better to approach them in a sensitive and diligent manner.

🏆 Your progress 🌏 🏄‍♂️

After you’re done reading: check the ⬇️ bottom of the page — you’ll find next parts of this series that cover diverse set of related topics!

📣 Coming soon!

I’m continually refactoring this series.

Subscribe to receive a single-page Manifesto: Scalable Software Development distilled to the ultimate truths; from the viewpoint of an Software Artisan.

Author’s experience

Data Sculptor, Architect of Systems and Products.

Founded startups in the fields of Education and Sports and led teams of up to ten people.

Worked, as a Systems Architect, Frontend, and Backend Developer, for a product company, a digital agency, and as a remote freelancer.

For more information, check my Personal Website.

🎷 Background Song

Sensibility needed for deep work

We are required to hold many different pieces of information in our mind and have their relationships known, while drilling into the hierarchy of the existing and new implementation, simultaneously — to properly implement new mechanics. All of this cannot be done if you are forceful with your approach; although at times — you can combine them. But as with anything, most of the time, it is more costly at first, and more optimal for the future, to let go into the easier mode of being.

To have the right amount of sensitivity after switching context from a problem that required almost none of it (relatively), few different things can be done to ease into the “creativity mode”:

  • meditation,
  • dance,
  • music (drums, guitar, …),
  • whatever switches you back into the analog world where you can feel your thoughts by your actions.

Step by step: Get the information, analyze, act

It is important to recognize the current mode of working and not feeling bad because you’re not further down the line.

Investigating the topic

If you feel the need to explore, investigate a topic — know that it is what is needed to be done now. Don’t feel bad because you’re not coding or writing emails or whatever else you think you should be doing. Know that you are in the state of the investigation, thus no guilt needs to be in your body. You are doing what needs to be done.

It is an essential part of working. But in many environments it is not emphasized enough, as it doesn’t comply with the overarching idea of crunching, delivering, pushing out code or emailing all the time.

Take the time to investigate, report the findings, implement. Through time it will make more and more sense.

For you to be calm, be sure to write your thoughts in your “Work Journal”.

Work Journal: Documenting your conclusions

Document your questions, thoughts and conclusions during your investigation in a “Work journal”.

Write down your findings — for yourself and/or for others.

Why investigate and not feel bad about it?

A lot of unnecessary stress comes from feeling the guilt of not coding or working, when in reality — what you should be doing is investigating.

  • Why? Because you feel the push to do so.
  • Why? Because you don’t know something, and you know that you need to research before acting.

You cannot implement something if you do not understand everything that needs to be understood before going in.

A lot of unnecessary time loss is created by going in too early and having to backtrack in your approach because you didn’t investigate the topic enough.

Development Session — the basic unit of development

Source: Unknown

Single session consists of:

  • a well-defined problem,
  • tabs opened in your browser,
  • tabs opened in your IDE.

Intro to each session is an interplay of:

  • problem formulation (seeing it, describing it in easiest terms),
  • problem de-composition to smaller instances,
  • re-calculation of, eventually, decomposed problems into the original one (to see how they combine and what will they produce together).

During each session:

  • focus on your breathing (this is at the core of everything you will ever do while working on anything),
  • if you forgot to track your breathing: find a way to remind yourself (e. g. write a note and stick it on your monitor).

The outro of each session:

  • stretch,
  • move away from the computer (except if in a killing spree).

Constraining sessions:

  • with time,
  • with stress levels (too big? move away — you cannot lose your grip if you already lost it; you can only recuperate),
  • 20 minutes or more, depending on the type of the session and your experience with it.

How long to work

Most of the time, most of the effective work will be in the window of 3–4 hours.

Group your activities in slots of 20 minutes, or more — depending on the type of the problem and your current state.

Organize your activities around that window of 3–4 hours to re-frame and solve problems while meditating, working out.

Don’t rush yourself while working

Source: Jon Levischi @ Pinterest

You need to respect the value of time invested in the process of discovery, implementation, and testing. All of these cannot be rushed if diligent work needs to be done. It is not possible to do something that takes X amount of time in a shorter period.

With focus and time, you will solve what you need to solve. Don’t be too harsh on yourself while working. There is life, besides the current problem, that needs your attention — don’t blew all your stress capacity on this — or you’ll lose it for other areas of your life, and you will suffer in wholeness.

With all said, it is important to do your best.

If your colleagues or company cannot understand this, and are pushing you towards more stress, while you know you’re losing on your effectiveness, communicate this clearly to them or leave if it cannot be managed. That doesn’t mean that you shouldn’t stress yourself on the right problems, and in the right circumstances.

It is stretching out the proportions of our understanding that allow us to transcend into new realms. The need to challenge ourselves needs to be ever-present.

Balancing all of that, and knowing when to push that extra mile, or 20 miles, and when to stop and step back, is what makes a difference between a mindful person and the one that will perish in naivety.

Observe yourself, observe what is happening around you and adjust accordingly. And speak your mind! Towards yourself and towards others. This world will not take time to stop and ask you how you feel; you need to step up and speak — to yourself and others.

Fixing “feeling ineffective”: Work Journal


Working long hours and feeling, during and after, like you haven’t done anything? Most of the time that is the case when you don’t have something tangible to brag to your colleagues about.

Sometimes, the problems are incomprehensible to you, and the effectiveness (in the lines of code or tasks you’ve opened or commented on, …), doesn’t show up. But nevertheless, you’ve made some progress. You’ve processed the problem, to a certain degree.

You are leaving yourself in the dark by not writing down your conclusions, questions and thoughts while figuring out what you’re looking at.

If you were to write down your thoughts, you would have an essay about the current problem — easily transferable into a task for others, better code, git message, or at least — to show that you’ve thought about the problem after a whole day of not doing any effective work (while chunking it down to the smallest units possible).

Fixing feeling of “not being effective”:

  • journal each workday: 1) every question you have, 2) every conclusion you reach,
  • share pieces of your Journal at the end of the day with your team members — to show you’ve invested time; show your mental progress, open new tasks, answer existing questions.

Analyzing your work journal:

  • evaluate, based on the notes you take, how effective you were, in which periods, after, or during, which activities,
  • extract conclusions from it. Form a better system of activities (workout periods, resting periods, stretching, type of food you eat) — introduce crawling, meditation, laying down while working (see Self-Aware Software Artisan: Health).

Sitting behind a computer doesn’t mean working. Working means working.

Write a Journal and get the surrounding things in line, to be more effective in the short and long run.

Work environment: Adjust everything around you

Everything matters

  • Your seating position,
  • the angle of looking at the monitors,
  • number of monitors you are using at the time; their size and position,
  • organization of items (if any) on your table,
  • the environment surrounding you.

Any items that are not in the right place will subconsciously disturb you

Your focus will inevitably go to all the places that are not ordered as they should be.

Humans are always seeking bad and off-putting situations that need to be fixed.

Help yourself, remove every disturbance to be able to focus on the task at hand.

Consciously introducing a disturbance

On the other hand, there is no single solution that works for anyone at any time.

Maybe there is a disturbance, with a specific level and intensity you wish to have. It depends on your biological make-up, i. e. your sensitivity.

Music could play. As a background, or foreground effect. It could be metal, jazz, lo-fi, …, depending on the mood and the desired effect.

Using the environment to calm yourself down

If you have your mind racing and need to calm it down — try gradually calming it down.

Find your current essence (state of your being, and habits), then add and remove where and how much is necessary. Just like Michelangelo would.

It is much easier to find your inner balance while working at home. You have all the space and freedom to transform your room into whatever feels “you”.

Managing stress in your browser and IDE (tabs, pinning)


You will get lost in the forest of tabs. Not knowing where you should look.

Your browser and your IDE (if you’re a Developer) — are the main places of your whereabouts in the digital space. Therefore, it is important to manage them properly.


  • regularly close tabs in your browser and IDE,
  • group things, research, and remove old items. By cluttering your browser with a gazillion of tabs, you will get more anxious than the situation entitles,
  • pin cardinal pages — sites that you will return to during your session.

Search engines are good enough to find what you need. If you don’t find what you need from opening few links in a row, close all of them and do a better search.

Switching context is costly; plan and have a system to avoid most of it

Credit: Daniel Gill

Each time you switch the context you need to:

  • think if you can leave your old issue,
  • think in what status your old issue is,
  • document status of your old issue,
  • evaluate the current status of a new issue,
  • bring up the environment to start working on a new issue,
  • gather all the information about the new issue, request what is needed, process and start acting on it,
  • then you need the time to achieve cruising efficiency with working on the new issue.

And then switching back to the old issue — and do everything above — again…

Lowering the cost of switching between contexts

Ensure the tasks, comments, messages, commits, code and everything else is polished and ready for consumption beforehand, by you or your team.

The messier it is, the more time you need to bootstrap into the new direction you are working towards.

It’s best to organize and plan everything in advance. By the type of problems, order of them, and how they build upon each other.

  • Notifications need to be silenced, and looked at few times a day, preferably once — at the start of it.
  • Thus, an order of execution during the day needs to be known. This will bring down the amount of context switching that is needed from you.
  • Organize your tasks so that they form a story you are telling that makes sense. Don’t jump from different kinds of tasks into different ones, or switch between completely different parts of the system.

Switching context on purpose

Do it only when you are fatigued and you need a change, and you find relaxation from it; otherwise — go and relax the other way and return back to the problem.

Keep in mind, any looking, thinking, walking away, talking with others — it is all a context switch.

Some of it makes sense for us — relaxing us to be better in the wholeness of the day; others are reactions out of fear of missing out, not delivering, or of the reaction we could get from not responding promptly.

There are cases where imminent attention is required and we need to respond as soon as possible, but most of the time — there needs to be a tranquility in the environment so we can focus on what is needed to be processed.

Notifications: Slack, Email, Phone

  • Turn off Slack sounds and pop-up notifications.
  • Check your email once a day, starting the day.
  • Turn off all notifications on your Phone, except calls on the SIM card (emergency line).

Longer breaks from work

Our work culture has employees working 11 months and having 1 month to cool down from the work. If you are at the crossroads in your life, that 1 month off will not do the trick.

Take the time off when needed.

If you are having personal problems, or you simply need to think about the direction you are moving in your life — take time off to recuperate, observe your thoughts and feelings, and adjust your path.

If you are a freelancer, it is easier to take a sabbatical. A prerequisite for that is that you are on the top of your game so you can continue playing when you want (you have the clients ready).

If you are in a reasonable and a profitable company, where you are a valuable member (you’ve done your best and that was fruitful for the company), and you wish to stay their member — ask the company for a bigger break. It is in the company’s interest to have you back at the top of your game.

It is a matter of communicating truthfully and clearly. Life gets much easier when we do it like that.

Find this useful?

👏 Clap so more people see the story.

❤️ Support your friends and colleagues at work — share this essay with them!

🚀 Use it as a, Company or Personal, Manifesto! Fork and Adapt on GitHub!



Mario Novak

Leader, CTO, Blockchain, Teacher, Enthusiast | Check my site at