<?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[Optivem Journal: Podcast]]></title><description><![CDATA[Podcast]]></description><link>https://journal.optivem.com/s/podcast</link><image><url>https://substackcdn.com/image/fetch/$s_!0CjJ!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9abead4c-3f54-46b1-96aa-7033849416df_200x200.png</url><title>Optivem Journal: Podcast</title><link>https://journal.optivem.com/s/podcast</link></image><generator>Substack</generator><lastBuildDate>Tue, 21 Apr 2026 04:39:12 GMT</lastBuildDate><atom:link href="https://journal.optivem.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Valentina Jemuović, Optivem]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[optivem@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[optivem@substack.com]]></itunes:email><itunes:name><![CDATA[Valentina Jemuović]]></itunes:name></itunes:owner><itunes:author><![CDATA[Valentina Jemuović]]></itunes:author><googleplay:owner><![CDATA[optivem@substack.com]]></googleplay:owner><googleplay:email><![CDATA[optivem@substack.com]]></googleplay:email><googleplay:author><![CDATA[Valentina Jemuović]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Why Unit Tests & E2E Tests don’t protect us in production]]></title><description><![CDATA[Watch now | Why do many test automation initiatives fail in reducing regression bugs?]]></description><link>https://journal.optivem.com/p/why-unit-tests-and-e2e-tests-dont-protect-us-in-production</link><guid isPermaLink="false">https://journal.optivem.com/p/why-unit-tests-and-e2e-tests-dont-protect-us-in-production</guid><dc:creator><![CDATA[Valentina Jemuović]]></dc:creator><pubDate>Fri, 26 Sep 2025 06:02:44 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/174517721/28979425fb857f0d57d51bef459d9c97.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p><em>&#128274; Hello, this is Valentina with a premium issue of the Optivem Journal. I help Engineering Leaders &amp; Senior Software Developers apply <a href="https://journal.optivem.com/p/tdd-in-legacy-code-transformation">TDD in Legacy Code</a>.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://journal.optivem.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://journal.optivem.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p>Many companies try E2E tests and Unit Test initiatives.</p><p>The might write 10 tests. 100 tests&#8230; 1000 tests.</p><p>&#8230; But did NOT achieve the goal of reducing production regression bugs.</p><p>Management is getting angry - why is time being spent on test automation, without any results to show for it?</p><p>They are right.</p><p>If we don&#8217;t achieve any outcomes, then the test automation is a WASTE of time.</p><h2>Why E2E Tests don&#8217;t protect us in production</h2><ol><li><p><strong>Limited scenarios</strong></p></li></ol><p>We can cover some scenarios: </p><ul><li><p>Testing that given valid inputs, we can place an order</p></li></ul><p>But there&#8217;s many scenarios that we can&#8217;t cover because we can&#8217;t control the external systems:</p><ul><li><p>Can&#8217;t test total order total price, because we can&#8217;t control the ERP product pricing</p></li><li><p>Can&#8217;t test that error popup when payment system is down, because we can&#8217;t force PayPal to go down</p></li><li><p>Can&#8217;t test order discount when order is made on weekend after 5pm, because we can&#8217;t control the system clock</p></li></ul><ol start="2"><li><p><strong>Maintenance issues</strong></p></li></ol><p>Furthermore, E2E tests are flaky and hard to maintain. If you change one thing in the UI, this can break hundreds of tests, and then you have to fix all of them. Teams often spend more time maintaining tests than actually delivering new features.</p><h2>Why Unit Tests don&#8217;t protect us</h2><p>Unit tests don&#8217;t protect us against regression bugs because they cover only Business Logic. They don&#8217;t cover I/O and Presentation Logic, and they don&#8217;t cover the whole user flow. That&#8217;s why you can have hundreds of thousands of tests passing, 100% code coverage&#8230; but coverage is only for business code logic, not infrastructure or presentation logic.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8wdc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31199580-2d69-4f85-92e9-7897eae70668_1766x566.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8wdc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31199580-2d69-4f85-92e9-7897eae70668_1766x566.png 424w, https://substackcdn.com/image/fetch/$s_!8wdc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31199580-2d69-4f85-92e9-7897eae70668_1766x566.png 848w, https://substackcdn.com/image/fetch/$s_!8wdc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31199580-2d69-4f85-92e9-7897eae70668_1766x566.png 1272w, https://substackcdn.com/image/fetch/$s_!8wdc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31199580-2d69-4f85-92e9-7897eae70668_1766x566.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8wdc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31199580-2d69-4f85-92e9-7897eae70668_1766x566.png" width="1456" height="467" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/31199580-2d69-4f85-92e9-7897eae70668_1766x566.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:467,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:53235,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://journal.optivem.com/i/174517721?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31199580-2d69-4f85-92e9-7897eae70668_1766x566.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8wdc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31199580-2d69-4f85-92e9-7897eae70668_1766x566.png 424w, https://substackcdn.com/image/fetch/$s_!8wdc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31199580-2d69-4f85-92e9-7897eae70668_1766x566.png 848w, https://substackcdn.com/image/fetch/$s_!8wdc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31199580-2d69-4f85-92e9-7897eae70668_1766x566.png 1272w, https://substackcdn.com/image/fetch/$s_!8wdc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31199580-2d69-4f85-92e9-7897eae70668_1766x566.png 1456w" sizes="100vw" loading="lazy"></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></figure></div><h2>Why Acceptance Tests CAN protect us</h2><p>Since those two approaches don&#8217;t work, what does work is <strong>Acceptance Tests</strong>.</p><p>Acceptance tests are like E2E tests but without the limitations of E2E tests.</p>
      <p>
          <a href="https://journal.optivem.com/p/why-unit-tests-and-e2e-tests-dont-protect-us-in-production">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Adopt ATDD so that your teams can eliminate Manual Regression Testing]]></title><description><![CDATA[Watch now | Teams are stuck with Manual QA. E2E Tests didn't work out. Unit Tests didn't work out. In this workshop, we show you how to introduce ATDD so that you don't have to rely on Manual QA?]]></description><link>https://journal.optivem.com/p/session-2025-08-06-atdd-in-legacy-code-roadmap-live</link><guid isPermaLink="false">https://journal.optivem.com/p/session-2025-08-06-atdd-in-legacy-code-roadmap-live</guid><dc:creator><![CDATA[Valentina Jemuović]]></dc:creator><pubDate>Fri, 08 Aug 2025 06:01:48 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/170296608/c3ba68de92f4ec0168f74b9df8edae89.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p><strong>&#128070;For non-paid subscribers, you can see a free preview above. The complete 2hr workshop is accessible to paid subscribers.</strong></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://journal.optivem.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://journal.optivem.com/subscribe?"><span>Subscribe now</span></a></p><p>You're stuck in Legacy Code. Every day is spent fire-fighting. Manual QA is taking longer and longer. The team wants to adopt Automated Testing. </p><ol><li><p>The teams tried E2E Tests, but they could cover only limited scenarios and those tests were constantly breaking whenever the UI changed. So they disabled the E2E Tests, and went back to relying just on Manual QA.</p></li><li><p>The teams tried Unit Tests, aiming for 80% code coverage. They spent a lot of time, wrote many unit tests, but QA Engineers still discovered many regression bugs. Furthermore, the unit tests frequently broke when developers did refactoring, so they had to waste time fixing the unit tests, ultimately disabling the Unit Tests. They still had to rely on Manual QA for regression bug protection.</p></li></ol>
      <p>
          <a href="https://journal.optivem.com/p/session-2025-08-06-atdd-in-legacy-code-roadmap-live">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Test Doubles II - Live Q&A]]></title><description><![CDATA[Watch now | Watch my Live Q&A - Unit Tests (Part 4) (9th July) replay where we answered additional questions regarding Unit Testing]]></description><link>https://journal.optivem.com/p/session-2025-07-09</link><guid isPermaLink="false">https://journal.optivem.com/p/session-2025-07-09</guid><dc:creator><![CDATA[Valentina Jemuović]]></dc:creator><pubDate>Fri, 11 Jul 2025 13:46:21 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/167929359/9f2101344a22d863672c43baaf93fd50.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>&#128640; Do you want to eliminate manual QA regression testing? In this way, you&#8217;ll reduce delivery time and reduce regression bugs. On <strong>Wed 6th Aug (17:00 - 19:00 CEST)</strong>, I&#8217;m hosting <strong>ATDD in Legacy Code Roadmap (Live Workshop)</strong>. During this workshop you&#8217;ll learn:</p><ol><li><p>Why ATDD will reduce software delivery time and reduce regression bugs, replacing manual regression testing</p></li><li><p>How to introduce ATDD in Legacy Code in an incremental way, while still keeping up with existing feature delivery</p></li><li><p>How to convince Engineering Managers, Software Engineers and QA Engineers to adopt ATDD in Legacy Code</p></li></ol><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://lu.ma/vg945412&quot;,&quot;text&quot;:&quot;&#127942; Register now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://lu.ma/vg945412"><span>&#127942; Register now</span></a></p><p><em>P.S. If you&#8217;re a Paid Member, you&#8217;ll receive a 100% discount (see Event Description for instructions on how to redeem your 100% discount).</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://journal.optivem.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://journal.optivem.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p>During this Live Q&amp;A, we continued answering the question:</p><ul><li><p>&#8203;Which Test Doubles should we use in unit testing? (should we use mocking libraries or write our own test doubles) <a href="https://substack.com/chat/824051/post/a880059d-5062-4250-b910-a0a70d330bad/reply/b186ce97-7e94-48e2-835a-8b354b013482">[Source]</a></p></li></ul><p>We compared different test doubles, as well as comparing hand-written test doubles versus using mocking libraries. </p><h2>Using Mocking Libraries</h2><p>Many developers use mocking libraries, for example: Mockito (Java), Moq (.NET), Jest (JS/TS), etc. I was using mocking libraries for many years, too.</p><p>It&#8217;s very appealing to use mocking libraries, because you install the library and can immediately start to use it in your test. It&#8217;s also very easy how to setup with mock libraries.</p><p>Although there&#8217;s no upfront cost to setting up test doubles with mocking libraries (since no separate class is required), the issue lies in the ongoing recurring cost: for each test, we must create and set up the mock. Let&#8217;s see the impact:</p><ul><li><p>Tests have more lines (due to mock setup), which means more reading time, hence increasing maintenance costs.</p></li><li><p>Tests are coupled to implementation, because we have to know exactly which methods will be called for each dependency; consequently, if a dependency&#8217;s interface changes (e.g., parameters change, or we need to call another method on the dependency), it will cause tests to fail with compile-time error, so we may need to fix hundreds/thousands of tests. This also means higher maintenance costs.</p></li></ul><h2>Using hand-coded libraries</h2><p>You can see examples of hand-coded test doubles in <a href="https://blog.cleancoder.com/uncle-bob/2014/05/14/TheLittleMocker.html">The Little Mocker (Uncle Bob)</a>.</p><p>I remember when I first saw hand-coded test doubles, I was against the idea. Isn&#8217;t it better to use a mocking library instead?! </p>
      <p>
          <a href="https://journal.optivem.com/p/session-2025-07-09">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[From Zero to Bestseller in 2 Months: Here’s What You Didn’t See]]></title><description><![CDATA[A recording from Valentina Jemuovi&#263; and Ciler from Newsletter Circle's live video]]></description><link>https://journal.optivem.com/p/from-zero-to-bestseller-in-2-months</link><guid isPermaLink="false">https://journal.optivem.com/p/from-zero-to-bestseller-in-2-months</guid><dc:creator><![CDATA[Valentina Jemuović]]></dc:creator><pubDate>Wed, 25 Jun 2025 15:02:14 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/166810118/5185bed8938e8d9478ac55dfd010378c.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p><em>&#128075; Hello, this is Valentina with the free edition of the Optivem Journal. I&#8217;ll help you apply TDD to escape the nightmare of Legacy Code. Join our paid community of 160+ senior engineers &amp; leaders for support on your TDD journey, plus instant access to group chat and live Q&amp;As:</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://journal.optivem.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://journal.optivem.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p>Thank you to everyone who tuned in to my live video! </p><p>During our chat, I shared my learnings:</p><ul><li><p>Why did I shift from LinkedIn to Substack as my primary platform?</p></li><li><p>How did I discover who the readers are that I&#8217;m writing for?</p></li><li><p>How did I convert my work as a Coach/Consultant into the TDD series?</p></li><li><p>Ultimately, what advice would I offer if you&#8217;re starting a Paid Newsletter?</p></li></ul><div class="install-substack-app-embed install-substack-app-embed-web" data-component-name="InstallSubstackAppToDOM"><img class="install-substack-app-embed-img" src="https://substackcdn.com/image/fetch/$s_!0CjJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9abead4c-3f54-46b1-96aa-7033849416df_200x200.png"><div class="install-substack-app-embed-text"><div class="install-substack-app-header">Get more from Valentina Jemuovi&#263; in the Substack app</div><div class="install-substack-app-text">Available for iOS and Android</div></div><a href="https://substack.com/app/app-store-redirect?utm_campaign=app-marketing&amp;utm_content=author-post-insert&amp;utm_source=optivem" target="_blank" class="install-substack-app-embed-link"><button class="install-substack-app-embed-btn button primary">Get the app</button></a></div><div><hr></div><p>&#128226; On <strong>Wed 9th July 17:00 CET</strong>, I&#8217;m hosting <strong>TDD &amp; Unit Tests - Part 4 (Live Q&amp;A)</strong>:</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://lu.ma/0l194lm9&quot;,&quot;text&quot;:&quot;Register now&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://lu.ma/0l194lm9"><span>Register now</span></a></p><p><em>P.S. If you&#8217;re a Paid Member, you&#8217;ll receive a 100% discount (see Event Description for instructions on how to redeem your 100% discount).</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://journal.optivem.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://journal.optivem.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Do you want to start a Substack Newsletter?</h2><p>I regret not starting Substack earlier.</p><p>If you&#8217;re a Senior Developer who wants to write a book, or share your knowledge on Substack; or if you&#8217;re a Leader/Coach/Consultant who wants to share your experience on Substack and would like some advice from me, feel free to comment below.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://journal.optivem.com/p/from-zero-to-bestseller-in-2-months/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://journal.optivem.com/p/from-zero-to-bestseller-in-2-months/comments"><span>Leave a comment</span></a></p>]]></content:encoded></item><item><title><![CDATA[Test Doubles - Live Q&A]]></title><description><![CDATA[Watch now (65 mins) | Watch my Live Q&A - Unit Tests (Part 3) (18th Jun) replay where we answered additional questions regarding Unit Testing]]></description><link>https://journal.optivem.com/p/session-2025-06-18</link><guid isPermaLink="false">https://journal.optivem.com/p/session-2025-06-18</guid><dc:creator><![CDATA[Valentina Jemuović]]></dc:creator><pubDate>Fri, 20 Jun 2025 06:01:46 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/166304550/1315f14d8c14928f3be5c337895bc535.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p><em>&#128274; Hello, this is Valentina with a premium issue of the Optivem Journal. I help Engineering Leaders &amp; Senior Software Developers apply <a href="https://journal.optivem.com/p/tdd-in-legacy-code-transformation">TDD in Legacy Code</a>.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://journal.optivem.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://journal.optivem.com/subscribe?"><span>Subscribe now</span></a></p>
      <p>
          <a href="https://journal.optivem.com/p/session-2025-06-18">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[TDD in Hexagonal Architecture - Inside out vs Outside in]]></title><description><![CDATA[Watch now | Watch my Unit Tests (Part 2) - Live Q&A Session (30th April) replay where we talked about TDD & Hexagonal Architecture]]></description><link>https://journal.optivem.com/p/session-2025-04-30</link><guid isPermaLink="false">https://journal.optivem.com/p/session-2025-04-30</guid><dc:creator><![CDATA[Valentina Jemuović]]></dc:creator><pubDate>Fri, 02 May 2025 06:01:17 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/162567501/dcfed3d93fec47bd733dff5fed024a99.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p><em>&#128274; Hello, this is Valentina with a premium issue of the Optivem Journal. I help Engineering Leaders &amp; Senior Software Developers apply <a href="https://journal.optivem.com/p/tdd-in-legacy-code-transformation">TDD in Legacy Code</a>.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://journal.optivem.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://journal.optivem.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p>During our Live Q&amp;A Session, we addressed Alessandro&#8217;s <a href="https://substack.com/chat/824051/post/a880059d-5062-4250-b910-a0a70d330bad/reply/45583e19-0b41-41ba-82cb-18647fd5c98e">question</a> about TDD &amp; Hexagonal Architecture:</p><blockquote><p>Speaking about broad test at the Hexagon Ports, how this impact TDD in terms of feedback Speed?</p><p>How long take a single TDD cycle implementing a Port behaviour?</p><p>How we can we move to have short cycles?</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!W2n2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ce48bff-de98-47a3-8723-c7e1b68cc36e_920x1086.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!W2n2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ce48bff-de98-47a3-8723-c7e1b68cc36e_920x1086.png 424w, https://substackcdn.com/image/fetch/$s_!W2n2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ce48bff-de98-47a3-8723-c7e1b68cc36e_920x1086.png 848w, https://substackcdn.com/image/fetch/$s_!W2n2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ce48bff-de98-47a3-8723-c7e1b68cc36e_920x1086.png 1272w, https://substackcdn.com/image/fetch/$s_!W2n2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ce48bff-de98-47a3-8723-c7e1b68cc36e_920x1086.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!W2n2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ce48bff-de98-47a3-8723-c7e1b68cc36e_920x1086.png" width="920" height="1086" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3ce48bff-de98-47a3-8723-c7e1b68cc36e_920x1086.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1086,&quot;width&quot;:920,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:91116,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://journal.optivem.com/i/162567501?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ce48bff-de98-47a3-8723-c7e1b68cc36e_920x1086.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!W2n2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ce48bff-de98-47a3-8723-c7e1b68cc36e_920x1086.png 424w, https://substackcdn.com/image/fetch/$s_!W2n2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ce48bff-de98-47a3-8723-c7e1b68cc36e_920x1086.png 848w, https://substackcdn.com/image/fetch/$s_!W2n2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ce48bff-de98-47a3-8723-c7e1b68cc36e_920x1086.png 1272w, https://substackcdn.com/image/fetch/$s_!W2n2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ce48bff-de98-47a3-8723-c7e1b68cc36e_920x1086.png 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></figure></div><p></p><p>Let&#8217;s compare the two approaches:</p><ul><li><p>Inside-out / bottom-up approach with Sociable Unit Tests</p></li><li><p>Outside-in / top-down approach with Sociable Unit Tests</p></li></ul><p>At the end: Which approach do I prefer? Why?</p>
      <p>
          <a href="https://journal.optivem.com/p/session-2025-04-30">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Unit Tests - Live Q&A (Part 1) - Sociable vs Solitary]]></title><description><![CDATA[Watch now | Watch my Live Q&A Session (2nd April) replay where I explain the difference between Sociable and Solitary Unit Tests, and why I prefer Sociable Unit Tests by default]]></description><link>https://journal.optivem.com/p/session-2025-04-02</link><guid isPermaLink="false">https://journal.optivem.com/p/session-2025-04-02</guid><dc:creator><![CDATA[Valentina Jemuović]]></dc:creator><pubDate>Fri, 04 Apr 2025 13:00:17 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/160498708/cb69d0361a5a21ed1b71019f661012b9.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p><em>&#128274; Hello, this is Valentina with a premium issue of the Optivem Journal. I help Engineering Leaders &amp; Senior Software Developers apply <a href="https://journal.optivem.com/p/tdd-in-legacy-code-transformation">TDD in Legacy Code</a>.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://journal.optivem.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://journal.optivem.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p>During our Live Q&amp;A Session, we addressed the question <a href="https://substack.com/chat/824051/post/a880059d-5062-4250-b910-a0a70d330bad/reply/46408ab0-b2e0-421b-a75b-3e6925848c28">posted</a> by Leandro:</p><blockquote><p>What are your learnings, insights, and reflections from your experience and learning process applying TDD? I mean, like the one you mentioned in the first Q&amp;A about sociable and solitary unit testing&#8212;particularly your reflection on initially thinking that solitary unit testing should be the way to go, but then discovering that it makes refactoring very difficult, and learning that sociable unit testing is the better approach.</p></blockquote><h2>Test Coupling: Behavior vs Structure</h2><p>Kent Beck <a href="https://x.com/KentBeck/status/1182714083230904320">wrote</a> the following:</p><blockquote><p>&#8220;Tests should be coupled to the behavior of code and decoupled from the structure of code.&#8221; - Kent Beck</p></blockquote><h2>Tests should be coupled to Behavior</h2><blockquote><p>&#8220;Tests should be coupled to the behavior of code&#8230;&#8221; - Kent Beck</p></blockquote><p>Requirements specify behavior, which is encoded in tests; tests are executable specifications of behavior. </p><p>Hence it is expected that when requirements change, we need to update tests to reflect the changed behavior. This naturally causes the tests to fail because the tests are expressing the changed behavior whereas the code is acting in accordance with the old behavior.</p><h2>Tests should NOT be coupled to Structure</h2><blockquote><p>&#8220;Tests should be&#8230; decoupled from the structure of code.&#8221; - Kent Beck</p></blockquote><p>To implement a certain behavior, we could structure our code in a multiple of ways. We could use one class, or maybe one class split into multiple classes. We could use if-else statements or we could use the Strategy Pattern, etc. Whichever structure we choose, it must satisfy the behavior specified. </p><p>Over time, we&#8217;re also free to make structural changes but without changing the behavior, aka <a href="https://martinfowler.com/bliki/DefinitionOfRefactoring.html">refactoring (Martin Fowler)</a>:</p><blockquote><p>Refactoring (noun): a change made to the internal structure of software to make it easier to understand and cheaper to modify without changing its observable behavior.</p><p>Refactoring (verb): to restructure software by applying a series of refactorings without changing its observable behavior.</p></blockquote><p>Since tests should not be coupled to structure (as already said by Kent Beck) it means that tests should NOT break in response to structural changes.</p><p>This is where many developers make a mistake - they write Unit Tests which are coupled to structure! </p><p>What&#8217;s the solution? What kind of Unit Tests are decoupled from structure?</p>
      <p>
          <a href="https://journal.optivem.com/p/session-2025-04-02">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[BAD Integration Tests]]></title><description><![CDATA[Watch now | Many developers approach integration testing in the wrong way. Watch my Live Q&A Session (19th March) replay where I explain why.]]></description><link>https://journal.optivem.com/p/session-2025-03-19</link><guid isPermaLink="false">https://journal.optivem.com/p/session-2025-03-19</guid><dc:creator><![CDATA[Valentina Jemuović]]></dc:creator><pubDate>Fri, 21 Mar 2025 14:12:19 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/157538288/3cd7ebb1c5ddecbe24d9338647f83bbc.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p><em>&#128274; Hello, this is Valentina with a premium issue of the Optivem Journal. I help Engineering Leaders &amp; Senior Software Developers apply <a href="https://journal.optivem.com/p/tdd-in-legacy-code-transformation">TDD in Legacy Code</a>.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://journal.optivem.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://journal.optivem.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p>During our Live Q&amp;A Session, we answered these <a href="https://substack.com/chat/824051/post/a880059d-5062-4250-b910-a0a70d330bad">questions</a>. <em>Well, I started with the first question, and it expanded to fill the whole session.</em></p><h2>What do most developers think an integration test is?</h2><p>Suppose we have the Ordering Microservice, which communicates with PayPal, SAP and also with the Catalog Microservice, which depends on the Product Microservice. </p><p>The way that most developers will write up the integration test for the Ordering Microservice is:</p><ul><li><p>Spin up real instance of the target Microservice (Ordering Microservice)</p></li><li><p>Spin up all of its transitive dependencies (PayPal, SAP, Catalog Microservice, Product Microservice).</p></li></ul><p><em>This kind of test is like an E2E test&#8230; indeed, we could see an E2E test as an integration test targeting the Frontend, and spanning the whole transitive dependency graph.</em></p><h2>Why is this kind of integration test problematic?</h2><ol><li><p>When this kind of &#8220;integration test&#8220; for Ordering Microservice fails, we cannot isolate the fault. We don&#8217;t know if the problem is in the Ordering Microservice or PayPal or SAP or Catalog Microservice or Product Microservice, or perhaps a combined problem across all of these. All of these teams have to get together, do some tracing &amp; debugging, to find out which team is at fault.</p></li><li><p>It also means that if for whatever reason an external system is unavailable (e.g. SAP test Instance is unavailable) or some dependent microservice is unavailable (e.g. Catalog Microservice is unavailable), then the Ordering Microservice team can NOT run the Ordering Microservice Integration Test, they&#8217;re blocked.</p></li></ol><h2>So what&#8217;s the solution?</h2><p>As I explained in the Live Q&amp;A session, the solution is:</p>
      <p>
          <a href="https://journal.optivem.com/p/session-2025-03-19">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA["Should we write broader or narrower Unit tests in Hexagonal Architecture?" and more...]]></title><description><![CDATA[Watch now | Live Q&A Session (19th Feb) - Video Recording]]></description><link>https://journal.optivem.com/p/session-2025-02-19</link><guid isPermaLink="false">https://journal.optivem.com/p/session-2025-02-19</guid><dc:creator><![CDATA[Valentina Jemuović]]></dc:creator><pubDate>Fri, 21 Feb 2025 07:01:20 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/157538217/f20cf9347d0076bb83dc921f9c5a2cca.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p><em>&#128274; Hello, this is Valentina with a premium issue of the Optivem Journal. I help Engineering Leaders &amp; Senior Software Developers apply <a href="https://journal.optivem.com/p/tdd-in-legacy-code-transformation">TDD in Legacy Code</a>.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://journal.optivem.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://journal.optivem.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p>During our Live Q&amp;A Session, we answered these <a href="https://substack.com/chat/824051/post/03bb18ca-2185-49f0-9ceb-f180ae41ff97?targetReplyId=7fbd2390-bc31-4297-8e85-625f477fe4be">questions</a>:</p><ol><li><p><a href="https://journal.optivem.com/p/session-2025-02-19?timestamp=32">00:32 - </a><strong><a href="https://journal.optivem.com/p/session-2025-02-19?timestamp=32">Fake Agile,</a></strong><a href="https://journal.optivem.com/p/session-2025-02-19?timestamp=32"> </a><strong><a href="https://journal.optivem.com/p/session-2025-02-19?timestamp=32">Estimations &amp; Deadlines</a></strong> (<a href="https://substack.com/chat/824051/post/03bb18ca-2185-49f0-9ceb-f180ae41ff97/reply/ce298e6d-39b4-4718-a02e-8ed54f66c7be">Vivek</a>) - How do we handle sprints, deadlines &amp; estimations? Should estimations be based on past data or should developers do the estimations?</p></li><li><p><a href="https://journal.optivem.com/p/session-2025-02-19?timestamp=593">11:12 - </a><strong><a href="https://journal.optivem.com/p/session-2025-02-19?timestamp=672">Smoke Tests &amp; External Systems with Human Interaction</a></strong> (<a href="https://substack.com/chat/824051/post/03bb18ca-2185-49f0-9ceb-f180ae41ff97/reply/4c3a4a10-6bf1-494f-8b7d-0403b6bcd703">Mansour</a>) How do we handle Smoke Tests whereby we have integration with auth providers (e.g. Google, Microsoft) as well as payment providers (e.g. Stripe) that require SMS code validation?</p></li><li><p><a href="https://journal.optivem.com/p/session-2025-02-19?timestamp=901">15:01 - </a><strong><a href="https://journal.optivem.com/p/session-2025-02-19?timestamp=901">Combinatorial Explosion &amp; Test Types</a></strong> (<a href="https://substack.com/chat/824051/post/03bb18ca-2185-49f0-9ceb-f180ae41ff97/reply/e588416d-681e-4407-b759-5c5437f3e6b6">Mansour</a>) Should we test each combination of auth provider and payment provider, or is there a more reasonable approach?</p></li><li><p><a href="https://journal.optivem.com/p/session-2025-02-19?timestamp=1441">24:01 - </a><strong><a href="https://journal.optivem.com/p/session-2025-02-19?timestamp=1441">Unit Tests - Sociable vs Solitary</a></strong> (<a href="https://substack.com/chat/824051/post/03bb18ca-2185-49f0-9ceb-f180ae41ff97/reply/9de79eff-1798-4927-9db0-f49b1421e0e4">Alessandro</a>) Should we write broader or narrower Unit Tests in Hexagonal Architecture?</p></li><li><p><a href="https://journal.optivem.com/p/session-2025-02-19?timestamp=2287">38:07 - </a><strong><a href="https://journal.optivem.com/p/session-2025-02-19?timestamp=2287">Hexagonal Architecture &amp; Adapter Testing</a></strong> (<a href="https://substack.com/chat/824051/post/03bb18ca-2185-49f0-9ceb-f180ae41ff97/reply/ef3f92d9-f889-4f70-a4fc-9bb147020f66">Alessandro</a>) In Hexagonal Architecture, suppose I have an adapter that reads JSON from a file (it has some logic - checking if path exists). Should we test the adapter in isolation?</p></li><li><p><a href="https://journal.optivem.com/p/session-2025-02-19?timestamp=2534">42:14 - </a><strong><a href="https://journal.optivem.com/p/session-2025-02-19?timestamp=2534">Explaining Testing &amp; Pipelines to Business Executives</a></strong> (<a href="https://substack.com/chat/824051/post/03bb18ca-2185-49f0-9ceb-f180ae41ff97/reply/15d86932-bdfc-49cf-ad8c-23c288d51dbe">Jason</a>) How to explain the importance of pipelines &amp; testing to executives, who see it just as extra money and not worth the investment?</p></li><li><p><a href="https://journal.optivem.com/p/session-2025-02-19?timestamp=3048">50:48 - </a><strong><a href="https://journal.optivem.com/p/session-2025-02-19?timestamp=3048">Balancing Learning &amp; Client Work</a></strong> (<a href="https://substack.com/chat/824051/post/03bb18ca-2185-49f0-9ceb-f180ae41ff97/reply/a563b5ea-d674-4c87-bf3a-78d493f237cc">Jason</a>) How to balance learning by reading versus learning by doing? I spend time to help clients with these things, but don&#8217;t have time to practice myself.</p></li><li><p><a href="https://journal.optivem.com/p/session-2025-02-19?timestamp=3636">1:00:36 - </a><strong><a href="https://journal.optivem.com/p/session-2025-02-19?timestamp=3636">AI Code &amp; Critical Thinking</a></strong> (<a href="https://substack.com/chat/824051/post/03bb18ca-2185-49f0-9ceb-f180ae41ff97/reply/7fbd2390-bc31-4297-8e85-625f477fe4be">Mathieu</a>) How will AI reshape the developer mindset, how to ensure that teams remain critical thinkers rather than passive consumers? </p></li></ol>
      <p>
          <a href="https://journal.optivem.com/p/session-2025-02-19">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[TDD Live Sessions for 2025]]></title><description><![CDATA[Live discussion about TDD - webinars, video calls, Q&A...]]></description><link>https://journal.optivem.com/p/tdd-live-sessions-for-2025</link><guid isPermaLink="false">https://journal.optivem.com/p/tdd-live-sessions-for-2025</guid><dc:creator><![CDATA[Valentina Jemuović]]></dc:creator><pubDate>Mon, 03 Feb 2025 07:01:33 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/156012903/26faf61f74073c336c18b03c4ae0eeb1.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p><em>&#128075; Hello, this is Valentina with the free edition of the Optivem Journal. I help Engineering Leaders &amp; Senior Software Developers apply <a href="https://journal.optivem.com/p/tdd-in-legacy-code-transformation">TDD in Legacy Code</a>.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://journal.optivem.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://journal.optivem.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p>I am excited to announce that I plan to start TDD Live Sessions in 2025! </p><p>Our Premium Members will be able to:</p><ul><li><p>Attend the live sessions</p></li><li><p>Watch the replay of the sessions (as sessions will be recorded)</p></li></ul><div><hr></div><p>Before I launch these video sessions, I have some questions for you&#8230;</p><h2>What&#8217;s your preferred way of learning?</h2><div class="poll-embed" data-attrs="{&quot;id&quot;:264857}" data-component-name="PollToDOM"></div><h2>Which format do you prefer?</h2><p>I&#8217;m planning to start videos (might be webinars or group video calls or something, we&#8217;ll see what you prefer)</p><ul><li><p>Group video call - all participants will be visible on video/audio you're visible via video, and we can have a live face-to-face discussion</p></li><li><p>Webinar &amp; live text chat - I&#8217;ll be visible on video, you can write questions via chat, then I&#8217;ll read out your questions and I&#8217;ll answer it live</p></li><li><p>Both are fine</p></li></ul><p><em>Note: In both cases, the session would be recorded anyway.</em></p><div class="poll-embed" data-attrs="{&quot;id&quot;:264853}" data-component-name="PollToDOM"></div><h2>What time do you prefer for our sessions?</h2><p>I&#8217;m planning that the sessions be 1hr. In that case, which time range would you prefer?</p><div class="poll-embed" data-attrs="{&quot;id&quot;:264859}" data-component-name="PollToDOM"></div><h2>Which topic is currently most relevant for you?</h2><p>Based on your current job, perhaps you&#8217;ve tried some best practices and you have questions about it. Which of these topics is most relevant for you, and where you have questions that you&#8217;d like to ask me?</p><div class="poll-embed" data-attrs="{&quot;id&quot;:264854}" data-component-name="PollToDOM"></div><h2>Which sequence do you prefer?</h2><p>What would you find more useful for us to start with:</p><ul><li><p><strong>Concepts (TDD, Hexagonal, etc.)</strong> - Webinars / group calls (with live chat) that cover key concepts/foundations regarding TDD, Modern Test Pyramid, Hexagonal Architecture, Clean Architecture etc&#8230; they would be much bigger picture than the TDD in Legacy Code series, and we could jump between those topics across sessions</p></li><li><p><strong>TDD in Legacy Code series</strong> - Webinars / group calls (with live chat) whereby we go in the sequence that&#8217;s in the <a href="https://journal.optivem.com/p/tdd-in-legacy-code-outline">TDD in Legacy Code</a> series, we got up to Pipelines, Acceptance Tests &amp; ATDD&#8230;. whereas topics like Hexagonal Architecture will be further down the road&#8230;</p></li></ul><p>Based on this, what do you find more useful?</p><div class="poll-embed" data-attrs="{&quot;id&quot;:266043}" data-component-name="PollToDOM"></div><h2>Do you have any suggestions for me?</h2><p>I&#8217;d like to hear your feedback and comments, and any further ideas/suggestions you have, or any questions.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://journal.optivem.com/p/tdd-live-sessions-for-2025/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://journal.optivem.com/p/tdd-live-sessions-for-2025/comments"><span>Leave a comment</span></a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://journal.optivem.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">TDD &#183; Hexagonal Architecture &#183; Clean Architecture. Join 5K+ subscribers</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>]]></content:encoded></item></channel></rss>