{"id":11392,"date":"2013-01-14T06:00:45","date_gmt":"2013-01-14T13:00:45","guid":{"rendered":"https:\/\/svapm.org\/?p=11392"},"modified":"2013-01-14T06:01:21","modified_gmt":"2013-01-14T13:01:21","slug":"software-development-not-by-pert-alone","status":"publish","type":"post","link":"https:\/\/svapm.org\/?p=11392","title":{"rendered":"Software development \u2013 not by PERT alone"},"content":{"rendered":"<p><strong>I have great respect for software developers.<\/strong>  Because software is abstract, invisible and runs at extreme speeds, the people who are good at building it have to possess a particular talent at visualization and a willingness to use complex tools.<\/p>\n<p><strong>When software developers become project managers <\/strong>(PMs), they tend to rely on software tools to monitor, control and report on projects, just as non-technical PMs do.  The problems that technologists have in management have to do with inexperience in people interaction, including conflict, collaboration and just plain old ability to listen well.  If you\u2019re a technologist in management, you can find more ideas on what to do about this in my book <a href=\"http:\/\/johnlevyconsulting.com\/john-levy-book\/\" target=\"_blank\">Get Out of the Way<\/a>.<\/p>\n<p><strong>For the rest of PMs, there are lots of good tools<\/strong>,such as PERT and Gantt charts, but simply having good tools will not make your project succeed.  Software development projects frequently fail to produce results that the customer or end-user wants.  Why?  <\/p>\n<p><strong>Here are three factors that contribute<\/strong> to the unruliness of software development projects: <\/p>\n<p>1.\t<strong>Estimating the effort and time required to complete a task is difficult. <\/strong> Even when reasonable-looking requirements and specifications of a software package are provided, understanding the difficulty of development may require architecting multiple layers and investigating interactions with a complex environment.  Since requirements are generally high-level items, and design has to be done at multiple levels, it is difficult to break down the work into \u201cpebble-sized\u201d tasks and then to keep to a schedule with those tasks.<\/p>\n<p>2.\t<strong>Designing an algorithm often takes experimentation. <\/strong> Engineering a software system requires trying out some things to see if they work, or testing multiple possible ways to implement something to find one with reasonable performance, for example.  This aspect of software engineering is so prevalent that Fred Brooks in <a href=\"http:\/\/www.amazon.com\/Mythical-Man-Month-Software-Engineering-Anniversary\/dp\/0201835959\" target=\"_blank\">The Mythical Man-Month<\/a> advised us to \u201cplan to throw one away.\u201d  He meant that at the completion of a complex software implementation (such as an operating system), the designers have learned so much that it is often best to start over and re-implement everything.<\/p>\n<p>3.\t<strong>Assuring that a software implementation functions properly<\/strong> under all conditions may take as long as the design phase.  In fact, you may never be able to prove proper functioning, because testing all combinations of conditions is impossible.  At best, using test-automation tools and good intuition about where to look for errors, a software team can reduce the number of bugs at the time of a software release, but almost never to zero.<\/p>\n<p><strong>Scheduling a software project is made more difficult<\/strong> by the fact that additional tasks are always discovered during implementation.  This is so prevalent that I learned long ago always to ask \u201cWhat remains to be done?\u201d in addition to \u201cWhat have you completed?\u201d  You can count on the list of tasks to be done growing during the project.<\/p>\n<p><strong>One of the best countermeasures to all of these problems is to use Agile<\/strong> development methods.  Iterative development with regular demonstrations of working software having incrementally greater functionality will help reduce uncertainty and increase the ability of a development team to adapt to a changing world.  It also shortens the time between the initial charter of the project and the point where the customer says, \u201cbut that\u2019s not what I wanted.\u201d<\/p>\n<p><strong>Even Agile will not save all projects.<\/strong>  If you\u2019d like to learn more about why not, join me for a free webinar, <a href=\"http:\/\/johnlevyconsulting.com\/webinar-info\/\">Why Agile Won\u2019t Fix All Your Problems<\/a>, or simply <a href=\"http:\/\/johnlevyconsulting.com\" target=\"_blank\">download the slides here<\/a><br \/>\n.<br \/>\n<strong>And good luck.  The world needs software<\/strong>, so we all have to keep on trying to deliver it the best we can.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I have great respect for software developers. Because software is abstract, invisible and runs at extreme speeds, the people who [&hellip;]<\/p>\n","protected":false},"author":115,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"give_campaign_id":0,"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[844,846,5,10,20,1,854,855,856,849,850],"tags":[1227,202,1225,1228,1230,1226,925,1223,1156,1229,1219,1224],"class_list":["post-11392","post","type-post","status-publish","format-standard","hentry","category-integration","category-scope-2","category-time-management","category-cost","category-quality","category-miscellaneous","category-pmbok-process-planning","category-pmbok-process-executing","category-pmbok-process-monitoring-and-controlling","category-team-leadership","category-organizational-leadership","tag-abstraction","tag-agile","tag-estimating","tag-experimentation","tag-iterative-development","tag-rework","tag-scrum","tag-software","tag-software-development","tag-software-engineering","tag-software-management","tag-software-project-failure"],"aioseo_notices":[],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/svapm.org\/index.php?rest_route=\/wp\/v2\/posts\/11392","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/svapm.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/svapm.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/svapm.org\/index.php?rest_route=\/wp\/v2\/users\/115"}],"replies":[{"embeddable":true,"href":"https:\/\/svapm.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=11392"}],"version-history":[{"count":20,"href":"https:\/\/svapm.org\/index.php?rest_route=\/wp\/v2\/posts\/11392\/revisions"}],"predecessor-version":[{"id":11411,"href":"https:\/\/svapm.org\/index.php?rest_route=\/wp\/v2\/posts\/11392\/revisions\/11411"}],"wp:attachment":[{"href":"https:\/\/svapm.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=11392"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/svapm.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=11392"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/svapm.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=11392"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}