{"id":549,"date":"2015-12-31T08:50:50","date_gmt":"2015-12-31T08:50:50","guid":{"rendered":"http:\/\/nayrb.org\/~blog\/?p=549"},"modified":"2016-03-28T20:37:40","modified_gmt":"2016-03-28T20:37:40","slug":"agile-basics","status":"publish","type":"post","link":"http:\/\/nayrb.org\/~blog\/2015\/12\/31\/agile-basics\/","title":{"rendered":"Agile Basics"},"content":{"rendered":"<p>Disclaimer: I currently work for a company.  That company does Agile.  From my limited experience, I think it does it well.  I am not talking about that company in any way, shape, or form in this post.<\/p>\n<p>I don&#8217;t recall when I first heard about Agile software development.  I probably heard about it from Slashdot, when I was still reading it during grad. school.<\/p>\n<p>First up, the Manifesto itself:<\/p>\n<p>From: http:\/\/agilemanifesto.org\/<\/p>\n<p>&#8221;<br \/>\n We are uncovering better ways of developing<br \/>\nsoftware by doing it and helping others do it.<br \/>\nThrough this work we have come to value:<\/p>\n<p>Individuals and interactions over processes and tools<br \/>\nWorking software over comprehensive documentation<br \/>\nCustomer collaboration over contract negotiation<br \/>\nResponding to change over following a plan<\/p>\n<p>That is, while there is value in the items on<br \/>\nthe right, we value the items on the left more.<br \/>\n&#8221;<\/p>\n<p>Overall, it feels like a very human approach to software development.  I&#8217;ve always enjoyed speculating about the situations which may have led to rules being formed*.<\/p>\n<p>It also feels like it was written by a group of people who were actually interested in solving problems, perhaps by cutting through Gordian Knots of rigid process and planning.<\/p>\n<p>Their conclusion was that problems will occur, things will change, and you want your process to accommodate that as much as possible, to enable and encourage people to talk about these earlier and more effectively.  More of a &#8216;getting to yes&#8217;, rather than rear-covering or posturing.<\/p>\n<p>Now, they further broke down the above four statements into 12 principles:<\/p>\n<p>http:\/\/agilemanifesto.org\/principles.html<\/p>\n<p>1) &#8220;Our highest priority is to satisfy the customer<br \/>\nthrough early and continuous delivery<br \/>\nof valuable software.&#8221;<\/p>\n<p>This one seems pretty self-evident, but there are a surprising number of people who have job descriptions at odds or orthogonal to this, especially as organizations get larger.<\/p>\n<p>2) &#8220;Welcome changing requirements, even late in<br \/>\ndevelopment. Agile processes harness change for<br \/>\nthe customer&#8217;s competitive advantage.&#8221;<\/p>\n<p>This might be the toughest (it was for me, and I consider myself good at this), as humans are naturally lazy and resistant to change.<\/p>\n<p><a href=\"https:\/\/ronnyeo.wordpress.com\/2008\/08\/06\/evolutionary-psychology-laziness\/\">Evolutionary Psychology :&nbsp;Laziness<\/a><\/p>\n<p>I wonder if this can only be overcome through experience, by knowing how much more pain will happen if a particular shortcut is taken or some important stakeholder is ignored.  (Even knowing that someone should be listened to instead of letting your lazy brain edit them out can be difficult.)  Either way, a good argument for having at least one person (that you listen to!) with experience on the team.<\/p>\n<p>But if you&#8217;re having requirements changing too often, your stories are likely not ready before you start, or they are too large, leading you to:<\/p>\n<p>3) &#8220;Deliver working software frequently, from a<br \/>\ncouple of weeks to a couple of months, with a<br \/>\npreference to the shorter timescale.&#8221;<\/p>\n<p>&#8216;Fail early, fail often&#8217; goes the quote.  Coupled with 2), it becomes much more difficult to be working on the wrong thing when you&#8217;re allowing for updated requirements every time you start a new short story**.<\/p>\n<p>4) &#8220;Business people and developers must work<br \/>\ntogether daily throughout the project.&#8221;<\/p>\n<p>I feel like the people who put this list together had experienced a lot of communication problems where they worked.  This one is really helpful.  There are few things more annoying than being ready to work on something but not being able to reach the person who needs to make the decision.<\/p>\n<p>5) &#8220;Build projects around motivated individuals.<br \/>\nGive them the environment and support they need,<br \/>\nand trust them to get the job done.&#8221;<\/p>\n<p>From the people I&#8217;ve talked to, this is every programmer&#8217;s dream.  All the best working environments I&#8217;ve been in have been like this.<\/p>\n<p>6) &#8220;The most efficient and effective method of<br \/>\nconveying information to and within a development<br \/>\nteam is face-to-face conversation.&#8221;<\/p>\n<p>Yes.  And it drops off considerably, even to &#8216;face-to-face&#8217; Skype\/<\/p>\n<p>7) &#8220;Working software is the primary measure of progress.&#8221;<\/p>\n<p>Many people have different measures of progress, leading to organizational misalignment.<\/p>\n<p>8) &#8220;Agile processes promote sustainable development.<br \/>\nThe sponsors, developers, and users should be able<br \/>\nto maintain a constant pace indefinitely.&#8221;<\/p>\n<p>As much fun as &#8216;feast and famine&#8217; is, you&#8217;re probably not doing your best work souped up on adrenaline and coffee.  (Or maybe you are.  If so, you should take some time off between binges.)<\/p>\n<p>9) &#8220;Continuous attention to technical excellence<br \/>\nand good design enhances agility.&#8221;<\/p>\n<p>&#8216;We put brakes on the car so that it can go faster.&#8217;  &#8216;Legacy code is defined as any code with inadequate test coverage.&#8217;  All the time you spend hesitating*** because you&#8217;re worried about breaking old crappy code is time you&#8217;re not building features or refactoring old crappy code.<\/p>\n<p>10) &#8220;Simplicity&#8211;the art of maximizing the amount<br \/>\nof work not done&#8211;is essential.&#8221;<\/p>\n<p>Think Apple.  Think Oblivion when they decided to voice all of the dialog, and all the streamlining that inspired\/required.  Think about that super-expert programmer you know who can tell you why every single line of code they wrote is there, and also why everything not there is not there.<\/p>\n<p>11) &#8220;The best architectures, requirements, and designs<br \/>\nemerge from self-organizing teams.&#8221;<\/p>\n<p>Ask the people who know the most about something to make the decisions****.<\/p>\n<p>12) &#8220;At regular intervals, the team reflects on how<br \/>\nto become more effective, then tunes and adjusts<br \/>\nits behavior accordingly. &#8221;<\/p>\n<p>Continuous improvement.  Read &#8216;The Goal*****&#8217;.  Really.  It will improve your life.  Also retrospectives.<\/p>\n<p>*Similar to reading Wikipedia and trying to figure out the actual events behind the dry descriptions&#8230;<\/p>\n<p>**I still remember the day when I felt I had &#8216;graduated to short stories&#8217;, as they tend to pack more large ideas per page.  Longer novels tend to be more meditative\/escapatory?<\/p>\n<p>***And working around crappy code&#8230;<\/p>\n<p>****I&#8217;m currently most comfortable with some mix of Scrum and Kanban.  They have a specific separation of powers between the team (handles estimation) and the product owner (handles prioritization).  To me, this seems totally reasonable, but re-reading the manifesto above, there are many levels of Agile actualization above that.  (Think Valve.)  (Also, the product owner is part of the team, just with a specific role to play in addition to the general team tasks.)<\/p>\n<p>*****https:\/\/en.wikipedia.org\/wiki\/The_Goal_%28novel%29  My favourite business book.  Told in a novel format.  Some of the story has dated references (before most of feminism), but is still very useful.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Disclaimer: I currently work for a company. That company does Agile. From my limited experience, I think it does it well. I am not talking about that company in any way, shape, or form in this post. I don&#8217;t recall when I first heard about Agile software development. I probably heard about it from Slashdot, &hellip; <a href=\"http:\/\/nayrb.org\/~blog\/2015\/12\/31\/agile-basics\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Agile Basics<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[33,17,8],"tags":[],"_links":{"self":[{"href":"http:\/\/nayrb.org\/~blog\/wp-json\/wp\/v2\/posts\/549"}],"collection":[{"href":"http:\/\/nayrb.org\/~blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/nayrb.org\/~blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/nayrb.org\/~blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/nayrb.org\/~blog\/wp-json\/wp\/v2\/comments?post=549"}],"version-history":[{"count":6,"href":"http:\/\/nayrb.org\/~blog\/wp-json\/wp\/v2\/posts\/549\/revisions"}],"predecessor-version":[{"id":608,"href":"http:\/\/nayrb.org\/~blog\/wp-json\/wp\/v2\/posts\/549\/revisions\/608"}],"wp:attachment":[{"href":"http:\/\/nayrb.org\/~blog\/wp-json\/wp\/v2\/media?parent=549"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/nayrb.org\/~blog\/wp-json\/wp\/v2\/categories?post=549"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/nayrb.org\/~blog\/wp-json\/wp\/v2\/tags?post=549"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}