Deep thinking in software design

Deep thinking is a bit of a convoluted term; You can find a lot of different definitions.

To me, in the world of software, deep thinking is submerging myself into a specific domain; this process happens by reading code, articles, and books, listening to podcasts, watching videos, while actively collaborating with stakeholders to become a subject matter expert.

Becoming a subject matter expert in any domain is possible if you effectively focus your time and energy.

I practice deep thinking whenever I start working on a new project; it spans a few weeks, sometimes longer, depending on the complexity of the domain.

Why is deep thinking relevant?

Deep thinking is key to making meaningful and creative long-term impact. Software systems tend to grow in complexity, especially for large enterprise systems; it is important to understand the current state of the domain, the problems, and existing solutions to avoid repeating the same mistakes.

I have to say deep thinking can be a draining process and might not be for everyone; the stakeholders must understand its value and provide support and collaboration to ensure success.

How to get started

The first step is to get a high-level 10,000ft view of the domain. It is important not to get stuck in this process; absorbing years of knowledge in a few weeks is impossible.

The key is identifying the critical pieces that need attention.

Usually, discussing with the stakeholders yields great pointers on relevant areas. If the stakeholders do not have the necessary context, you can always rely on the code; this will be more expensive, but some code visualization tools might be helpful.

My personal process

I consider myself a visual thinker; in my childhood, I had to learn two new languages (Arabic and French) around age 7; note taking helped me remember and make connections; I started by writing word by word and evolved to certain keywords and diagrams.

Since then, I have always been on the hunt for the perfect notebook, so when Apple announced the Apple Pencil, you could imagine how excited I was; it merged my passion for note-taking and technology; what more could I ask for?

note taking
My note-taking journey

The excitement did not last in the note-taking department (I still love my iPad, though, hehe) I tried all kinds of apps that promised to be the “best” note-taking app, but none of them worked for me nor replaced the physical notebook.

Recently I came across the Muse App; it fits how my mind works; I like to zoom in and zoom out, and the nested boards give me that; I can move between the iPad and the Mac, typing and hand-writing. I used it to create this blog post, and I must say it has replaced all my notebooks (for now), something I did not think was possible.

muse app
Muse App

I used the Muse App on my latest deep-thinking adventure; I ended up mapping the architecture of the system in a board, where each micro-service is a nested board, that in some cases, has more nested boards; this way, I can zoom out, and see the entire architecture, or zoom in deeply into a specific service as I explored.

muse app
Architecture

To wrap up, deep thinking is important in any domain and especially in complex software systems; it will empower creative solutions with a long-term impact that can make a difference; It is not about solving the problem as quickly as possible but solving it the best way possible for the long term.

Published: