<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Eljay-Adobe</title>
    <description>The latest articles on DEV Community by Eljay-Adobe (@eljayadobe).</description>
    <link>https://dev.to/eljayadobe</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F16481%2F7c9b8fa1-9004-4b63-94e9-c282f821bf24.png</url>
      <title>DEV Community: Eljay-Adobe</title>
      <link>https://dev.to/eljayadobe</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/eljayadobe"/>
    <language>en</language>
    <item>
      <title>The TDD Test</title>
      <dc:creator>Eljay-Adobe</dc:creator>
      <pubDate>Thu, 04 Oct 2018 15:27:23 +0000</pubDate>
      <link>https://dev.to/eljayadobe/the-tdd-test-56bh</link>
      <guid>https://dev.to/eljayadobe/the-tdd-test-56bh</guid>
      <description>&lt;h1&gt;
  
  
  The TDD Test
&lt;/h1&gt;

&lt;p&gt;I have had some experience with co-workers who were doing TDD incorrectly.&lt;/p&gt;

&lt;p&gt;The benefits of TDD is that it puts pressure on the developer to use employ several of the SOLID principles, to design for testability, high cohesion, low coupling, and the immediate elimination of technical debt by refactoring before checking in.&lt;/p&gt;

&lt;p&gt;In order to underscore the TDD value proposition, I have found that adding &lt;em&gt;one simple little step&lt;/em&gt; to the TDD process helps educate developers on how to do TDD correctly.&lt;/p&gt;

&lt;p&gt;If the developer is doing TDD correctly, then the additional step won't devalue the process.&lt;/p&gt;

&lt;p&gt;I call this &lt;strong&gt;The TDD Test&lt;/strong&gt;.  It tests the TDD process.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;add a test&lt;/li&gt;
&lt;li&gt;run the test - &lt;em&gt;it should fail&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;write the code&lt;/li&gt;
&lt;li&gt;run the test - &lt;em&gt;it should pass&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;refactor the code - &lt;em&gt;eliminate newly incurred technical debt&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;run the test - &lt;em&gt;it should pass&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;check-in&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;delete the test&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;check-in&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Sure, this loses the residual value of the test.  But keep in mind that 99% of the value proposition of TDD is how it guides design-in-the-small.&lt;/p&gt;

&lt;p&gt;(The residual value of the test can be recovered from source control.  Which is why step 7 is before step 8.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The TDD Test&lt;/strong&gt; does not have to done in perpetuity.  Just until everyone understands how TDD works.&lt;/p&gt;

&lt;h2&gt;
  
  
  James Coplien
&lt;/h2&gt;

&lt;p&gt;At the extreme end of the unit testing spectrum is James Coplien.  In his “&lt;a href="https://rbcs-us.com/documents/Why-Most-Unit-Testing-is-Waste.pdf"&gt;Why Most Unit Testing is Waste&lt;/a&gt;” essay, he advocates keeping tests for up to a year, and then getting rid of them.&lt;/p&gt;

&lt;p&gt;I do not share Coplien’s opinion, however he makes an interesting case.  Depending on your software, what he advocates may be applicable to your situation.  I do not believe his advice is applicable in the kinds of software I create.&lt;/p&gt;

&lt;p&gt;Coplien is using &lt;em&gt;waste&lt;/em&gt; in the sense of Lean’s &lt;a href="https://en.wikipedia.org/wiki/Muda_(Japanese_term)"&gt;Muda&lt;/a&gt;.  He is &lt;em&gt;not&lt;/em&gt; using it in the sense of “testing is a waste of time”.&lt;/p&gt;

&lt;p&gt;I mention Coplien’s article because &lt;strong&gt;The TDD Test&lt;/strong&gt; was inspired by his paper.  &lt;strong&gt;The TDD Test&lt;/strong&gt; just changes his “...up to a year...” part into “...up to a minute...”.&lt;/p&gt;

</description>
      <category>tdd</category>
    </item>
    <item>
      <title>Book Recommendations</title>
      <dc:creator>Eljay-Adobe</dc:creator>
      <pubDate>Mon, 06 Nov 2017 13:16:39 +0000</pubDate>
      <link>https://dev.to/eljayadobe/book-recommendations-55n</link>
      <guid>https://dev.to/eljayadobe/book-recommendations-55n</guid>
      <description>&lt;p&gt;Here are some books that I highly recommend.&lt;/p&gt;

&lt;p&gt;For C++, there is the curated list on StackOverflow:  &lt;a href="https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list"&gt;The Definitive C++ Book Guide and List&lt;/a&gt;.  Nothing I could add to that list, or take away.&lt;/p&gt;

&lt;p&gt;For JavaScript (ES6), I've been out of the loop too long.  I suspect books like &lt;a href="http://eloquentjavascript.net/"&gt;Eloquent JavaScript&lt;/a&gt; and &lt;a href="http://shop.oreilly.com/product/9780596517748.do"&gt;JavaScript: The Good Parts&lt;/a&gt; are out of date, but I found them to be a great help back in the day.&lt;/p&gt;

&lt;p&gt;For F#, I've read about a dozen books on the topic.  Only &lt;em&gt;one&lt;/em&gt; book have I found to be useful so far:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.amazon.com/dp/1593275528"&gt;The Book of F#&lt;/a&gt;, by Dave Fancher, a fantastically fabulous book&lt;/li&gt;
&lt;li&gt;disclaimer: I haven't read "Expert F# 4.0" yet, which I hope and expect will be good, even if the reviews call it "preachy"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For agile, I've really enjoyed these books:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.scrum.org/resources/scrum-guide"&gt;The Scrum Guide&lt;/a&gt;, by Schwaber and Sutherland, is nice, very short, definitive, and free (PDF)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.mountaingoatsoftware.com/books/succeeding-with-agile-software-development-using-scrum"&gt;Succeeding With Agile&lt;/a&gt;, by Mike Cohn, is a "must have" book for agile&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.101ways.com/how-to-implement-scrum-in-10-easy-steps/"&gt;How To Implement Scrum in 10 Easy Steps&lt;/a&gt;, by Kelly Waters, is an online &lt;em&gt;article&lt;/em&gt;, but I'd be remiss if I didn't call it out here.  Scrum really is that simple... &lt;em&gt;in theory&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For general development, I have these heavily dog-eared books on my top shelf:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.amazon.com/dp/1570740550"&gt;Writing Solid Code&lt;/a&gt;, by Steve Maguire&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.amazon.com/dp/0735619670"&gt;Code Complete&lt;/a&gt;, by Steve McConnell&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.amazon.com/dp/0132350882"&gt;Clean Code&lt;/a&gt;, by Robert C. Martin&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.amazon.com/dp/0201633612"&gt;Design Patterns&lt;/a&gt;, by Gamma, Helm, Johnson, and Vlissides&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.amazon.com/dp/0471197130"&gt;AntiPatterns&lt;/a&gt;, by Brown, Malveau, McCormick, and Mowbray&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On my short queue of books to read that have been highly recommended to me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.amazon.com/dp/0201485672"&gt;Refactoring&lt;/a&gt;, by Martin Fowler, et al&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.amazon.com/dp/020161622X"&gt;The Pragmatic Programmer&lt;/a&gt;, by Hunt and Thomas&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.amazon.com/dp/0321503627"&gt;Growing Object-Oriented Software, Guided by Tests&lt;/a&gt;, by Freeman and Pryce&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What are some book recommendations you would like to share?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>programming</category>
    </item>
    <item>
      <title>Scrum is Easy</title>
      <dc:creator>Eljay-Adobe</dc:creator>
      <pubDate>Tue, 12 Sep 2017 14:51:26 +0000</pubDate>
      <link>https://dev.to/eljayadobe/scrum-is-easy</link>
      <guid>https://dev.to/eljayadobe/scrum-is-easy</guid>
      <description>&lt;h1&gt;
  
  
  Scrum
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Lightweight Management Process
&lt;/h2&gt;

&lt;p&gt;Scrum is a lightweight management process.  It was adapted for software development from "The New New Product Development Game", which described The Toyota Production System.&lt;/p&gt;

&lt;p&gt;Scrum is typically associated with software development, but some companies have taken it further and claim that Scrum works everywhere.&lt;/p&gt;

&lt;p&gt;The reason that Scrum can work beyond software development is because Scrum is a lightweight management process.  Scrum itself does not embody agile values, principles, and technical engineering practices.&lt;/p&gt;

&lt;p&gt;That needs to be emphasized:  Scrum is not agile.  Scrum is lightweight.&lt;/p&gt;

&lt;p&gt;Because Scrum is a lightweight management process, it can be very complimentary to agile software development.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.scrum.org/resources/scrum-guide"&gt;The Scrum Guide&lt;/a&gt; (it's free!) by Schwaber and Sutherland fulfills the management aspects for a project, but delegates the agile engineering practices to the development team.&lt;/p&gt;

&lt;p&gt;Scrum as a lightweight management process consists of roles, events, and artifacts.&lt;/p&gt;

&lt;p&gt;Roles are:  scrum master, product owner, and the development team.&lt;/p&gt;

&lt;p&gt;Events are:  planning product backlog, dev team planning sprint backlog, daily scrum stand-up, sprint review, sprint retrospective.&lt;/p&gt;

&lt;p&gt;Artifacts are:  product backlog, sprint backlog, &lt;em&gt;increment&lt;/em&gt; of the business value added to the product at the end of the sprint, and sprint burn-down chart.&lt;/p&gt;

&lt;h2&gt;
  
  
  Not Scrum
&lt;/h2&gt;

&lt;p&gt;Sometimes Scrum goes awry.  Where do things go awry?&lt;/p&gt;

&lt;p&gt;Scrum becomes "not Scrum" when the Scrum process isn't followed.  SHOCKING!&lt;/p&gt;

&lt;p&gt;In my experience, these are the critical parts that are not followed, which makes Scrum not work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fancy, expensive Scrum tools - Kelly Waters (see link below) explains why you want basic and effective tools for Scrum, rather than frilly Scrum software that is efficient but harmful to &lt;em&gt;individuals and interactions&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;no full-time scrum master - without a scrum master to manage the process, the process will be adrift&lt;/li&gt;
&lt;li&gt;scrum master is not considered a management position - scrum master does not manage &lt;em&gt;people&lt;/em&gt;, the scrum master manages &lt;em&gt;process&lt;/em&gt; ... and that is a management position&lt;/li&gt;
&lt;li&gt;lack of training for the product owner, the scrum master, and/or the development team - the new process may be simple, but it ain't easy; sure-est way to kill Scrum is to tell everyone "do Scrum" but not train them&lt;/li&gt;
&lt;li&gt;no single individual as the designated product owner - too many bosses making product decisions results in paralysis&lt;/li&gt;
&lt;li&gt;development team is not empowered to make technical decisions - if the development team cannot decide which version control system to use, which programming language to use, which agile engineering practices for the team to embrace, where the curly braces go, tabs or spaces, yada yada yada&lt;/li&gt;
&lt;li&gt;facilities are not set up such that they facilitate team dynamic - the development team needs to be focused on the project, and facilities is the EASIEST thing to set up when adopting Scrum, yet some companies neglect this simple but vital step for the team to have a war room, to have cubes or offices that have a shared common space.  (Teams that are not co-located will face additional challenges, but not impossible.)&lt;/li&gt;
&lt;li&gt;corporate antibodies undermine Scrum as a management process - here's where the scrum master &lt;em&gt;and management support&lt;/em&gt; can grapple with other departments who are disrupted by the change in management process to Scrum.  And without a full-time scrum master to wrestle with these issues, the corporate antibodies will force the project to fallback to previous management process practices.&lt;/li&gt;
&lt;li&gt;development team gravity, organ rejection, backsliding into the comfort zone of old ways&lt;/li&gt;
&lt;li&gt;project management office (PMO) at odds with Scrum as a lightweight management process - the scrum master, once again, should act as a liaison with PMO.  But if there is no full-time scrum master, or if the scrum master is not yet experienced and is learning the ropes, making an adversary of PMO is bad, and PMO should be an ally.&lt;/li&gt;
&lt;li&gt;lack of corporate commitment - if the &lt;em&gt;company&lt;/em&gt; is not committed to supporting, embracing, and transitioning to Scrum, then it is doomed; corporate antibodies will flay it alive&lt;/li&gt;
&lt;li&gt;Scrum is flexible! - some people hear the message that Scrum is flexible, &lt;em&gt;and you can do whatever you want&lt;/em&gt;.  So what they do is torpedo the Scrum management process from the onset.  The flexibility in Scrum does &lt;strong&gt;not&lt;/strong&gt; give license to not do Scrum under the pretext of doing Scrum.  The flexibility is in it being a lightweight management process, and that the development team is empowered to make technical decisions and employ agile engineering practices.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Who is PMO, anyway?
&lt;/h2&gt;

&lt;p&gt;For larger corporations, PMO acts as the monitor for all projects in the company on behalf of the executives.&lt;/p&gt;

&lt;p&gt;For a smaller company, that responsibility may be on the shoulders of a single executive.  The CEO, the president, or a VP.&lt;/p&gt;

&lt;p&gt;Their ultimate responsibility is to decide which projects are funded, how well those projects are doing (green light, yellow light, red light), if a project is in trouble, and if a project should have additional staff, destaffed, or cancelled.&lt;/p&gt;

&lt;p&gt;They inform the executives, who then make the hard decisions.&lt;/p&gt;

&lt;p&gt;So having PMO on board with a project is critical for the success of the project, regardless if Scrum or some other management process is being used.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where to start?
&lt;/h2&gt;

&lt;p&gt;Read &lt;a href="https://www.scrum.org/resources/scrum-guide"&gt;The Scrum Guide&lt;/a&gt; by Schwaber and Sutherland, the creators of Scrum.  It's short: 16 pages.  It's free.&lt;/p&gt;

&lt;p&gt;Read &lt;a href="http://www.101ways.com/how-to-implement-scrum-in-10-easy-steps/"&gt;How To Implement Scrum in 10 Easy Steps&lt;/a&gt; by Kelly Waters.  It's goes step by step on how to get started with Scrum.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.scrum.org/resources/scrum-guide"&gt;The Scrum Guide&lt;/a&gt; by Schwaber and Sutherland, the creators of Scrum&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.101ways.com/how-to-implement-scrum-in-10-easy-steps/"&gt;How To Implement Scrum in 10 Easy Steps&lt;/a&gt; by Kelly Waters&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.amazon.com/dp/0321579364"&gt;Succeeding with Agile&lt;/a&gt; excellent book by Mike Cohn&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://eljay.neocities.org/FadAgile.html"&gt;Fad Agile&lt;/a&gt; by Eljay (me!)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>agile</category>
      <category>scrum</category>
      <category>management</category>
    </item>
    <item>
      <title>Hi, I'm Eljay-Adobe</title>
      <dc:creator>Eljay-Adobe</dc:creator>
      <pubDate>Thu, 13 Apr 2017 16:32:25 +0000</pubDate>
      <link>https://dev.to/eljayadobe/hi-im-eljay-adobe</link>
      <guid>https://dev.to/eljayadobe/hi-im-eljay-adobe</guid>
      <description>&lt;p&gt;I have been coding for 39 years.&lt;/p&gt;

&lt;p&gt;You can find me on GitHub as &lt;a href="https://github.com/Eljay-Adobe" rel="noopener noreferrer"&gt;Eljay-Adobe&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I live in Minnesota.&lt;/p&gt;

&lt;p&gt;I work for Adobe Systems Incorporated.&lt;/p&gt;

&lt;p&gt;I mostly program in this language: C++.  But have programmed in many, many others.  I like Python and Lua.  I use Vim.&lt;/p&gt;

&lt;p&gt;I am currently learning more about Modern C++ (C++11, 14, 17), Swift, and F#.&lt;/p&gt;

&lt;p&gt;Nice to meet you.&lt;/p&gt;

</description>
      <category>introduction</category>
    </item>
  </channel>
</rss>
