<?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[True Test Tech]]></title><description><![CDATA[I'm Andrew, and I'm passionate about sharing what I've been learning. This publication is a collection of my thoughts, insights, and interesting reference articles that I come across in my journey.]]></description><link>https://www.truetesttech.com</link><image><url>https://substackcdn.com/image/fetch/$s_!lAQu!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3488521-0417-447d-9b38-cbcf7aac1b4e_1024x1024.png</url><title>True Test Tech</title><link>https://www.truetesttech.com</link></image><generator>Substack</generator><lastBuildDate>Sat, 09 May 2026 11:14:18 GMT</lastBuildDate><atom:link href="https://www.truetesttech.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Andrew Talbot]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[andrewtalbot@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[andrewtalbot@substack.com]]></itunes:email><itunes:name><![CDATA[Andrew Talbot]]></itunes:name></itunes:owner><itunes:author><![CDATA[Andrew Talbot]]></itunes:author><googleplay:owner><![CDATA[andrewtalbot@substack.com]]></googleplay:owner><googleplay:email><![CDATA[andrewtalbot@substack.com]]></googleplay:email><googleplay:author><![CDATA[Andrew Talbot]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[How brewing beer reinforced my thoughts on testing.]]></title><description><![CDATA[Start with a clean state.]]></description><link>https://www.truetesttech.com/p/how-brewing-beer-reinforced-my-thoughts</link><guid isPermaLink="false">https://www.truetesttech.com/p/how-brewing-beer-reinforced-my-thoughts</guid><dc:creator><![CDATA[Andrew Talbot]]></dc:creator><pubDate>Tue, 30 Apr 2024 01:20:46 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/5c89994a-6a4a-4dd9-bfb3-3615ee18c83d_5616x3744.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Over the weekend I decided to try my hand at brewing beer. For those who know me, I have a chronic case of curiosity. Here&#8217;s what usually happens. I see something interesting and my brain starts to ask, &#8220;I wonder how that works?&#8221;, and before you know it, I&#8217;m down a rabbit hole. Well, this is no different. I was recently on vacation and visited several distilleries, where I started to wonder how the distilling process works. Once I got back home, my curiosity overcame me and I bought a kit to start home brewing. What&#8217;s interesting is how something unrelated that we are learning can show us perspective in the process. <br><br>What I enjoyed was the checklist of all the things I needed to do. I unpacked the box of bottles, carbonated drops, yeast, and extract. Step one, clean EVERYTHING. When I say everything, it says to clean EVERYTHING! I understand that cleaning would be the first step, but I was surprised at how far it told me to take it. The instructions even had me put the can opener for the extract into the cleaning solution. <br><br>As I thought about it, I started to think about what wisdom could I gain from making beer.<br><br>Just as I needed to put my environment into a clean and sterile state, testing software is similar. Brewing beer can quickly be ruined by tiny microorganisms that are invisible to the eye. It will warp and tarnish the beer as extra bacteria or dust come in contact with the yeast and sugars. When software is not in a clean and known state, you can&#8217;t trust the outcome of your tests. Often in the past, I&#8217;ve had a test fail due to bad data in an environment, or sometimes the previous test didn&#8217;t properly clean up after itself. There are any number of potential risks that can cause your test to be unreliable such as someone accidentally dropping a table in QA, which unfortunately is a true story.<br><br>Each test that you perform, whether it is manual or automated, should start from a place where everything is clean. Where there&#8217;s no leftover data, no drivers hanging around, just clean and sterile. If we have a CREATE operation, we will attempt to create a DELETE operation at the same time. While the delete operation is not yet needed for the business, the added value for cleaning up the tests has been amazing and I would highly recommend it.<br><br>As you test and bring the risk assessment to your organization, think of ways to make the tests more reliable. Start by putting the application under test into a known state and leaving the environment cleaner than you found it.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.truetesttech.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">Thanks for reading True Test Tech! Subscribe for free to receive new posts and support my work.</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><div><hr></div><h2>Additional Reading:</h2><p>https://www.homebrewersassociation.org/how-to-brew/brewing-best-beer-malt-extract/</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://www.truetesttech.com/p/how-brewing-beer-reinforced-my-thoughts?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thank you for reading True Test Tech. This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.truetesttech.com/p/how-brewing-beer-reinforced-my-thoughts?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.truetesttech.com/p/how-brewing-beer-reinforced-my-thoughts?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p>]]></content:encoded></item><item><title><![CDATA[What is fast anyway?]]></title><description><![CDATA[Finding ways to move fast without it becoming the goal.]]></description><link>https://www.truetesttech.com/p/bowing-at-the-altar-of-fast</link><guid isPermaLink="false">https://www.truetesttech.com/p/bowing-at-the-altar-of-fast</guid><dc:creator><![CDATA[Andrew Talbot]]></dc:creator><pubDate>Sat, 27 Apr 2024 20:01:43 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/c10de028-eb37-4205-9475-d5cfdf24c9b9_6000x4000.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;ve been internally wrestling with the concept of what fast means in software, and came across this little gem about <a href="https://qeunit.com/blog/speed-is-the-consequence-not-the-goal/">Speed Is the Consequence. Not the Goal.</a> <br><br>Software is an interesting subject because while it is built on hard sciences such as mathematics, it&#8217;s soft and malleable like thoughts. Software isn&#8217;t concrete like a building or a road, it&#8217;s something purely mental held together by 1&#8217;s and 0&#8217;s. Something in the physical world is done once it&#8217;s built, but software isn&#8217;t like that.<br><br>I&#8217;ve heard terms like we need to move faster or we aren&#8217;t shipping code fast enough. If you don&#8217;t hear it, some teams feel it. There&#8217;s also a parallelization of how <a href="https://www.satisfice.com/blog/archives/856">building software</a> is the same thing as Toyota&#8217;s factory and how it makes cars.</p><p>Sometimes we have to read between the lines and maybe this is what they mean.</p><ol><li><p>We need to find ways to provide value to our paying customers if we want them to come back.</p></li><li><p>We don&#8217;t have product market fit - start throwing spaghetti at the wall and we&#8217;ll do what sticks.</p></li><li><p>Our competitors have an advantage and we are losing market share.</p></li><li><p>Go make me more money!</p></li><li><p>We need to stop deploying production code from our laptops.</p></li></ol><p></p><p>If you&#8217;re in the boat of the poor souls who have to <a href="https://www.reddit.com/r/docker/comments/v0pdwn/how_were_applications_deployed_before_the_advent/">deploy</a> code from their laptops, there is room for improvement, but I&#8217;m not talking about that.</p><p>I believe in moving fast with small incremental improvements whether it is technical or organizational. This was popularized in the book &#8220;<a href="https://jamesclear.com/atomic-habits">Atomic Habits</a>&#8221; by James Clear, and further shown to work by the British Cycling Team referenced in Chapter One.</p><p></p><p>The more I think about it, the more I believe that to move fast most of the changes of a mature company need to happen at an organizational level, not a technical level. Here are the two that first come to mind.</p><ol><li><p><strong><a href="https://en.wikipedia.org/wiki/Conway%27s_law">Organizational Structure might need to change.</a> <br>&#8221;Conway's law</strong> describes the link between the communication structure of organizations and the systems they design. It is named after the <a href="https://en.wikipedia.org/wiki/Programmer">computer programmer</a> <a href="https://en.wikipedia.org/wiki/Melvin_Conway">Melvin Conway</a>, who introduced the idea in 1967.&#8221; If your software<br>is hard to read, feels like siloed black boxes, and you keep thinking that the code you are reading is unnecessarily complex. It could be how the organization communicates and a reorg is necessary.</p><p></p></li><li><p> <strong><a href="https://paulgraham.com/makersschedule.html">Makers are on Manager&#8217;s time.</a></strong></p><p>There are Makers and Managers and the way their day is built is completely different. The Manager's schedule is usually blocked out in thirty to sixty-minute increments and each context is similar. The maker schedule needs large blocks of time to solve complex problems. When writing code, even loading context can take up to 30 minutes.</p><p></p></li></ol><p>While we might tend to want a tool, framework, or language to solve our tech problems, I wouldn&#8217;t start there. As teams and companies look to optimize their work, they should find places to make room for more organizational changes that reflect the desired reality.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.truetesttech.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">Thanks for reading True Test Tech! Subscribe for free to receive new posts and support my work.</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></p><h2>Additional Reading</h2><p>https://qeunit.com/blog/speed-is-the-consequence-not-the-goal/</p><p>https://www.satisfice.com/blog/archives/856</p><p>https://paulgraham.com/makersschedule.html</p><p>https://en.wikipedia.org/wiki/Metacognition</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://www.truetesttech.com/p/bowing-at-the-altar-of-fast?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thank you for reading True Test Tech. This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.truetesttech.com/p/bowing-at-the-altar-of-fast?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.truetesttech.com/p/bowing-at-the-altar-of-fast?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Readability Verses Intention]]></title><description><![CDATA[Consider the clarity of your code and the intentions behind it.]]></description><link>https://www.truetesttech.com/p/readability-verses-intention</link><guid isPermaLink="false">https://www.truetesttech.com/p/readability-verses-intention</guid><dc:creator><![CDATA[Andrew Talbot]]></dc:creator><pubDate>Sat, 27 Apr 2024 13:40:28 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/aed84ea6-cdbc-4a49-b8b5-0e50fbf82cfc_1536x1152.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I often hear the phrase, &#8220;Make your code readable.&#8221; This phrase is thrown around a lot, but the more I started pairing with other engineers, I realized there&#8217;s a gap in communication with these words. The amusing thing about an arrangement of letters is that we can say the same sentence and mean very different things or say words in an almost incoherent way by the way we arrange them. Here&#8217;s an example of a sentence in the English language that shows how absurd this can get. <a href="https://en.wikipedia.org/wiki/Buffalo_buffalo_Buffalo_buffalo_buffalo_buffalo_Buffalo_buffalo">&#8220;Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo&#8221;</a>. </p><p> I believe that we as engineers have to start using better words to convey what we mean and intention is one word I would propose as an alternative. Merriam-Webster defines intention as &#8220;what one intends to do or bring about&#8221;, and that is exactly what our code should do. If you try to push your code to a state where any engineer can understand your intent without talking with you directly you have explicitly made your code more readable. Let&#8217;s look at the code example below.</p><pre><code><code>let orientationView = app.frame.size

if orientationView.width &gt; orientation.height {XCUITDevice.shared.orientation = .portrait}</code></code></pre><p>This code is technically readable. We want to check if the width is greater than the height and then assign something as a portrait if it is. While this is a great first draft, we still don&#8217;t know what the author&#8217;s original intent was. Not only that, we have to pull our minds into a lower-level context and load the implementation details. This was a great stopping point for me to ask more questions as we paired and asked about intent. As he started to explain his intent he was able to distill it into just a few words he said &#8220;I want to put the application under test into portrait mode before I start my test&#8221;. It was a great moment to put those exact words into code. Here&#8217;s what we did to pull those concepts up to a higher level and show intent.</p><pre><code><code>if landscapeOrientation(){  
  changeToPortrait()
}</code></code></pre><p>Now we have done several things with this small refactor. </p><ol><li><p>Hidden the implementation details. </p></li><li><p>Shown the intent of the author.</p></li><li><p>Created an easy-to-test function.</p></li></ol><p>As you go about your day making code more readable think about how you intend your code to be interpreted. Others and your future self will thank you.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.truetesttech.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">Thanks for reading True Test Tech! Subscribe for free to receive new posts and support my work.</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><div><hr></div><h2>Additional Reading</h2><p>https://testing.googleblog.com/2024/04/isbooleantoolongandcomplex.html</p><p></p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://www.truetesttech.com/p/readability-verses-intention?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thank you for reading True Test Tech. This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.truetesttech.com/p/readability-verses-intention?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.truetesttech.com/p/readability-verses-intention?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p>]]></content:encoded></item></channel></rss>