<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: David Martín Alaminos</title>
    <description>The latest articles on Forem by David Martín Alaminos (@dmalaminos).</description>
    <link>https://forem.com/dmalaminos</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F55473%2F2a86e439-5971-4b34-bf55-628b561e41c5.png</url>
      <title>Forem: David Martín Alaminos</title>
      <link>https://forem.com/dmalaminos</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/dmalaminos"/>
    <language>en</language>
    <item>
      <title>Learn to communicate</title>
      <dc:creator>David Martín Alaminos</dc:creator>
      <pubDate>Sun, 05 Jan 2025 14:26:38 +0000</pubDate>
      <link>https://forem.com/dmalaminos/learn-to-communicate-5ab1</link>
      <guid>https://forem.com/dmalaminos/learn-to-communicate-5ab1</guid>
      <description>&lt;p&gt;In my experience as both consultant and in-house engineer, tech organisations often falter from communication issues, rather than from challenges related to the technology itself. There are two forms of communication: spoken and written. I've already shared some thoughts on the latter, like on &lt;a href="https://dmalaminos.com/blog/tracing-knowledge" rel="noopener noreferrer"&gt;the importance of tracing knowledge&lt;/a&gt;, so now I'd like to focus on the spoken form. In my opinion, it's the harder one to master: unlike a piece of text that we can always revisit and learn from past mistakes, a sentence said out loud usually cannot be revisited (or even remembered!). So how can we possibly improve our spoken communication? &lt;/p&gt;

&lt;p&gt;My spoken communication skills weren't particularly good during my first years of professional experience. Naturally, &lt;em&gt;I just didn't realise about it&lt;/em&gt; back then. I was capable of giving a successful public talk —always well-rehearsed— but sometimes I would have to explain myself twice and even thrice in order to clearly convey some technical ideas to my team. Sometimes I would pitch an idea, only to be initially disregarded and later recognised after a colleague had reworded it. It felt frustrating. &lt;strong&gt;The first step to improve communication is self-awareness&lt;/strong&gt;: I realised about certain patterns in the way that I communicated, or in the way that my words were received. &lt;/p&gt;

&lt;p&gt;In my years working at &lt;a href="https://www.thoughtworks.com" rel="noopener noreferrer"&gt;ThoughtWorks&lt;/a&gt; I had the luck to work with extremely talented and passionate people, and looking back, I realise that the feedback culture there was the game-changer. Let me describe it briefly: everyone in the team had regular (usually monthly or biweekly) feedback sessions with everyone else in the team, regardless of role, seniority, and whether they were a Thoughtworker or a client. In those feedback sessions, I would meet my colleague, sit together somewhere quiet (or virtually), and then exchange pieces of feedback that we would have prepared for each other, since our last feedback session. We could also ask to focus the feedback on specific topics that we wanted to track. It was common to take notes on the feedback received, and later reflect on it and decide whether to address it or not, and if so, decide what actions to take. This all happened organically among teammates, without any dictated rules or structures. As you can imagine, it was a prime opportunity for me to focus on improving my communication. I was full of determination and worked hard until the regular and diverse feedback supported a new evidence: my communication skills were improving!&lt;/p&gt;

&lt;p&gt;Today I'm still not a master in communication, but I feel proud when I look back and see my evolution. For you reading, and perhaps feeling some words resonate with you: here are some pieces of wisdom I've gathered on my way. Take them with a pinch of salt, what helped me may not necessarily help you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ask for feedback
&lt;/h2&gt;

&lt;p&gt;Feedback is the simplest, yet trickiest tool you can use to improve. It's tricky because it requires you to &lt;strong&gt;openly speak and listen about your vulnerabilities&lt;/strong&gt;, and at the same time your colleague must be able to be completely honest with you. Feedback is a great measuring tool to compare your current status with your past self. I like to write down and archive the pieces of feedback I receive, sometimes adding a summary of my thoughts and possible ideas or plans to improve myself. Depending on the topic, feedback can be quite subjective - so having several sources can help reduce biases.&lt;/p&gt;

&lt;p&gt;It's important to &lt;strong&gt;separate feedback from advice&lt;/strong&gt; (facts about you from your colleague's point of view versus what your colleague would have done differently, in your shoes). You don't have to take advice from your colleague unless you explicitly ask for it. &lt;/p&gt;

&lt;h2&gt;
  
  
  Journal your progress
&lt;/h2&gt;

&lt;p&gt;I find it fascinating to document different things from my day to day. Perhaps a presentation I've done for the client, and what kind of questions did I receive. Perhaps something as simple as an interesting conversation with a teammate, sharing ideas on how to &lt;a href="https://dmalaminos.com/blog/tackling-complex-problems" rel="noopener noreferrer"&gt;solve a complex problem&lt;/a&gt;. How did it go? Was it as expected, anything surprising happened? Was I able to convey my thoughts clearly? How did I feel afterwards?&lt;/p&gt;

&lt;p&gt;Remember to check some old entries in your journal from time to time, it's a nice feeling to &lt;strong&gt;see an evolution in yourself&lt;/strong&gt;, new patterns emerge and how different topics come and go as you move on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Look for non-verbal cues
&lt;/h2&gt;

&lt;p&gt;Make a conscious effort to watch for non-verbal cues in the people you're talking with. For example, if they are squinting their eyes or tilting their head slightly, perhaps your message is not getting through. Perhaps you're boring your listeners with unnecessary or redundant information, if they're looking around or switching their attention to something else. Be aware that this kind of cues are highly dependent on the local culture, and even on the distinct personalities and expressivity of your colleagues, so it's not an infallible method. Still, &lt;strong&gt;being able to notice certain gestures can reveal the disposition of your listeners&lt;/strong&gt;, and even hint you to adjust something in your way of communication.&lt;/p&gt;

&lt;h2&gt;
  
  
  Listen to your own communication
&lt;/h2&gt;

&lt;p&gt;Sometimes I make a voice recording of myself explaining a problem, talking through technical concepts, or pretending to convince someone about my approach, when I'm alone in the room. Wait a little before listening to the recording, and try to &lt;strong&gt;analyse it critically, as if it came from someone else&lt;/strong&gt;. You might realise that it's not truly accurate with what you originally wanted to convey. Discover how subtleties in your tone of voice could make the message clearer or more convincing. Perhaps the message is not structured enough or is missing a logical order. And now, being aware of those weaknesses, record yourself again!&lt;/p&gt;

&lt;p&gt;As mentioned, I only make those recordings when I'm alone, talking to myself. If you'd like to record part of a conversation or interaction with someone else, make sure to ask for permission first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stick to the same vocabulary
&lt;/h2&gt;

&lt;p&gt;In the technical world we often use precise vocabulary to describe domain concepts, patterns, ideas... introducing synonyms in your context of communication can lead to confusion, especially if there's already a widely used and accepted word for it. I've seen many times developers talking about X, and some other roles talking about Y, when X and Y are essentially the same. Sometimes worse, people believing X and Y are the same, when they aren't. For that reason it's important to &lt;strong&gt;challenge new diverging words as soon as they appear&lt;/strong&gt;. Having a common, ubiquitous language is an enabler for effective communication inside tech organisations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Repeat yourself
&lt;/h2&gt;

&lt;p&gt;We developers are quite familiar with principles like DRY (Don't Repeat Yourself) that reduce duplication in codebases, positively increasing their maintainability. But I recommend the contrary when it comes to verbal communication, particularly when conveying an important idea or when trying to make a point. Present it, and then explain it in a different way, including some other nuances. Throw in an example, perhaps. If done properly, &lt;strong&gt;each repetition should align more your audience&lt;/strong&gt; with the exact concept you have in mind. Beware though, over-repetition can be distracting, plainly boring, or directly be perceived as patronising. Don't overdo it, make sure to know your audience and keep an eye on non-verbal cues.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practice story-telling
&lt;/h2&gt;

&lt;p&gt;I found this very useful to give structure to my discourse. Explaining something like a story is also helpful for &lt;strong&gt;keeping your listeners engaged, maybe even intrigued and waiting to hear the conclusion&lt;/strong&gt;. The STAR framework can also be used to quickly give order to your outgoing thoughts: first introduce the Situation or context for the story, then describe the Task that needed to be done and the Actions that were taken, to finally reach some Results. It'll be better if you take a moment to organise your thoughts before talking.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use the silence
&lt;/h2&gt;

&lt;p&gt;Silence could be perceived as awkward by some, but the truth is that it'll only be as awkward as you let it be. Connecting with my previous point, it's important to give structure and order when talking (except if you're voicing your thoughts out loud, of course). In cases like that, &lt;strong&gt;it's okay to use some moments of silence to think something through&lt;/strong&gt;, or before answering certain questions. Make it explicit if you want to feel more comfortable, just let your colleagues know: something like "let me think about that for a second" or "give me a moment to think" should be enough. However, if you anticipate that you'll find yourself in that situation, arrange your thoughts in advance! In certain situations, you won't be able (or won't want) to give an immediate answer without thinking about it for a longer time: try to negotiate postponing the answer, hopefully thorough thought will be valued, if time allows for it.&lt;/p&gt;

&lt;p&gt;You can also use the silence for effect, instead of using &lt;a href="https://en.wikipedia.org/wiki/Filler_(linguistics)" rel="noopener noreferrer"&gt;filler words&lt;/a&gt; between words or sentences. Those can be specially distracting in presentations, increasing the noise-to-signal ratio of your message.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pair programming
&lt;/h2&gt;

&lt;p&gt;Pair programming is a quite peculiar set-up in which &lt;strong&gt;quick and constant communication between your colleague and you will be more valued than elaborate story telling or quiet thinking&lt;/strong&gt;. Try to speak your thoughts out loud without filters, focusing more on making yourself understood than on the correctness of what you say. Your pair will complement your input, and correct you if necessary. Aside from the benefits of pair programming in your output as a developer, it's a fantastic exercise that balances the effective articulation of your own thoughts with actively listening to your colleague. &lt;/p&gt;

&lt;h2&gt;
  
  
  Stay curious, stay humble
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tune in a curious mindset when talking with your colleagues&lt;/strong&gt;, and give yourself the chance to indulge in these interactions. Genuine curiosity will not only unblock conversations, but it will also be perceived as a display of interest that can help you build professional relationships. Equally important, &lt;strong&gt;be humble and treat every opinion with respect&lt;/strong&gt;, even if your experience gives you an advantageous position. Listen actively when your colleagues speak and make an effort to understand what they want to convey. Your attitude will make a strong difference in the communication happening around you.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>career</category>
      <category>agile</category>
      <category>learning</category>
    </item>
    <item>
      <title>Tracing knowledge</title>
      <dc:creator>David Martín Alaminos</dc:creator>
      <pubDate>Wed, 06 Sep 2023 07:00:00 +0000</pubDate>
      <link>https://forem.com/dmalaminos/tracing-knowledge-4p6n</link>
      <guid>https://forem.com/dmalaminos/tracing-knowledge-4p6n</guid>
      <description>&lt;p&gt;Every now and then, I'm reading code and stumble upon some fragment of code that seems strange: while I can quickly see what it is doing, I can't understand or remember why it is needed. Asking a colleague is probably the most effective way to get an answer or at least a pointer to the right direction. However, &lt;strong&gt;it's unrealistic in the long-term to think that all knowledge will survive and persist through time&lt;/strong&gt;. Undocumented reasons and decisions above a certain degree of criticality have an impact over the code, its maintainers, and possibly over its end users. Even good documentation might get lost due to poor placement or lack of references, leaving &lt;a href="https://en.wikipedia.org/wiki/Software_archaeology"&gt;software archaeology&lt;/a&gt; as the only way to understand why some code is in place.&lt;/p&gt;

&lt;p&gt;Here are some ways to produce documentation and avoid leaving code orphan of reason, depending on the granularity of the decision behind it.&lt;/p&gt;

&lt;h2&gt;
  
  
  A small scope 🐜
&lt;/h2&gt;

&lt;p&gt;The first and simplest way is to add a brief comment to the code explaining the why. I only embed comments in the code if I can't make the code itself more self-explanatory by means of refactor, descriptive names and encapsulation. There is a cost in maintaining comments in the code, as they can easily fall out of sync with the code. For that same reason, think critically before trusting comments – they can be less reliable than the code itself.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Usage example: commenting a counterintuitive line of code that someone could mistake as redundant or unnecessary.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A slightly broader scope 🐎
&lt;/h2&gt;

&lt;p&gt;Sometimes the scope of a reason is too broad and cannot be attached to a particular symbol in the code. It's usually the case of changes spanning multiple files, as the outcome of a technical task, user story implementation or a bug fix. In that case, it's a good idea to document the reason in the issue tracker (like Jira, Asana or Trello) and reference it somewhere across the whole changeset, like in the commit message or, if applicable, in the pull request. Sometimes there are written conversations that enrich and elaborate on the requirements or the reasons for the code – don't forget to reference them if you have the chance.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Usage example: implementing an A/B test experiment that requires changes in both frontend and backend.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A broad scope 🐘
&lt;/h2&gt;

&lt;p&gt;Overarching decisions trascend units of work and often have a strategic vision about the technical domain or the product. If the reason derives from a technical decision (for example, using an architecture pattern) it's a good idea to capture it in an &lt;a href="https://adr.github.io"&gt;Architectural Decision Record&lt;/a&gt;. Otherwise, if the reason derives from a product decision, it's best to capture it somewhere closer to the product documentation, or in a knowledge-sharing tool like Confluence. Make sure to gather input and open a space for discussion when generating such documentation, as everyone affected should be aligned and onboard with the decision.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Usage example: choosing asynchronous communication between services in order to improve resilience and scalability.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2pb-2rzm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bdciemy7z2cmjuch2joq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2pb-2rzm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bdciemy7z2cmjuch2joq.png" alt="Make sure to consolidate existing documentation first, it's easy to accidentally duplicate and slowly diverge knowledge sources (xkcd comic #927)" width="800" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Make sure to consolidate existing documentation first, it's easy to accidentally duplicate and slowly diverge knowledge sources (&lt;a href="https://xkcd.com/927/"&gt;xkcd comic #927&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;While there are surely more ways to document decision-making and its outcomes, &lt;strong&gt;what I consider of greater importance is tracing and cross-referencing those knowledge sources&lt;/strong&gt;. There should be a clear path from the code to a documentation artifact declaring its motivation or reason. How to do it? Ensure you have knowledge sources in the first place, and contribute writing and keeping them updated. Then, reference them. Mention them. Share them. Does anyone else have more context? Tag them. It will quickly create alignment and fortify the understanding of anyone looking for answers. &lt;strong&gt;Leave a trace of the reason that is driving you to write code.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>documentation</category>
      <category>productivity</category>
      <category>tutorial</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
