<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Engineering-Practice on Coderrob</title><link>https://coderrob.com/tags/engineering-practice/</link><description>Recent content in Engineering-Practice on Coderrob</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sat, 22 Feb 2025 17:04:43 -0600</lastBuildDate><atom:link href="https://coderrob.com/tags/engineering-practice/index.xml" rel="self" type="application/rss+xml"/><item><title>Rethinking Enterprise Software Development: Embracing Automation Over Outdated Hierarchies</title><link>https://coderrob.com/posts/rethinking-enterprise-software-development-embracing-automation-over-outdated-hierarchies/</link><pubDate>Sat, 22 Feb 2025 17:04:43 -0600</pubDate><guid>https://coderrob.com/posts/rethinking-enterprise-software-development-embracing-automation-over-outdated-hierarchies/</guid><description>&lt;p>For too long, legacy enterprise development has been constrained by a top-down model that stifles innovation and impedes progress. The conventional emphasis on individual developers paired with rigid managerial oversight is not only inefficient; it is counterproductive in today’s fast-paced, ever-evolving tech landscape.&lt;/p>
&lt;p>Drawing from my experience building automated code-review agents for enterprise applications, I have witnessed firsthand that current corporate development structures are fundamentally flawed. Rather than investing in isolated training programs or centralizing AI initiatives within a single division, the future lies in leveraging automation to transform enterprise software development into an agile, collaborative, and efficient process.&lt;/p></description></item><item><title>Unit Testing: Rules and Best Practices</title><link>https://coderrob.com/posts/unit-testing-rules-and-best-practices/</link><pubDate>Fri, 21 Feb 2025 22:37:19 -0600</pubDate><guid>https://coderrob.com/posts/unit-testing-rules-and-best-practices/</guid><description>&lt;h2 id="rules-to-follow">&lt;strong>Rules to Follow&lt;/strong>&lt;/h2>
&lt;h3 id="first-principles">&lt;strong>FIRST Principles&lt;/strong>&lt;/h3>
&lt;ol>
&lt;li>&lt;strong>Fast&lt;/strong> – Tests should run quickly to allow frequent execution.&lt;/li>
&lt;li>&lt;strong>Independent&lt;/strong> – Tests must not depend on each other.&lt;/li>
&lt;li>&lt;strong>Repeatable&lt;/strong> – A test should always yield the same result.&lt;/li>
&lt;li>&lt;strong>Self-Checking&lt;/strong> – Tests should automatically verify correctness.&lt;/li>
&lt;li>&lt;strong>Timely&lt;/strong> – Write tests &lt;strong>before&lt;/strong> or alongside implementation.&lt;/li>
&lt;/ol>
&lt;h3 id="coverage--quality">&lt;strong>Coverage &amp;amp; Quality&lt;/strong>&lt;/h3>
&lt;ul>
&lt;li>Target &lt;strong>85%+ meaningful test coverage&lt;/strong>, prioritizing critical paths.&lt;/li>
&lt;li>Cover &lt;strong>happy paths, edge cases, and failure scenarios&lt;/strong>.&lt;/li>
&lt;li>&lt;strong>Async tests should be properly awaited or return promises&lt;/strong>.&lt;/li>
&lt;li>&lt;strong>Mock dependencies&lt;/strong> to isolate the unit under test.&lt;/li>
&lt;li>Ensure &lt;strong>all branches and conditions are tested&lt;/strong>.&lt;/li>
&lt;/ul>
&lt;h3 id="self-describing-tests">&lt;strong>Self-Describing Tests&lt;/strong>&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>Descriptive Naming&lt;/strong> – &lt;code>it('should return X when Y happens')&lt;/code>.&lt;/li>
&lt;li>&lt;strong>Truth Tables (&lt;code>it.each&lt;/code>)&lt;/strong> – Cover multiple cases in one statement.&lt;/li>
&lt;li>&lt;strong>Mock Naming Convention&lt;/strong> – Differentiate real and mock objects.&lt;/li>
&lt;li>&lt;strong>&lt;code>describe&lt;/code> Blocks&lt;/strong> – Group related tests logically.&lt;/li>
&lt;li>&lt;strong>Named Constants&lt;/strong> – Avoid magic values in test cases.&lt;/li>
&lt;/ul>
&lt;h3 id="see-pattern-made-this-one-up">&lt;strong>SEE Pattern (made this one up)&lt;/strong>&lt;/h3>
&lt;ol>
&lt;li>&lt;strong>Setup&lt;/strong> – Initialize inputs and dependencies.&lt;/li>
&lt;li>&lt;strong>Execute&lt;/strong> – Run the function under test.&lt;/li>
&lt;li>&lt;strong>Expect&lt;/strong> – Assert the expected outcome.&lt;/li>
&lt;/ol>
&lt;blockquote>
&lt;p>NOTE: I call it &amp;ldquo;SEE&amp;rdquo; because you &lt;strong>see immediately what it did or didn&amp;rsquo;t do&lt;/strong>.&lt;/p></description></item><item><title>Not all dots are created equal... especially in your Gmail address</title><link>https://coderrob.com/posts/not-all-dots-are-created-equal-especially-in-your-gmail-adress/</link><pubDate>Tue, 03 Sep 2024 21:26:01 -0500</pubDate><guid>https://coderrob.com/posts/not-all-dots-are-created-equal-especially-in-your-gmail-adress/</guid><description>&lt;p>Here’s a quick heads-up that might save you some &lt;em>serious headaches&lt;/em>.&lt;/p>
&lt;p>&lt;strong>Gmail doesn’t treat dots in email addresses as unique&lt;/strong>. Whether your address is &lt;code>john.smith@gmail.com&lt;/code> or &lt;code>jo.hn.smith@gmail.com&lt;/code>, if it has a dot &lt;strong>a copy of ALL your email gets sent to &lt;code>johnsmith@gmail.com&lt;/code> too&lt;/strong>.&lt;/p>
&lt;p>A &lt;em>very close family member&lt;/em> learned this the hard way when their identity was stolen. Someone registered a non-dotted version of their email, and it went unnoticed for a while. The result? Credit card fraud&amp;hellip;&lt;/p></description></item><item><title>Clean Up Your Conditionals: Refactoring If-Else with Switch Statements</title><link>https://coderrob.com/posts/clean-up-your-conditionals-by-refactoring-if-else-with-switch-statements/</link><pubDate>Sun, 18 Aug 2024 13:17:48 -0500</pubDate><guid>https://coderrob.com/posts/clean-up-your-conditionals-by-refactoring-if-else-with-switch-statements/</guid><description>&lt;p>If you&amp;rsquo;re like me, you&amp;rsquo;ve probably dealt with your fair share of long, messy deeply nested &lt;code>if-else&lt;/code> chains. They can get out of hand pretty fast, right?&lt;/p>
&lt;p>One minute you&amp;rsquo;re making a simple decision, the next you&amp;rsquo;re wading through a maze of conditions and deeply nested logic. But guess what?&lt;/p>
&lt;p>There&amp;rsquo;s a trick that can help clean this up: using &lt;code>switch&lt;/code> and &lt;code>switch(true)&lt;/code>.&lt;/p>
&lt;p>In this post, we&amp;rsquo;ll take a closer look at how you can use &lt;code>switch&lt;/code> statements to break free from the chaos and make your code more readable, more maintainable, and without overloading to your brain juggling the contextual outcomes of each branching statement.&lt;/p></description></item><item><title>Technology Choice Matters</title><link>https://coderrob.com/posts/technology-choice-matters/</link><pubDate>Thu, 25 Aug 2022 11:34:00 -0500</pubDate><guid>https://coderrob.com/posts/technology-choice-matters/</guid><description>&lt;p>Developers need consistency in the tools they use, as well as a clear understanding of what is expected of them to be productive and successful in their roles. These tools not only impact productivity but also play a pivotal role in shaping the professional and personal well-being of developers.&lt;/p>
&lt;p>As team sizes grow, restructures occur, or new team members are added, it becomes crucial to have a consistent set of tools and technologies that everyone is expected to use.&lt;/p></description></item><item><title>Contributing to the .Net Runtime</title><link>https://coderrob.com/posts/contributing-to-the-dotnet-runtime/</link><pubDate>Fri, 16 Apr 2021 18:25:55 -0500</pubDate><guid>https://coderrob.com/posts/contributing-to-the-dotnet-runtime/</guid><description>&lt;h3 id="my-first-net-contribution">My First .Net Contribution&lt;/h3>
&lt;p>Today a feature enhancement I proposed and implemented was merged into the .Net runtime main branch for .Net 6 release!&lt;/p>
&lt;h4 id="the-background">The Background&lt;/h4>
&lt;p>At the time I was working for a company called, &lt;code>WatchGuard Video&lt;/code>. WatchGuard built body cameras and the evidence management software for them. I was hired originally to come in to help launch &lt;a href="https://support.watchguardvideo.com/hc/en-us/categories/115001623947-Evidence-Library-EL">Evidence Library&lt;/a>.&lt;/p>
&lt;p>The site, when I started, was several independent SPA sites in a mono-repository. Myself and the other engineers were working on upgrading ASP.Net Framework to .Net Core. One of the biggest concerns, beyond authentication, was configuration.&lt;/p></description></item><item><title>Being a Programmer</title><link>https://coderrob.com/posts/being-a-programmer/</link><pubDate>Wed, 30 Oct 2013 21:00:00 -0500</pubDate><guid>https://coderrob.com/posts/being-a-programmer/</guid><description>&lt;p>&lt;strong>What does that even mean?&lt;/strong>&lt;/p>
&lt;p>I love creating something that didn&amp;rsquo;t exist before, and then &amp;lsquo;bam&amp;rsquo;—it&amp;rsquo;s a thing that others can use. It&amp;rsquo;s thrilling if it&amp;rsquo;s something people need to use, and the best feeling by far if it&amp;rsquo;s something someone genuinely wants to use.&lt;/p>
&lt;p>At least until someone turns the power off. Then it all becomes a tiny magnetic dance frozen in place or microscopic scratches on a disk. It&amp;rsquo;s peculiar to think of software as both existing and not existing simultaneously.&lt;/p></description></item></channel></rss>