<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[The Healthy Dev]]></title><description><![CDATA[Writing code for a living, without losing your mind.]]></description><link>https://healthydev.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!E_-9!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb1ba318-beb4-497a-a7f6-60334d3034f3_512x512.png</url><title>The Healthy Dev</title><link>https://healthydev.substack.com</link></image><generator>Substack</generator><lastBuildDate>Fri, 24 Apr 2026 13:00:03 GMT</lastBuildDate><atom:link href="https://healthydev.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Tom White]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[healthydev@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[healthydev@substack.com]]></itunes:email><itunes:name><![CDATA[Tom White]]></itunes:name></itunes:owner><itunes:author><![CDATA[Tom White]]></itunes:author><googleplay:owner><![CDATA[healthydev@substack.com]]></googleplay:owner><googleplay:email><![CDATA[healthydev@substack.com]]></googleplay:email><googleplay:author><![CDATA[Tom White]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Control vs Acceptance]]></title><description><![CDATA[An axis for judging your actions and reactions]]></description><link>https://healthydev.substack.com/p/control-vs-acceptance</link><guid isPermaLink="false">https://healthydev.substack.com/p/control-vs-acceptance</guid><dc:creator><![CDATA[Tom White]]></dc:creator><pubDate>Sat, 05 Aug 2023 08:35:24 GMT</pubDate><enclosure url="https://images.unsplash.com/photo-1612012060851-20f943c02d3d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxzY2FsZXxlbnwwfHx8fDE2OTExNjc3MDF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>There are many axes you can use to simplify understanding behaviour. For example, you may be familiar with personality tests like Myers-Briggs and it&#8217;s four letter distillations of personality types - INFJs, ENTJs, and so on. Whether or not you place any validity in your particular four letters, it presents us with 4 measures, giving us a simple framework for understanding ourselves. For example: are we more introverted or more extraverted?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1612012060851-20f943c02d3d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxzY2FsZXxlbnwwfHx8fDE2OTExNjc3MDF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://images.unsplash.com/photo-1612012060851-20f943c02d3d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxzY2FsZXxlbnwwfHx8fDE2OTExNjc3MDF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1612012060851-20f943c02d3d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxzY2FsZXxlbnwwfHx8fDE2OTExNjc3MDF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1612012060851-20f943c02d3d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxzY2FsZXxlbnwwfHx8fDE2OTExNjc3MDF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1612012060851-20f943c02d3d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxzY2FsZXxlbnwwfHx8fDE2OTExNjc3MDF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1612012060851-20f943c02d3d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxzY2FsZXxlbnwwfHx8fDE2OTExNjc3MDF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" width="3200" height="2133" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1612012060851-20f943c02d3d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxzY2FsZXxlbnwwfHx8fDE2OTExNjc3MDF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2133,&quot;width&quot;:3200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;brown and beige weighing scale&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="brown and beige weighing scale" title="brown and beige weighing scale" srcset="https://images.unsplash.com/photo-1612012060851-20f943c02d3d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxzY2FsZXxlbnwwfHx8fDE2OTExNjc3MDF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1612012060851-20f943c02d3d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxzY2FsZXxlbnwwfHx8fDE2OTExNjc3MDF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1612012060851-20f943c02d3d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxzY2FsZXxlbnwwfHx8fDE2OTExNjc3MDF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1612012060851-20f943c02d3d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxzY2FsZXxlbnwwfHx8fDE2OTExNjc3MDF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@saltsup">Piret Ilver</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><p>For people who write code: devs, engineers, programmers, you&#8217;ve probably been subjected to one of these sorts of things at some point.</p><p>Most people will already understand that it&#8217;s never that simple. (Almost?) nobody is purely introverted or extraverted, and our behaviour will differ at different times, different energy levels, and different situations. But it&#8217;s a useful axis with which to understand our own behaviours and tendencies. Am I more introverted in general or extraverted? What are the factors that seem to alter that? Which environments to I thrive in? Which do I find more challenging?</p><p>Any number of other tests will give you further axes with which to judge your own behaviour and sense of self. Are your thoughts more &#8216;emotionally led&#8217; or more &#8216;analytically led&#8217;? Are you more driven by material goods or by experiences? Is your gender identity male, female, or somewhere in between (or on a different axis altogether)? </p><p>I would argue that most of these are useful, but usually to a limited (sometimes trivial) degree. Some people may be lucky to have a strong innate sense of themselves, but for others having guidelines can help form a useful picture of themselves that can help them find environments that are well suited. Or they may find things about themselves that they don&#8217;t like, and they wish to change. Having a language with which to talk about these things can help.</p><p>Which brings me to the axis I want to introduce you to: control vs acceptance (or controlling vs accepting). Like all the axes I&#8217;ve mentioned so far, this is not a question of absolutes. It&#8217;s about understanding behaviours, situations, environments that can lead to you being more controlling, or more accepting. It&#8217;s about understanding that, and perhaps identifying some situations in which you want to change that behaviour.</p><p>And to be clear, I don&#8217;t want to present either of these as a universally &#8216;good&#8217; or &#8216;bad&#8217; thing. Sometimes being accepting is preferable, in others taking control would be beneficial.</p><p>Here&#8217;s two examples to hopefully make that clear:</p><p>Lucy is in a meeting. It&#8217;s not going well: there&#8217;s no clear agenda and the conversation is veering into discussing unimportant minutiae. Nobody else seems to be trying to rally the situation. Is it better to accept this or take control?</p><p>Geoff is in a meeting. It&#8217;s a meeting with the whole team. There is an agenda but the thing he wants to speak about is not on it. He&#8217;s desperate to talk about his topic&#8212;it&#8217;s really important. Is it better to accept the situation or take control?</p><p>Both of these examples are ambiguous, you could come up with any number of circumstances in which either approach would be appropriate, but taken at face value, it would be better for everyone if Lucy took control of the situation and brought the meeting back on track, or ended it. In the latter example it would probably be better for everyone if Geoff accepted that this was not his chance to speak.</p><p>There are many situations in life where you will be automatically reacting with more controlling or more accepting behaviour. In particular you may find that controlling behaviour can emerge when dealing with <a href="https://healthydev.substack.com/p/your-code-is-not-yours">emotional attachment</a>&#8212;something that&#8217;s often tough to negotiate.</p><p>I&#8217;ve written previously about how <a href="https://healthydev.substack.com/p/programming-is-a-creative-activity">programmers should be treated more like creatives</a>, as their work is much more similar to the work of other creatives than it is to many other types of work. One of the strongest attachments can be to things you have created, and it can cloud rational thinking. This can be particularly hard when it&#8217;s time for a substantial piece of code or project into which someone has put a large part of the effort. Nearly all software will have a short life, and when the time comes for removal or replacement of something you consider to have ownership over, do you react with a controlling or an accepting mindset?</p><p>Hopefully this has given you a perspective on which to reflect. Over the next few days and weeks, check in occasionally and evaluate your behaviours. Are there times when a different approach on the control/acceptance scale could have benefitted you?</p>]]></content:encoded></item><item><title><![CDATA[Your Code is not Yours]]></title><description><![CDATA[But our tools make it easy to think it is]]></description><link>https://healthydev.substack.com/p/your-code-is-not-yours</link><guid isPermaLink="false">https://healthydev.substack.com/p/your-code-is-not-yours</guid><dc:creator><![CDATA[Tom White]]></dc:creator><pubDate>Thu, 27 Jul 2023 20:38:44 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ljQI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba21e511-e408-42b5-9d4d-8861f78130de_2400x1772.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As humans, we have a deep, instinctive sense of ownership over things we create. This manifests in many different ways, some of them beneficial (if you have children, you&#8217;re probably <em>very</em> invested in them!). However sometimes these instincts are counterproductive, and especially in any situation where we are creating things collaboratively.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ljQI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba21e511-e408-42b5-9d4d-8861f78130de_2400x1772.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ljQI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba21e511-e408-42b5-9d4d-8861f78130de_2400x1772.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ljQI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba21e511-e408-42b5-9d4d-8861f78130de_2400x1772.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ljQI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba21e511-e408-42b5-9d4d-8861f78130de_2400x1772.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ljQI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba21e511-e408-42b5-9d4d-8861f78130de_2400x1772.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ljQI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba21e511-e408-42b5-9d4d-8861f78130de_2400x1772.jpeg" width="1456" height="1075" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ba21e511-e408-42b5-9d4d-8861f78130de_2400x1772.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1075,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2789685,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ljQI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba21e511-e408-42b5-9d4d-8861f78130de_2400x1772.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ljQI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba21e511-e408-42b5-9d4d-8861f78130de_2400x1772.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ljQI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba21e511-e408-42b5-9d4d-8861f78130de_2400x1772.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ljQI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba21e511-e408-42b5-9d4d-8861f78130de_2400x1772.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@baileyal3xander?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Bailey Alexander</a> on <a href="https://unsplash.com/photos/DAd_Wn6Mj78?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></figcaption></figure></div><p>Many successful companies codify their approach to collective creativity, for example one of <a href="https://hbr.org/2008/09/how-pixar-fosters-collective-creativity">Pixar&#8217;s rules for fostering collective creativity</a> (go read that article, everything in it applies to your engineering culture!) is the concept of &#8216;plussing&#8217;:</p><blockquote><p>&#8230;you may only criticize an idea if you also add a constructive suggestion.</p></blockquote><p>This and many other techniques ensure that the focus of the creative people working together is on the work rather than the individuals creating it. </p><p>As I&#8217;ve written about before on this blog, it&#8217;s time that we start treating programming&#8212;as in the fundamental work that software engineers, developers, data analysts, etc. all do&#8212;<a href="https://healthydev.substack.com/publish/posts/detail/114059496?referrer=%2Fpublish%2Fhome">as creative work</a>.</p><p>One of the core concepts with doing creative work as a team is that once ideas are in public are no longer owned by the individual who submitted them, but rather a part of the body of work that the whole team is working on. This is an important part of creating an environment that&#8217;s <a href="https://hbr.org/2023/02/what-is-psychological-safety">psychologically safe</a> - and that&#8217;s an essential part of a team that can be creative.</p><p>Of course, as programmers, our ideas are often rendered in code when we submit a PR or document like a spec., ADR or RFC. We are working together not in a writers&#8217; room, but in PRs, documents and sprint ceremonies. It is in these forums that sometimes our attachment to our work can get the better of us. We can fall into disruptive patterns of behaviour that serve to prove the validity of our own ideas first, rather than engage in a dialogue about how to get to the best outcome.</p><h3>Our Tools Foster Ownership</h3><p>The tools we use don&#8217;t help, especially for those of us working remotely. In a room where people are talking, an idea can come up, and be shaped by the collective, each person adding their perspective until the concept loses any sense of who owns it. Participants in a creative meeting may struggle even immediately afterwards to identify who exactly contributed what to the finished plan.</p><p>With digital tooling we are not so lucky. Every line of code can spew up a name with <code>git blame</code>, every Slack message is archived forever with your name against what you wrote. Every comment on a document has your name and profile picture next to it. The train of thought and each individual&#8217;s contribution is written in stone, to be pored over as required.</p><p>Since being creative effectively means being &#8216;wrong&#8217;&#8212;or at least not neccessarily &#8216;right&#8217;&#8212;a lot of the time, this means having your name and probably face attached to an essentially indelible record of all of these statements.</p><p>I&#8217;m not saying these tools should change, but it is good to be aware of the way that they don&#8217;t make it easy to detach yourself from the work you do, and to consider the tools you do use when working collaboratively. What tools help blur the boundaries of who did what? Do you need to use a tool at all?</p><h3>The Pain of Cognitive Dissonance </h3><p>To do creative work collaboratively without losing our minds, we must disassociate ourselves from our work. It&#8217;s easier said than done! Often the hardest part can be recognising when problematic instincts are in play.</p><p>Cognitive dissonance is the unpleasant situation that occurs when the brain must hold two contradictory truths side by side. This can happen when we receive feedback because the brain almost axiomatically believes itself to be competent, correct, and most importantly consistent. Therefore when faced with the realisation that perhaps we made a mistake, or that we didn&#8217;t think through a particular scenario, or that we need to make some corrections, our brain is forced to go on the defensive to deal with this. </p><p>To admit that we made a mistake challenges the brain&#8217;s idea that it&#8217;s competent and correct, and to change course runs the risk of inconsistency. So instead we go on the attack: trying to figure out how to change the field of play so that we were right all along, that the proposed changes are not required after all, that the person making the suggestions is wrong, that communication was at fault, resulting in our misunderstanding, etc.</p><p>This all happens&#8212;unless you&#8217;re well practiced at spotting it&#8212;without realising that this is going on at all.</p><h3>Getting the Better of your Instincts</h3><p>Fostering a safe, supportive creative environment relies on a strong group dynamic and a shared understanding of what the pitfalls lie when working collaboratively. This means achieving a good collaborative creative environment cannot be something that can be achieved through individual action alone (unless, perhaps, you&#8217;re managing said team). </p><p>Above all it requires deep trust. One person falling into a defensive stance about their idea can trigger a cascade as others adopt a similar stance in response, or get locked into discussion of that one suggestion rather than moving on.</p><p>However, mastering your own instincts is still an important part of the battle, but if you are aware that your team is falling into bad patterns of behaviour, take the time to focus on fostering a creative environment that feels safe for everyone.</p>]]></content:encoded></item><item><title><![CDATA[Growth as a Software Engineer]]></title><description><![CDATA[Key skills to go beyond senior]]></description><link>https://healthydev.substack.com/p/growth-as-a-software-engineer</link><guid isPermaLink="false">https://healthydev.substack.com/p/growth-as-a-software-engineer</guid><dc:creator><![CDATA[Tom White]]></dc:creator><pubDate>Mon, 26 Jun 2023 20:29:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!sRqK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf55cc15-4fd1-4d61-b935-ace8786e4f86_5760x3840.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>For many software engineers, career progression can feel frustratingly linear, with a low ceiling, outside of a few large corporations, which might not be places everyone wants to work. From junior to &#8216;mid&#8217; to senior can sometimes be achieved in a few years, and those looking to further their prospects and their pay packet from that point can struggle to avoid the management track.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sRqK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf55cc15-4fd1-4d61-b935-ace8786e4f86_5760x3840.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sRqK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf55cc15-4fd1-4d61-b935-ace8786e4f86_5760x3840.jpeg 424w, https://substackcdn.com/image/fetch/$s_!sRqK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf55cc15-4fd1-4d61-b935-ace8786e4f86_5760x3840.jpeg 848w, https://substackcdn.com/image/fetch/$s_!sRqK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf55cc15-4fd1-4d61-b935-ace8786e4f86_5760x3840.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!sRqK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf55cc15-4fd1-4d61-b935-ace8786e4f86_5760x3840.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sRqK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf55cc15-4fd1-4d61-b935-ace8786e4f86_5760x3840.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/df55cc15-4fd1-4d61-b935-ace8786e4f86_5760x3840.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:6525765,&quot;alt&quot;:&quot;A forest of large redwood trees&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A forest of large redwood trees" title="A forest of large redwood trees" srcset="https://substackcdn.com/image/fetch/$s_!sRqK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf55cc15-4fd1-4d61-b935-ace8786e4f86_5760x3840.jpeg 424w, https://substackcdn.com/image/fetch/$s_!sRqK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf55cc15-4fd1-4d61-b935-ace8786e4f86_5760x3840.jpeg 848w, https://substackcdn.com/image/fetch/$s_!sRqK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf55cc15-4fd1-4d61-b935-ace8786e4f86_5760x3840.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!sRqK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf55cc15-4fd1-4d61-b935-ace8786e4f86_5760x3840.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@jfelise?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Josh Felise</a></figcaption></figure></div><p>It goes without saying that what makes a good engineer a good engineer very rarely translates into making them a good manager. Different companies structure themselves very differently too which doesn&#8217;t help - team leads, tech leads, technical product managers, software architects, staff engineers there are a multitude of names and roles given to the most senior engineers within an organisation, and no clear consensus on what the best structure is - often they can emerge reactively from trying to retain key people.</p><p>This can make it tough for those in a senior role looking to progress to the next step. Are you a staff engineer or a software architect? You may find two roles with those two names that present very similar requirements, however two roles for staff engineer - even within the same company - may have very different requirements!</p><p>It seems it&#8217;s best to ignore roles, names, the specifics of what individual companies may want their most senior engineers to achieve, and instead focus on developing the skills that will get you there, regardless of what the roles might be.</p><p>In no particular order I&#8217;ve listed a few key areas of development I think are neccessary&#8212;in some combination&#8212;to get you through the threshold of senior engineer and into roles above:</p><ol><li><p><strong>Holistic Engineering</strong></p><p>This is the skill of understanding the context in which you are working as broadly as possible. For a system, product, module you are working on, you should be able to trace its value all the way back to fundamentals. For a given piece of work, however big or small: Who does it benefit (probably multiple personas, internal and external)? How does it benefit them? Where are the lines of communication to those people? Do they know what you&#8217;re doing?<br><br>Understanding this at all times&#8212;and if it&#8217;s not understood making efforts to make sure it is so&#8212;pays dividends. It aids everything else you do as an engineer, especially in a product organisation.</p><p><br>A key side-effect of this skill is that, in the right organisation, it can engender trust and autonomy. When the trust isn&#8217;t there, the same effect can be approximated with stakeholder meetings, where all of this is worked out &#8216;on paper&#8217;. This process is expensive, time-consuming and often frustrating, but it&#8217;s a habit many organisations fall into.<br><br>The right engineers, with the right team around them, empowered in the right ways can&#8212;sometimes&#8212;cut through this.</p></li><li><p><strong>Decision Making</strong></p><p>Opinions are something that develop most noticeably with engineering experience. People just starting out are likely to follow blindly, or adopt the opinions of those around them without question. As you become more experienced, some opinions will burnish, others might change. You may come up with some of your own ideas. A large-enough collection of engineers will always disagree about some things, big and small. Choice of language, choice of architecture, team structure, meeting schedule, there&#8217;s an endless list of sources of friction.</p><p><br>Decision making sounds trivial at first, but it&#8217;s a key leadership skill. Can you deal with making a decision that you know will make at least some people unhappy, and own it and the disgruntlement that comes with it? What about a decision that makes <em>most or all</em> people unhappy but you know is for the greater good?<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> </p><p><br>For example you may find yourself in a situation where a key production system is written in, say, VBA. It&#8217;s difficult to maintain, breaks frequently, and it&#8217;s very hard to hire new people into the project. But the people maintaining it have put years into understanding its many quirks and are experts in it. To break it up and re-write it might be the best decision for the company, but might meet resistance from those for whom it has become their speciality.</p></li><li><p><strong>Wrangling Data</strong></p><p>Being able to be fluent in data is useful in a multitude of situations within and without engineerning itself. You probably have some capability here already, but it&#8217;s worth getting really good at it. Finding and fixing the nastiest of bugs can often require a data-oriented approach, and quickly and reliably being able to extract complex metrics from your observability platform or log data is the kind of skill that will make you very useful to a lot of people.<br><br>For example, are you reasonably fluent in a data-wrangling tool, for example Jupyter Notebooks? Can you build something that takes in 100MB of csv log data and produces a graph of something using string matching? Can you take a spreadsheet from finance and validate it against the transaction log in your database? Can you make a detailed case for a new approach using a fully worked cost estimate?</p></li><li><p><strong>Understand the whole stack at some level</strong></p><p>Similar in concept to holistic engineering, it&#8217;s important to understand a bit about the whole stack of software within which you&#8217;re working (and at least a rudimentry understanding of the hardware too!). In an online application there&#8217;s probably at the very least a front end or client, a back end, some data stores, some caches, potentially split across many (micro?) services and using quite a few pieces of technology and third-party services.</p><p><br>Other systems may involve more or fewer layers of complexity, but there are always layers. If you are writing a native application you will be dealing with the operating system. If you are working as a data scientist you will be using tools like pandas or R as well as plenty of other libraries. It is important to understand not just how these tools work at some level but also why they work, why they&#8217;ve been chosen, why they&#8217;re popular (or unpopular), and what the alternatives are.</p></li><li><p><strong>Write less code, communicate more</strong></p><p>In a commercial setting, there&#8217;s a cap on how useful an excellent programmer can be if all they do is write code, and if all you really want to do is write code, it&#8217;s probably best not to pursue advancements in your career.<br><br>This is because advancement will always be related to impact, and by working essentially alone there is a limit to how much impact you can deliver. Working alone is also a liability for your employer, particularly if you&#8217;re working on critical or complex systems - what happens when you&#8217;re not around? This is also a short path to burnout.</p><p><br>If you do want to pursue that advancement though, a fundamental skill you will need to develop is leadership. Line management is one type of leadership, and a trap many organisations fall into is providing this as the only path to its engineers. However technical leadership&#8212;which involves just as much communication&#8212;is just as important to an engineering org of any substantial size.</p><p><br>Working with others - pairing, mentoring, guiding, etc., as well as participating in meetings about larger decisions will become a more and more useful application of your knowledge and skills.<br><br>Building good relationships with others and helping them understand engineering constraints and capabilities is a very good use of your time too. Managers, leadership, and whatever structure exists in your organisation outside engineering will benefit from your insights, especially if there isn&#8217;t a clear communication path already. Your data wrangling skills and the ability to answer interesting questions or present novel information will help a lot here!</p></li></ol><p>I hope at least some of this was obvious to you, and I hope at least some of these skills are things you&#8217;re aware of and developing, even if I didn&#8217;t articulate them in the way you might be used to - I&#8217;m learning too!</p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p><em><strong>&#8220;The Greater Good!&#8221;</strong></em></p><p></p></div></div>]]></content:encoded></item><item><title><![CDATA[Programming is a Creative Activity]]></title><description><![CDATA[How to treat people who write code well]]></description><link>https://healthydev.substack.com/p/programming-is-a-creative-activity</link><guid isPermaLink="false">https://healthydev.substack.com/p/programming-is-a-creative-activity</guid><dc:creator><![CDATA[Tom White]]></dc:creator><pubDate>Tue, 23 May 2023 10:31:27 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a8c4cc21-eab2-409a-bbac-ea02703bf8b3_1080x1014.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>At first glance, the work of a &#8216;creative&#8217;&#8212;e.g. an artist, designer, writer&#8212;and a &#8216;programmer&#8217;&#8212;dev, engineer, IC etc.&#8212;are very different. Certainly you&#8217;re likely to find the cultural centre of two groups of people in these fields to be quite different from each other.</p><p>At a glance the work may seem quite different too: a visual artist will spend their day sketching, possibly without the aid of digital tools at all, in order to create visually aesthetic, meaningful visual works. The programmer on the other hand is solving a complex logic puzzle with lines of code in a very rigid environment, they are probably working to a specification detailing exactly what it is they need to produce and potentially even how.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://healthydev.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">The Healthy Dev is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>If you look at how creatives are hired there are very different approaches too: At a large agency you will find creatives are rarely hired alone, instead partnerships or even teams of people will be interviewed and hired together. There is so much value bound up in creative partnerships that breaking them is not beneficial for anyone involved, whereas programmers will often change teams and companies frequently, potentially switching languages, stacks, industries all at once as they do so.</p><p>However, I would propose that programming is as creative as any of these other fields, and programmers (I use that term as a blanket to cover those who primarily code as part of their job) and the companies that employ them might create a better, more productive working environment if they were treated as such, and used some of the same approaches for hiring and managing them.</p><p>One of the places where people fail to see this parallel is due to&#8212;broadly speaking&#8212;the differences in personalities you will find in these roles. I am going to talk in big generalisations here! </p><p>I know, and I&#8217;m sure you know many people who break this rule, but on the whole you&#8217;d have to agree that if you were to do a Myers-Briggs  (or whichever personality horoscope you prefer) you would find that on the whole you&#8217;d find programmers on the more analytical side of the axis, and your traditional creatives on the more emotional.</p><p>This confuses us, because in our minds we&#8217;ll typically see emotionally-driven creatives and analytically-driven programmers, and yet the work that programmers are doing is fundamentally just as creative in nature.</p><p>Another confounding factor is that the output of a traditional creative&#8217;s time is typically something that is tangible: an image, some music, copy or prose. The output of the programmer&#8217;s time is likely only really understandable by their colleagues.</p><p>Sitting at a text editor or IDE a programmer with nothing more than an idea in their head will wrangle it into being through their own insight and creative will. Most programmers will have an urge to make, to build (an instinct that often needs to be reigned in!), and that&#8217;s what got them into it in the first place.</p><p>The tools look very different, the ideas are a very different shape, and yet the fundamental act of creation is the same as someone turning their ideas into prose, copy, sound or visual media.</p><p>Many of those who write for a living have a personal project like a book they work on in their spare time. Someone with a job in UI design may have an artistic side project as an outlet for the creativity which has its wings clipped by company requirements. Do you know programmers who also work on creative projects outside of work?</p><p>Another misdirection (for now at least) is money. Getting paid to write is hard, and getting paid to write truly &#8216;creatively&#8217; (beyond e.g. marketing copy) is harder still. Salaries are often low, creative jobs subsidised by others, and only those who make it to the top of the tree, who get their big break&#8212;their book gets published, their art gets noticed&#8212;will make serious money from their passion.</p><p>For the past few decades, programming has been in such high demand it is  easy enough if you are moderately profficient at it to command a comfortable salary with good perks and great job security. Of course it was not always thus, with programming being considered a secretarial role in the very early days of computing!</p><p>This disparity in status can make the work that programmers are doing feel more important, more serious, more valued compared to the work of other creatives.</p><p>It is interesting that in the latest leap forward in AI technology many creatives are nervous for their jobs - LLMs like ChatGPT can convincingly write meaningful-sounding prose to a specified style. Stable Diffusion and other visual AIs can produce images to a very tight spec instantly, mimicking any style and with any arrangement of subjects. </p><p>For the first time it also seems that AI is coming for the jobs of programmers themselves too - ChatGPT can write code to spec in a variety of languages, explain how it work, and fix its own bugs when prompted. It is likely that it will only get better from here. We may be entering a new chapter very soon where programmers and creatives find themselves on equal footing again.</p><p>But for now at least nothing seems to be changing yet. The tools may change but we will still need people who can understand them, and while the job of programming may change, in the past when massive labour-saving inventions have come along, the result has been more work put into other things, and there is no shortage of demand for software.</p><p>So how can an organisation do better by its programmers? I&#8217;d suggest in the following ways:</p><ul><li><p><strong>Respect flow work</strong></p><p>All programmers know about flow - to be deep in a difficult problem, with all the context in your head at once. This state is hard to achieve, and impossible to achieve with distractions. Artists and writers attend retreats to find the time and space for big thoughts. Perhaps your programmers could benefit from some extended periods of thinking time too.</p></li><li><p><strong>Don&#8217;t disrupt great partnerships</strong></p><p>A team that&#8217;s working well together can be hard to find, and it&#8217;s difficult to engineer. Sometimes the magic just happens and you have a team that&#8217;s firing on all cylinders. Reject the temptation to spread that good practice around and leave them to get on with it. Just as great creatives form great partnerships, let your programmers do so too.</p></li><li><p><strong>Understand &amp; manage the emotional impact of creation</strong></p><p><a href="https://en.wikipedia.org/wiki/IKEA_effect">The IKEA effect</a> is a bias everyone displays towards things they themselves have created, or had a hand in creating. You instinctively feel ownership over something you have put effort into. When managing programmers, be aware of this. All code typically has a short lifespan of a few years at most. Deleting, deprecating, decommissioning things that you have put months or years into creating can be a surprisingly emotionally hard thing to do. Understand this toll.</p></li><li><p><strong>Give freedom but with clear boundaries</strong></p><p>Creation is exhausting, an in particular with programming there are many decisions to make, even on a single line of code. What to name a variable? Use a case statement or if else? Where to handle a potential error? This is exhausting, and one of the ways to help programmers out is by making as much of this as obvious as possible with clear, concise style guides, automatic formatters, and clear guidance about How Code Is Written At Company. But it&#8217;s a fine line - too proscriptive and it can feel like all the creativity has been sucked out of the job, and that&#8217;s probably the motivation for doing the job in the first place.</p></li><li><p><strong>Understand that creation is a two-way process</strong></p><p>You cannot be a writer without reading voraciously. You cannot paint without appreciating the work of others. So it is with programming. However unlike works of great literature or art which are freely or cheaply available to consume and learn about, most code is tucked away within the organisations that own it. However, the masterstrokes, the key ideas, the clever hacks live on in the heads of the programmers who worked there even once they have moved on. Encourage programmers to share not just what they are working on now, but the best things they&#8217;ve worked on before (while respecting their NDA&#8217;s, of course).</p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://healthydev.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">The Healthy Dev is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>