New year resolution realisation
I decided to catch up an old hobby and I noticed some similarity with software engineering
I’m not someone who makes New Year’s resolutions you can count on a list. Instead, I try to add a new habit I’d like to incorporate into my life.
This year, by pure coincidence, I kept seeing ads on social media about digital drawing and painting.
I already own an iPad, which I bought last year with the intention of using it for note-taking. As you can imagine, that plan didn’t quite work out. However, I did purchase the Procreate app to experiment with digital drawing. Months went by, but those ads, combined with the fact that I already had the tools, nudged me to give digital drawing another try.
I have some experience with paper and ink pens, so I’m not starting from scratch. But saying I’m rusty would be a massive understatement.
I began by doodling some imaginary characters, and somehow, a strange “Forkman” emerged from my brain a roundish figure without arms and a trident for a head.
After this first attempt, I decided to challenge myself: draw Forkman from a 30-degree angle. I figured it would be a good way to get familiar with proportions, perspective, and overall drawing fundamentals.
Needless to say, it was a huge struggle. The proportions were off, but the hardest part was drawing the fork head at an angle. How much of each spike would be visible? How thick should I make them? How would one spike overlap the others?
It took several tries and even duct-taping three pens together as a makeshift model only to realize that what I drew didn’t make any sense. Not just because Forkman is an absurd doodle with shaky lines, but because the proportions and perspective I wanted to train were completely distorted.
After taking a day off and watching a couple of YouTube videos about drawing, I remembered the most basic technique: break down what you want to draw into simpler shapes.
So, I gave it a shot. First, I created a main rectangular parallelepiped at a 30-degree angle as the frame. Then, I carved out three smaller rectangular parallelepipeds for the spikes of the fork head.
Using this new framework, I redrew my figure. And, unsurprisingly, the results were much better. The drawing itself is still rough let’s call it “garbage with potential” but it has some sense of perspective now, even if it is still incomplete.
At the end of this adventure, one thing became crystal clear to me: I had completely overlooked a basic principle I use every day as a software engineer. Decomposing problems into smaller, manageable parts is second nature in my work. It’s effective; I know it works. So why didn’t I apply it here?
This realization started to take root in my mind, forming a fascinating parallel between drawing and problem-solving.
Drawing and Coding: The Art of Simplifying Complexity
Artists and software engineers might seem worlds apart, but they share a common approach to managing complexity: breaking down the big picture into smaller, manageable parts. This similarity between figure drawing and the divide-and-conquer strategy in software engineering offers valuable lessons in both disciplines.
Decomposing Complexity: Drawing the Basics
When an artist begins a figure drawing, they don’t start with fine details. Instead, they decompose the figure into basic shapes an oval for the head, rectangles for the torso, cylinders for the limbs. These shapes form the foundational structure, helping the artist establish proportions and relationships between parts. Only once the foundation is correct do they add depth, texture, and detail.
Divide and Conquer in Software Engineering
Software engineers follow a similar strategy when tackling complex systems. Using the divide-and-conquer approach, they break down a large problem into smaller, independent components. For example, designing an e-commerce platform might involve splitting the system into modules like user authentication, product catalogs, shopping carts, and payment processing. Each module is developed and tested individually, with clearly defined boundaries ensuring the parts integrate smoothly.
The Key Parallel: Boundaries and Integration
Both disciplines rely on clearly defined boundaries to maintain focus and ensure integration. In drawing, boundaries between shapes prevent distortion, ensuring that the oval head connects properly to the rectangular torso. Similarly, in software, well-defined interfaces between components ensure that each module can work independently while still fitting seamlessly into the larger system.
Iterative Refinement
Another shared principle is iterative refinement. In drawing, rough shapes are progressively refined into detailed artwork. In software engineering, a system evolves through prototyping, testing, and continuous improvement.
By embracing these principles simplification, defined boundaries, and iterative refinement artists and engineers alike can transform overwhelming complexity into elegant results, whether on canvas (iPad for me) or in code.
Articles I enjoyed this week
How Traffic Management Tools, API Testing and CI/CD Streamline Modern Software Architecture - Sketech #15 by Nina
Computer Science Papers Every Developer Should Read by Milan Milanović
A Comprehensive Guide to Database Sharding by Franco Fernando