Author: Andrea Grassi

  • Building Effective Mental Maps in Projects

    Building Effective Mental Maps in Projects

    Have you ever started a new project and felt like you were dropped into a dense fog, unable to see more than a step ahead?
    That’s how most journeys into the unknown begin, whether you’re learning a new skill, tackling a complex problem at work, or exploring a fresh domain. At first, everything is blurry and uncertain. But as you move forward, the fog lifts, revealing the landscape piece by piece.

    This is how I think about building expertise: not as a sudden leap, but as a gradual act of mapping out unfamiliar territory. I call these “mental maps.”
    Unlike mind maps, which are creative tools for brainstorming, mental maps are your internal compass, a living, evolving sense of where you’ve already been, what you understand, and what’s still hidden in the mist.

    In this piece, I’ll share how I build my mental maps, why they matter, and how they’ve helped me transform confusion into clarity, one step at a time.

    What is a mental map?

    Many years ago, I was playing the game StarCraft. Each match began with the entire map shrouded in darkness and in the fog. You had no clue where the enemies lurked, where resources were hidden, or what dangers awaited. Every move your units made revealed a little more of the terrain, but also exposed you to new threats. The thrill of discovery was matched by the constant risk of the unknown.

    That’s exactly what building expertise feels like to me. With every question asked and every problem solved, a bit more of the fog lifts, the map of your understanding becomes clearer and that inner compass you have about the project starts working.

    Whenever I work on something, I operate like a unit moving through the map. Initially, everything is blurry and the map is foggy, I might understand the overall domain of the project, but I would hardly be able to answer questions about it. I may be able to take educated guesses based on my experience and previous knowledge, but if this is a new domain, everything will be foggy.

    Whenever I encounter a problem, I dive in and start clearing away the fog. Whether I’m solving a technical challenge or trying to understand how a system works, each exploration reveals a new piece of the map.

    Over time, my knowledge becomes more refined, and I start to visualize the map in my mind.

    Note: I'm not good at "actual visualization" in my mind, but while I can't visualize something, I am somehow able to keep all this complexity in my mind, ready and easy to navigate as if I'm trying to remember how to get from point A to point B in my hometown. 

    Once I have enough awareness of the project elements, I can make quicker decisions and spot potential problems or roadblocks if we go one route versus another.

    Why forming a mental map is important

    Why is forming a mental map so important?

    • It allows you to make faster, more confident decisions.
    • You can spot potential problems or opportunities before they arise.
    • It helps you communicate more clearly with your team.

    I believe that the ability to visualize a project as a map, to have an internal awareness of what the project entails, is crucial for tackling complex problems.

    For example, if I’m working on developing a new feature for an app, this skill gives me an intuitive understanding, within its limits, of the consequences and impacts of decisions, as well as new ways to proceed.
    This intuition is instinctual, so once the map is formed, I don’t need to think about it too much. If the map wasn’t formed, I would need to explore to discover first, to have an actual understanding of what a choice would imply.

    For instance, if someone asks me, “Can we have a feature that programmatically adds tasks to our board?” and I haven’t formed an opinion in my mental map, I wouldn’t be able to answer right away.
    But if I already have a mental map with enough information, the answer comes instantly.

    Obviously, there’s a downside: we’re not perfect, and I may be wrong (also, this kind of intuitive thinking might be reminded of System 1 thinking, from Thinking Fast and Slow, and you would be correct.).
    The main advantage is having an internal overview of the project’s status and making quicker decisions.

    This is why I think mental maps are extremely important for everyone. I don’t know if everyone thinks this way, but I believe it’s a valuable skill in the toolset. There will be times when you’re asked to understand where you are in your work. It might be easy to say what you’re doing now, but having a good understanding of all the things and ramifications of a project might not that quick.
    In fact, sometimes you discover the gaps in your analysis only afterward because you didn’t explore or form the map properly.

    Building a useful map

    One approach I take to build a meaningful map is to avoid focusing on the same work repeatedly, therefore expanding my scope.

    For example, if our goal, as I mentioned, was to find ways of programmatically adding tasks to the board (let’s assume we’re doing a task manager), I would move across different codebases or project areas to understand the project’s limits, boundaries, and potential issues.
    Only after “navigating” the scenario, not just by skimming topics but by going into it, would I then start forming the brain connections needed to have “the map”.

    Similarly, you might want to do some discovery on what approaches you could take to the scheduling of the tasks. That, again, will form a piece of the map, letting you know beforehand some of its limits or the challenges you’ll face.

    Take a moment to think about your current project or role.
    Where is your own mental map crystal clear, and where is it still foggy?
    What’s one unexplored area you could investigate this week to expand your understanding?

    Two more things

    Getting the full map might not be worth your time.

    We only have a limited amount of time; therefore it’s important to stay focused and prioritize properly. Whenever I try to form the map, I will focus my attention on my goal while also trying to find ways to expand my knowledge of the project, prioritizing work I’m not familiar with but that I can accomplish within the time I have.

    I do this naturally because I’m curious, not because I was planning to proceed this way.
    But while I was looking back at this approach I realised it was one of the principles behind how I form my mental maps.

    The map is not the territory

    This concept of mental maps might give you the idea that you know everything because the intuition feels instantaneous, but that doesn’t mean you’re right.

    You might have not navigated all the problems, you might lack skills in some areas, or there may still be small areas of the map that are foggy.
    The problem with foggy areas is that you sometimes don’t know they’re there. That’s why, when overseeing a project, it’s important to push yourself into different areas of the work. This way, you can identify possible foggy areas and recognize that there’s something you don’t know about topic X, Y, or Z, which you need to explore.

    The next time you feel lost in a new project, remember: you’re not lost, you’re just mapping. The fog will clear, one step at a time.
    Keep exploring.

  • Beyond Self-Learning: How AI Adapts to You

    Beyond Self-Learning: How AI Adapts to You

    One of the reasons I’m particularly excited about AI is how it can transform learning. But first, let’s understand what AI can do in this context.

    One of the powers of AI, for example, is being language-agnostic. You can have content that’s in English, hand it over to AI, and then ask questions about this content in a different language.
    Let’s say you ask questions in Italian; you’ll get answers related to that English content in Italian. This is part of how AI works and how it is structured and, to me, one of its most useful qualities.

    What’s even more interesting is that now we’re starting to see AI avatars, AI voices, and interactive AI models.
    How does that apply to learning?

    When you want to learn (self-learn, specifically) something, you might go to YouTube or search Google or go to a dedicated site for course , and it can take a while to find the right approach—because not every approach works for everyone.

    For example, you might learn better through videos, while others might prefer to learn specific topics related to design through PDFs and books.

    But you might not always get the format you want. Sometimes you’re lucky enough to have a writer or video maker who creates content the way you like. However, as you probably learned during your school years, you don’t get to choose your teacher. You might choose the school or some of the subjects, but the teacher is a matter of luck, often times.

    In this regard, I personally see a big shift in how AI can transform personalized learning, beyond what self-learning is today.
    Right now, you check out different courses, videos, and websites to learn something—whether it’s woodworking, programming, design, or video making. Over time, since AI can ingest content from any language and of any type, it can create material relevant to that information in a different language or style.

    Here’s an example of how I learned something through an unusual approach: Over time, I accumulated a lot of knowledge about backpack fabrics because I like backpacks, I enjoy traveling, and I like optimizing things. Gradually, I gained knowledge about fabrics.
    How did I gain that knowledge?
    By spending time in forums, reading Reddit, and so on. I realized that this sort of slow, ongoing consumption worked for me as a slow learning curve. I didn’t even know I was learning.

    I began to wonder if I could learn something new in that same format.
    So, I asked Claude to create Twitter/X threads on certain topics.
    I started by trying to learn about large language models. Every day, I would receive 20 tweets about large language models.

    Claude making up Twitter/X threads on LLMs

    Now, obviously, hallucinations are a problem, so be mindful of trusting AI entirely. But the point I’m making is that once you know what works for you in terms of learning, you can adapt and use AI to learn new skills in the way that suits you best.

    Do you need a video? In the future, you could ask AI to create a video course for you. You could have content written as an exchange between two people in podcast form—NotebookLM is already doing this. You could structure it as a Twitter thread, as I mentioned. All these opportunities are right in front of us.

    What is being asked of us now is to start understanding the way you personally learn. Once you have deeper introspection about how you learn best, how you understand things, and how you get excited about learning, you can apply that style to any topic you want and get a personalized learning experience.

    Not all the tools are at this stage yet. If we think about creating a video course, we might still be a bit behind compared to anything that a chat interface can create. But we’re not that far off. So, keep this in mind when you begin learning something new—there may be opportunities for you to learn better and faster.

  • Letting go of perfection: Just write

    Letting go of perfection: Just write

    One of the things I realized while trying to publish more is that things often get in the way, and every time, there is a new obstacle. This is true for many goals we set in life. But why is that?
    In this post, I want to make the case for why you should try to publish more, and why you should pay less attention to your own doubts.

    For example, when I start writing something, I notice that there’s a new design I could use, or there are some theme improvements I could make to my blog. Sometimes, I realize that a specific topic might be outdated in a couple of months, and I keep asking myself: Is it still worth writing?
    Should I write about this? Then, there’s the judgment—wondering if it’s even worth it, or if people already know about it.

    In a world increasingly filled with AI-generated content, I believe it makes more sense than ever to publish and share what only a human can.
    What can we do to express our thoughts and ideas?
    Remember: our perspectives are truly unique. These are the qualities that make humanity so fascinating.

    For example, if you think again about “Should I write this?” you see that there will always—or at least often—be someone who wanted to hear what you had to say but never could, or someone who agreed with your thoughts or could learn from you.
    I’ve seen this happen repeatedly, both in my own experience and with friends. We take our thoughts and ideas for granted, but we should share them more because the world needs ideas, connection, and human voices.

    In an ever-more-connected world, this is what makes us unique and irreplaceable: that connection and shared understanding, those ideas we try to spread, and the way we see the world.
    Those are the reasons that make you, well, you.

    One thing that improved my writing was consistency.
    Lately, I’ve been enjoying the process of using dictation, and some tools with extra features that help me write as I speak.
    You may find you have plenty of ideas but aren’t good on writing.
    Dictation tools like MacWhisper or WisprFlow have come a long way. If you connect them to AI tools, they can clean up the words and further refine your contents, without losing your voice..

    So, whenever you find yourself wondering, “Should I write about this?” I would argue: yes, please do.
    Just focus on the writing; don’t worry about the rest.

    Distracted? Go back to writing or consider dictation as I mentioned.
    Want to change your blog design? Write instead.
    Yes, eventually you might want to improve the design, but writing is the thing you want to eventually do, so do that. Don’t work around it, don’t procrastinate. Just write.

    And in case you feel you have yet to learn how to write well or you are scared about how people will judge your writing then have a separate blog, no comments, where you write daily or very frequently.
    Small phrases, long stories, whatever works for you.
    As with many of our skills, writing takes time, and the only person that can put that time in is you.

  • Onboarding AI vs Onboarding Humans

    Onboarding AI vs Onboarding Humans

    There’s one thing I realized when Cursor and other AI-integrated code development systems came out. Some of them allow you to set rules to better help the AI navigate your codebase. For example, you can tell the AI how to use the codebase, where to find the code related to a specific feature, how to structure that code, what the intention behind it was, and if there is any unusual behavior in the code.

    By behavior, I mean cases where the code might be structured in a certain way but still have edge cases that don’t quite make sense or differ from what you would expect just by looking at the folder structure.

    I’ve started to see some tweets about how this is great and I agree. It’s great.

    What I realized is that this is exactly the kind of information you share when onboarding a new team member.

    Usually, you either have some documentation in place or, after some time working together, you end up having specific onboarding sessions. During these sessions, you explain things like, “This is why we have this ‘views’ folder in two different paths — because XYZ.” There’s a reason for that structure even if, at first look, it doesn’t make sense.

    The unwritten rules like: “If you want to work in the first ‘views’ folder, that’s because you want to create a component for a view. On the other hand, if you want to create something in the other ‘views’ folder, that’s likely because you want to define the actual view.

    Besides the argument that my example could be or not be confusing to people, this is exactly the kind of information we also try to include in tools like Cursor rules when developing. It’s curious — we’re trying so hard now to make things clear for an AI, whereas we weren’t trying this hard before for humans.
    It’s funny in some ways, but it’s also what I think we should have been doing from the start.

    We should maintain the code and accompanying documentation so that someone can work on the code as quickly as possible.
    It’s interesting, at least in this moment in time, how the needs of AI are similar to the needs of a human in terms of understanding the code and knowing all the quirks and strange logic that might have been implemented.

    The challenge is still the same: how do we keep the mental model or internal structure of a project up to date so that it makes AI faster and keeps the codebase readable by humans?
    This would help both humans and AI move faster.

    The challenge, at least in the short term, is how to make maintaining this documentation and structure easier.
    For me, looking back at all the coding I’ve done in my life, maintenance has always been the most difficult. You’re tempted to just ship and move the project forward because that’s easy. But you also want to keep the documentation up to date and accurate, that’s a fine balance where you tend to do tradeoffs.

    My personal take is that we should integrate updating the structure or documentation into the change flow. So, whenever you do a big or small refactoring, AI should update the internal documentation of the features you changed. That way, it remains clear, current, and useful.

    Different tools will handle this differently, and I expect this article to be outdated in less than a year, given how fast AI is moving.

    While writing this article I discovered how Devin.ai includes some kind of internal scratchpad that it uses to know how your code works, plus it adds (thinking about human, again), their deepwiki.com to ensure humans can still navigate the complexities of a codebase.
    If you’re using Cursor/Windsurf, .cursorrules are your friend. And you can add prompts in them to ensure they keep either a scratchpad (like Devin) updated, or keep the docs (which, in this case, should live in the same codebase) updated at every PR.

    It’s interesting to see how this will play out in the future. I would suggest everyone keep this in mind because maintaining accurate documentation and structure benefits everyone working with your products.

  • Let’s talk about Burnout, the enemy we cannot ignore

    Let’s talk about Burnout, the enemy we cannot ignore

    This article is a translation of the Italian version I published in 2021 and aims to give some ideas on how to handle burnout both from a personal and an company-wide perspective.

    If you’re currently struggling with burnout, consider seeking help from a professional.
    There are many options available (one of them is Wysa) that can help you work through it.

    Onto the article…

    LinkedIn is a beautiful place where we can list our successes, but no day passes where I don’t see one key element missing in the conversation: Let’s talk about the dark side of work, the burnout.

    What is burnout, and why knowing its existence is not enough?

    Let’s understand first that burnout kicks in after stress.
    When stress, which is usually temporary, persists over a long period of time and is not followed by relaxation.

    When physical stress (fatigue), mental stress (work) or social stress (requirements) do not diminish/resolve.

    Burnout can be many things, fatigue, surrender, etc.
    But more than any of these, it’s loneliness.

    Even more so in a society of overachievers, of heroes, of exceptional people, burnout is something we fear to show, to tell.
    Or, even worse, to see in others.

    We quibble, “it’s just a moment”, “it’ll pass”.
    That’s the voice inside us speaking when we think about our problems or when we discover the struggles someone is going through, when we see them too much exhausted.

    Truth is: Burnout doesn’t heal the way we expect.
    It marks us, a scar is left if we get over it, or we sink if we never heal from it.

    (more…)
  • Why did I start Working Part-Time instead of Full-Time and the Benefits of a 4 Days Workweek

    Why did I start Working Part-Time instead of Full-Time and the Benefits of a 4 Days Workweek

    Around august 2015 I decided that I wanted to step back from my 9-5 job and work part-time for the same company and it was one of the best decisions of my life.
    In this post I want to highlight the story, the tradeoff, the benefits and the downsides of this choice to help everyone that is uncertain about it have a better understanding of what might happen.

    But let me rewind for a second. (more…)

  • Nginx and MariaDB Issues Fix on Upgrading DigitalOcean Droplet from Ubuntu 14.04.5 to 16.04.1

    Nginx and MariaDB Issues Fix on Upgrading DigitalOcean Droplet from Ubuntu 14.04.5 to 16.04.1

    Today after I updated the packages on my blog digital ocean droplet (here’s my entire wordpress setup) I discovered that it was ready to be upgraded to the new Ubuntu 16.04.1 LTS.

    DigitalOcean already offers a wonderful guide for you to follow, but there were some caveats on my system that needed to be fixed before and after the upgrade.

    Those were

    • MariaDB repository
    • Nginx failed to restart

    here’s how I fixed it. (more…)

  • Is DuckDuckGo a Worth Alternative to Google? My 6 Months Test

    Is DuckDuckGo a Worth Alternative to Google? My 6 Months Test

    If you’re here I suppose you already know the DuckDuckGo search engine, it’s a free search engine that doesn’t track you and cares even more about your privacy.

    Here there are my thoughts about its pros and cons. (more…)

  • How to Automatically Backup your OpenShift Applications with the Openshift Backup Server

    How to Automatically Backup your OpenShift Applications with the Openshift Backup Server

    Did you know there’s a way to automate the backup of your openshift apps?
    I didn’t until I found it on the main OpenShift blogs.
    Turns out there’s a whole webapp that does it beautifully and it takes 3 simple steps to setup a scheduled backup for your application. (more…)

  • Powerful and Cheap WordPress Blog Setup with PHP 7.0, NGNIX, Memcached and MariaDB 10.1 on DigitalOcean 512MB Droplet

    Powerful and Cheap WordPress Blog Setup with PHP 7.0, NGNIX, Memcached and MariaDB 10.1 on DigitalOcean 512MB Droplet

    I have a few wordpress blogs now, some of them had some spikes in visits, some are quite unpopular, but still I always wanted an easy and secure system to host them all without sacrificing speed and money.

    After many trials and errors, I am quite happy with my actual setup which is

    • PHP7
    • Ubuntu 14.04
    • Nginx+Memcached
    • WordPress

    All hosted on a 512MB droplet on DigitalOcean (ref.link) but you can easily use any VPS provider. I just like the overall DigitalOcean service and support. (more…)