<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="81222" data-post-id="81222">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="StefanHoutzager" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  StefanHoutzager
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>A risc to be aware of while practising tdd is giving up on cohesion while decoupling to get more testable units:<br>
<a href="http://david.heinemeierhansson.com/2014/test-induced-design-damage.html" rel="noopener nofollow ugc">http://david.heinemeierhansson.com/2014/test-induced-design-damage.html</a> (link was already provided in <a href="https://forum.elixirforum.com/t/bdd-tdd-criticized/759" class="inline-onebox" rel="nofollow">BDD / TDD criticized</a>)</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="81222" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/should-i-go-with-tdd-when-the-deadline-is-tight/14121/22">Post #21</a>
	                </div>
	            </div>
              <div id="likers-container-81222" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="81222"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #21"></div>
  </section>
</div>
    <div class="postbit" id="81239" data-post-id="81239">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="dwahyudi" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dwahyudi/120/347_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  dwahyudi
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Some devs especially the ones who do TDD, may think that <strong>tests</strong> are also the <strong>software requirements/specs</strong>. There are rspec and cucumber, their communities are some of the most prominent TDD supporters. I still remember that Michael Hartl originally endorse TDD with Rspec in his astoundingly popular Ruby on Rails book. That book is read by so many Ruby on Rails developers, thus began the era of TDD in Ruby on Rails, until DHH himself denounce it, and Michael Hartl would later erased TDD from his book.</p>
<p>TDD actually tries to break the traditional mindset of old Waterfall methodology, where requirements are defined as a whole in the beginning. Then you do the coding phase. And then you test that code in accordance to what required (in the requirements) in the first place.</p>
<p>TDD was born inside the Agile mindset. There are 4 points of Agile Manifesto:</p>
<ul>
<li>Individuals and interactions over processes and tools</li>
<li>Working software over comprehensive documentation</li>
<li>Customer collaboration over contract negotiation</li>
<li>Responding to change over following a plan</li>
</ul>
<p>Individuals and interactions are embraced by pair programming and customer collaboration. Working software is embraced by TDD. Customer collaboration is embraced by shorter periods but more frequent of continuous delivery, TDD tries to fill in this point as well, especially with something like cucumber. Responding to change is also embraced by TDD with its red green refactor.</p>
<p>Agile also state:  Working software is the primary measure of progress. In order to achieve this, TDD supporter promotes TDD as a help tool, because TDD can helpfully assist devs on ensuring green state on every delivery.</p>
<p>Some extreme TDD practice writing the specs/cucumber during conversation with customers/business people. Some other practice TDD with pair programming, one dev do the spec, the other write the code.</p>
<p>There is also a tool in Rails that will automatically run the tests after the code has been changed to help pair programming quite easier (But Uncle Bob himself disagree with this).</p>
<p>So there you go, the origin of TDD. Sounds reasonable.</p>
<p>Do I practice it? Nope. So many times, for me, some principles from the old Waterfall just works. Plans, write requirements, designs and think ahead before I write the code carefully. Test accordingly to those plans and requirements.</p>
<p>Plans changed? Go back to the first phase of planning before writing another code.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="81239" data-batch-url="/posts/batch_likers">
                        6
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/should-i-go-with-tdd-when-the-deadline-is-tight/14121/23">Post #22</a>
	                </div>
	            </div>
              <div id="likers-container-81239" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="81239"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #22"></div>
  </section>
</div>
    <div class="postbit" id="81241" data-post-id="81241">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="peerreynders" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/peerreynders/120/5826_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  peerreynders
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="StefanHoutzager" data-post="17" data-topic="14121">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/s/cab0a1/48.png" class="avatar"> StefanHoutzager:</div>
<blockquote>
<p>I do not accept to be treated that way.</p>
</blockquote>
</aside>
<p>That is your prerogative. However that doesn’t change the fact that many organizations, especially smaller ones, proclaimed <em>we don’t have time for testing</em> before Extreme Programming coined the term Test-Driven Design. Testing was often delayed to user acceptance testing at which point in time defects were layered upon defects. Fixing defects <em>later</em> usually costs <em>more</em> time and money and that <em>is waste</em>.</p>
<p>People rarely have the discipline to go back to build tests around code they already <em>believe</em> to be working (and verify that the test will in fact detect a defect) - because they could be writing more code for production instead.</p>
<p>So when I read</p>
<blockquote>
<p>time to deliver my project is less as writing test and design code pieces could be time taking.</p>
</blockquote>
<p>What I see:</p>
<ul>
<li>We barely have enough time to develop the product if even <em>everything</em> goes according to plan and <strong>every</strong> decision made is the right one.</li>
<li>We need to start generating “product code” immediately so there is little time “think about it” (i.e. design).</li>
<li>We have no time to write code for tests as we barely have enough time to code the (right) product.</li>
</ul>
<p>which is a recipe for disaster. So yes, I actually believe that the opening post is seeking to legitimize minimizing and potentially completely eliminating <em>any</em> automated testing effort - it’s not just about TDD.</p>
<p>For me TDD is about product code always having automated, executable tests that documents it’s behaviour, creating the opportunity to refactor <em>without hesitation</em>. I personally don’t care if the tests are written first - but they have to be red first. And in my opinion <a href="https://www.destroyallsoftware.com/blog/2014/test-isolation-is-about-avoiding-mocks" rel="noopener nofollow ugc">heavy use of sophisticated mocking libraries is a smell</a>. Your tests are telling you:</p>
<ul>
<li>Your code structure is suboptimal</li>
<li>Your boundary is in the wrong place</li>
<li>Implementation details are leaking through the boundary</li>
<li>The test is in the wrong place</li>
</ul>
<p>In reference to Chad Fowler: “Tests are a design smell” is meant to be a <em>provocative</em> statement towards a community which glorifies 100% test coverage.</p>
<blockquote>
<p>Don’t let your tests be an anchor and maybe it’s more important to monitor the runtime behaviour of your code than it is to test it.</p>
</blockquote>
<p>i.e. it’s about balance:</p>
<ul>
<li>static type checking doesn’t replace testing</li>
<li>tests can’t replace runtime monitoring</li>
<li>some scenarios are too costly to test - <em>provided</em> the manifestation of a defect in production is largely inconsequential, <em>will</em> be quickly noticed and will be quickly addressed and rectified.</li>
</ul>
<p>Also he talks about ‘Code “this big”’, i.e. code that is small enough to be replaced wholesale. After a rewrite, how do you know it is “mostly safe” to deploy the rewritten code to production? The approach strongly suggests the existence of a test harness emulating the real operating environment that can run tests (scenarios) against the rewritten code. I.e. the tests only verify the correct behaviour of the “component” and are isolated via the constraints imposed by the operating environment.</p>
<p>I can understand the cynicism that you project towards certain consultants and consultancies that market TDD/BDD as some kind of easy street cure all (once again focusing more on process than intent) but one shouldn’t “throw the baby out with the bathwater” and more importantly not let it become an excuse to cut back on <em>essential</em> testing activities (not implying that you were suggesting that - but in this topic I think there is a very real danger of that <em>interpretation</em>).</p>
<p>Testing isn’t easy and good testing doesn’t “come naturally”.</p>
<aside class="quote no-group" data-username="Qqwy" data-post="18" data-topic="14121">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/qqwy/48/1349_2.png" class="avatar"> Qqwy:</div>
<blockquote>
<p>are interpreted as a rigid ‘gospel law’</p>
</blockquote>
</aside>
<p>I think it is important to remember that “novices” <a href="https://en.wikipedia.org/wiki/Dreyfus_model_of_skill_acquisition" rel="noopener nofollow ugc">want hard and fast rules</a> because they’re <em>easy</em>. “It depends” while usually appropriate isn’t exactly helpful from a novice’s perspective. Dogma via “Development by Slogan” be it DRY, TDD/BDD, etc. can be a real problem.</p>
<blockquote>
<p>Tests restrict/slow down redesigning of the system which in these cases is vitally important to be able to quickly do.</p>
</blockquote>
<p>This one is a bit of a slippery slope - we’ve all done it. But again context determines the <strong>risks</strong> we are taking in doing so. In some circumstances the risks are low enough but in others designing your tests (scenarios) <em>is</em> designing your software.</p>
<blockquote>
<p>(c. f. gherkin, it is super cool )</p>
</blockquote>
<p>For me the Cucumber thing seems to be moving <em>back</em> into the tool-addiction of <a href="https://en.wikipedia.org/wiki/Rational_ClearCase" rel="noopener nofollow ugc">Rational ClearCase</a>/<a href="https://en.wikipedia.org/wiki/Big_Design_Up_Front" rel="noopener nofollow ugc">Big Design Up Front</a> - so if I was looking for waste I would start right there.</p>
<blockquote>
<p>I would probably <em>not</em> do Test-first development when there are strict deadlines</p>
</blockquote>
<p>Statements like this are <em>dangerous</em> because they will be construed by outsiders and novices that TDD in particular and <em>testing in general</em> is inefficient and expendable/optional. It is intuitive that you will save time now if you don’t create the test <em>right now</em>. It is counterintuitive how much more expensive many defects will get the longer they remain in the codebase.</p>
<aside class="quote no-group" data-username="acrolink" data-post="21" data-topic="14121" data-full="true">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/acrolink/48/8985_2.png" class="avatar"> acrolink:</div>
<blockquote>
<p>I wrote many projects, never a single test.</p>
</blockquote>
</aside>
<p>That is likely a reflection of the size of the projects. The flip side is that while it may feel like overkill to use testing tools on smaller projects, it’s the perfect time to become accustomed with them before you embark on a larger project. Tests are also a feedback mechanism - if it’s hard to write a test then there may be a problem with your design. The worst thing is if you have to introduce testing <em>after the fact</em>, especially if there was no other incentive to decouple in all the right places.</p>
<aside class="quote no-group quote-modified" data-username="StefanHoutzager" data-post="22" data-topic="14121">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/s/cab0a1/48.png" class="avatar"> StefanHoutzager:</div>
<blockquote>
<p>A risc to be aware of while practising tdd is giving up on cohesion while decoupling to get more testable units.</p>
</blockquote>
</aside>
<p>As usual, opinions vary.<br>
<a href="https://martinfowler.com/articles/is-tdd-dead/" rel="noopener nofollow ugc">Is TDD Dead?</a><br>
<a href="https://www.thoughtworks.com/insights/blog/test-induced-design-damage-fallacy-or-reality" rel="noopener nofollow ugc">Test-Induced Design Damage. Fallacy or Reality?</a></p>
<aside class="quote no-group" data-username="dwahyudi" data-post="23" data-topic="14121">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dwahyudi/48/347_2.png" class="avatar"> dwahyudi:</div>
<blockquote>
<p>So many times, for me, some principles from the old Waterfall just works</p>
</blockquote>
</aside>
<p><a href="https://github.com/tpn/pdfs/blob/master/Managing%20the%20Development%20of%20Large%20Software%20Systems%20-%201970%20(waterfall).pdf" rel="noopener nofollow ugc">Managing the Development of Large Software Systems (1970)</a> i.e. “the Waterfall Paper”. Figure 2 shows “ideal waterfall” - figures 3 and 4 acknowledge the realities, i.e. iterations will happen - which is acknowledged 16 years later in <a href="http://csse.usc.edu/TECHRPTS/1988/usccse88-500/usccse88-500.pdf" rel="noopener nofollow ugc">A Spiral Model of Software Development Enhancement (1986)</a>.</p>
<p>Ultimately to “reduce waste” you need to tighten the feedback loops; 1) allow the customer to discover as early as possible what they actually need rather than what they think they want; 2) be notified that you are breaking important things when you are making changes.</p>
<p>Bonus:<br>
<a href="https://youtu.be/S4LzzuMTqjs?t=608" rel="noopener nofollow ugc">GOTO 2017 • Engineering You • Martin Thompson</a><br>
<a href="https://www.peterkrantz.com/2011/software-engineering-in-1968/" rel="noopener nofollow ugc">Quotes from the Nato Software Engineering Conference in 1968</a><br>
<a href="http://homepages.cs.ncl.ac.uk/brian.randell/NATO/nato1968.PDF" rel="noopener nofollow ugc">Proceedings of the Nato Software Engineering conference in 1968</a></p>
<blockquote>
<p>A software system can best be designed if the testing is interlaced with the design instead of being used after the design.<br>
Alan J. Perlis (1968)</p>
</blockquote> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="81241" data-batch-url="/posts/batch_likers">
                        9
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/should-i-go-with-tdd-when-the-deadline-is-tight/14121/24">Post #23</a>
	                </div>
	            </div>
              <div id="likers-container-81241" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="81241"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #23"></div>
  </section>
</div>
    <div class="postbit" id="81242" data-post-id="81242">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="StefanHoutzager" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  StefanHoutzager
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>All fine and dandy. We do not agree on much. Italic, bold or underlined text can be seen as a need to convince. Not everyone likes that and the succesrate is scientifically unproved.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="81242" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/should-i-go-with-tdd-when-the-deadline-is-tight/14121/25">Post #24</a>
	                </div>
	            </div>
              <div id="likers-container-81242" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="81242"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #24"></div>
  </section>
</div>
    <div class="postbit" id="81273" data-post-id="81273">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="dwahyudi" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dwahyudi/120/347_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  dwahyudi
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<blockquote>
<p>allow the customer to discover as early as possible what they actually need rather than what they think they want;</p>
</blockquote>
<p>No matter what methodology the dev apply, this seems that the dev fails to capture customers/business requirements.</p>
<p>We have a ton of tools to do it, from ERD, use case diagram to mock/wireframe/prototype, they can speak as requirements, design and can be used as references for testing. Contract negotiation is sometimes needed, instead of always changing the requirements at the end of the work and making the tickets to be carried over to the next sprint iteration. This what makes developers frustrated and instead further the gap between the developers and the businesses.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="81273" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/should-i-go-with-tdd-when-the-deadline-is-tight/14121/26">Post #25</a>
	                </div>
	            </div>
              <div id="likers-container-81273" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="81273"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #25"></div>
  </section>
</div>
    <div class="postbit" id="81279" data-post-id="81279">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="tallakt" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/tallakt/120/942_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  tallakt
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I have positive experiences with TDD. If you already are familiar with the tools, TDD might well save you time. What I’m seeing is more time spent coding, but drastically less time spent bugfixing after feedback from users.</p>
<p>If your software is deployed in one place and easily updated, this benefit carries less weight. If your software is installed on your user’s machine TDD is probably a timesaver.</p>
<p>In long term TDD is probably also a timesaver, once you start refactoring and redesign, and serves as additional documentation for new developers.</p>
<p>So imho there are not many projects where I would choose not to use TDD.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="81279" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/should-i-go-with-tdd-when-the-deadline-is-tight/14121/27">Post #26</a>
	                </div>
	            </div>
              <div id="likers-container-81279" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="81279"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #26"></div>
  </section>
</div>
    <div class="postbit" id="81281" data-post-id="81281">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="gon782" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  gon782
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Personally I wouldn’t use TDD even in a project without a deadline. I see very little value in driving the design of each and every individual function with a unit test. Testing a boundary like a function that sends a message via kafka is exactly the right level for me and it’s the one that’s the culmination of all of the processing in the system. When that one is correct, we know that the people that depend on that message are getting what they should. The same obviously goes for important API boundaries in libraries as well as REST APIs, etc.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="81281" data-batch-url="/posts/batch_likers">
                        4
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/should-i-go-with-tdd-when-the-deadline-is-tight/14121/28">Post #27</a>
	                </div>
	            </div>
              <div id="likers-container-81281" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="81281"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #27"></div>
  </section>
</div>
    <div class="postbit" id="81357" data-post-id="81357">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="csaintc" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/csaintc/120/9740_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  csaintc
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I would highly recommend you write tests. If you do not, you are just creating technical debt for tomorrow.</p>
<p>This is a personal preference, but I can’t stand working with code that does not have tests.</p>
<p>How is a new programming supposed to come in and work on your code-base if you do not write tests? They will have to learn all of the nuances and apis your brain has come up with. The alternative is: They come in and run your test suite, and begin writing their own tests and GET TO WORK. They can read your unit / integration tests in order to learn how the code works instead of reverse-engineering it from your code.</p>
<p>You know that thing you do where you open up postman, and hit the “send” command and look at the payload value to test if your code is working? You can do that automatically if you write unit and integration tests.</p>
<p>Tests are documentation for how to use apis. Tests save you time by not having to go through the REPL loop for every little thing you want to do.</p>
<p>TDD specifically? That is up to you. you could probably get away with writing integration tests at the boundaries of your api at the very least. But trust me: Woe unto the person who decides writing tests is too slow. It’s not. It’s faster and safer and will lead to better quality code.</p>
<p>Edit: I’ll add that personally I like using TDD, it’s a more natural workflow for me.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="81357" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/should-i-go-with-tdd-when-the-deadline-is-tight/14121/29">Post #28</a>
	                </div>
	            </div>
              <div id="likers-container-81357" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="81357"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #28"></div>
  </section>
</div>
    <div class="postbit" id="81382" data-post-id="81382">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="sztosz" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sztosz/120/1251_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  sztosz
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="csaintc" data-post="29" data-topic="14121">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/csaintc/48/9740_2.png" class="avatar"> csaintc:</div>
<blockquote>
<p>They can read your unit / integration tests in order to learn how the code works instead of reverse-engineering it from your code.</p>
</blockquote>
</aside>
<p>Just one thing, I think that readability of code is more important that having test, be them good or bad, when it comes how easy it’s for new programmer to come in and work on code base. If new programmer have to reverse engineer your code instead of just reading it, it’s a symptom of a serious problem, and having tests or not is not really any solution for a bad codebase.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="81382" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/should-i-go-with-tdd-when-the-deadline-is-tight/14121/30">Post #29</a>
	                </div>
	            </div>
              <div id="likers-container-81382" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="81382"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #29"></div>
  </section>
</div>
    <div class="postbit" id="81410" data-post-id="81410">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="StefanHoutzager" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  StefanHoutzager
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<pre data-code-wrap="elixir"><code class="lang-elixir">A primary cause of complexity is that software vendors uncritically adopt almost any feature that 
users want. Any incompatibility with the original system concept is either ignored or passes 
unrecognized, which renders the design more complicated and its use more cumbersome. 
When a systems power is measured by the number of its features, quantity becomes more
important than quality. Every new release must offer additional features, even if some don't 
add functionality.
</code></pre>
<pre data-code-wrap="elixir"><code class="lang-elixir">Time pressure is probably the foremost reason behind the emergence of bulky software.
The time pressure that designers endure discourages careful planning. It also discourages
improving acceptable solutions; instead, it encourages quickly conceived software additions 
and corrections. Time pressure gradually corrupts an engineers standard of quality and 
perfection. It has a detrimental effect on people as well as products. 
</code></pre>
<pre data-code-wrap="elixir"><code class="lang-elixir">more complex problems inevitably require more complex solutions. But it is not the inherent 
complexity that should concern us; it is the self-inflicted complexity.
</code></pre>
<pre data-code-wrap="elixir"><code class="lang-elixir">Increasingly, people seem to misinterpret complexity as sophistication, which is baffling
-the incomprehensible should cause suspicion rather than admiration.
</code></pre>
<aside class="onebox pdf" data-onebox-src="https://cr.yp.to/bib/1995/wirth.pdf">
  <header class="source">

      <a href="https://cr.yp.to/bib/1995/wirth.pdf" target="_blank" rel="noopener nofollow ugc">cr.yp.to</a>
  </header>

  <article class="onebox-body">
    <a href="https://cr.yp.to/bib/1995/wirth.pdf" target="_blank" rel="noopener nofollow ugc"><span class="pdf-onebox-logo"></span></a>

<h3><a href="https://cr.yp.to/bib/1995/wirth.pdf" target="_blank" rel="noopener nofollow ugc">wirth.pdf</a></h3>


  </article>

  <div class="onebox-metadata">
    
    
  </div>

  <div style="clear: both"></div>
</aside>
 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="81410" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/should-i-go-with-tdd-when-the-deadline-is-tight/14121/31">Post #30</a>
	                </div>
	            </div>
              <div id="likers-container-81410" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="81410"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #30"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/14121/load_more?page=4">Load more posts (4 remaining)</a>
</div></template></turbo-stream>