{"id":690,"date":"2011-11-16T10:14:00","date_gmt":"2011-11-16T10:14:00","guid":{"rendered":"http:\/\/www.javacodegeeks.com\/2012\/10\/diminishing-returns-in-software-development-and-maintenance.html"},"modified":"2012-10-21T20:39:58","modified_gmt":"2012-10-21T20:39:58","slug":"diminishing-returns-in-software","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2011\/11\/diminishing-returns-in-software.html","title":{"rendered":"Diminishing Returns in software development and maintenance"},"content":{"rendered":"<div dir=\"ltr\" style=\"text-align: left\">Everyone knows from reading <a href=\"http:\/\/www.amazon.com\/Mythical-Man-Month-Software-Engineering-Anniversary\/dp\/0201835959\">The Mythical Man Month<\/a> that as you add more people to a software development project you will see <a href=\"http:\/\/en.wikipedia.org\/wiki\/Diminishing_returns\">diminishing marginal returns<\/a>.<\/p>\n<p>When you add a person to a team, there\u2019s a short-term hit as the rest of the team slows down to bring the new team member up to speed and adjusts to working with another person, making sure that they fit in and can contribute. There\u2019s also a long-term cost. More people means more people who need to talk to each other (n x n-1 \/ 2), which means more opportunities for misunderstandings and mistakes and misdirections and missed handoffs, more chances for disagreements and conflicts, more bottleneck points.<\/p>\n<p>As you continue to add people, the team needs to spend more time getting each new person up to speed and more time keeping everyone on the team in synch. Adding more people means that the team speeds up less and less, while people costs and communications costs and overhead costs keep going up. At some point negative returns set in \u2013 if you add more people, the team\u2019s performance will decline and you will get less work done, not more.<\/p>\n<p><span style=\"font-weight: bold\">Diminishing Returns from any One Practice<\/span><\/p>\n<p>But adding too many people to a project isn\u2019t the only case of diminishing returns in software development. If you work on a big enough project, or if you work in maintenance for long enough, you will run into problems of diminishing returns everywhere that you look.<\/p>\n<p>Pushing too hard in one direction, depending too much on any tool or practice, will eventually yield diminishing returns. This applies to:<\/p>\n<ul style=\"text-align: left\">\n<li>Manual functional and acceptance testing<\/li>\n<li>Test automation<\/li>\n<li>Any single testing technique<\/li>\n<li>Code reviews<\/li>\n<li>Static analysis bug finding tools<\/li>\n<li>Penetration tests and other security reviews<\/li>\n<\/ul>\n<p>Aiming for 100% code coverage on unit tests is a good example. Building a good automated regression safety net is important \u2013 as you wire in tests for key areas of the system, programmers get more confidence and can make more changes faster.<\/p>\n<p>How many tests are enough? In <a href=\"http:\/\/www.informit.com\/store\/product.aspx?isbn=0321601912\">Continuous Delivery<\/a>, Jez Humble and David Farley set 80% coverage as a target for each of automated unit testing, functional testing and acceptance testing. You could get by with lower coverage in many areas, higher coverage in core areas. You need enough tests to catch common and important mistakes. But beyond this point, more tests get more difficult to write, and find fewer problems.<\/p>\n<p>Unit testing can only find so many problems in the first place. In <a href=\"http:\/\/cc2e.com\/\">Code Complete<\/a>, Steve McConnell explains that unit testing can only find between 15% and 50% (on average 30%) of the defects in your code. Rather than writing more unit tests, people\u2019s time would be better spent on other approaches like <a href=\"http:\/\/www.google.ca\/url?sa=t&amp;rct=j&amp;q=exploratory%20testing&amp;source=web&amp;cd=2&amp;ved=0CDAQFjAB&amp;url=http%3A%2F%2Fwww.satisfice.com%2Farticles%2Fet-article.pdf&amp;ei=y064TrHwEoX30gGF1bzRBw&amp;usg=AFQjCNGlnmPrWeJ_ZKGmRYF0EDcqRD-V8w&amp;cad=rja\">exploratory system testing<\/a> and <a href=\"http:\/\/www.javacodegeeks.com\/2011\/06\/not-doing-code-reviews-whats-your.html\">code reviews<\/a> or <a href=\"http:\/\/agiletesting.blogspot.com\/2005\/02\/performance-vs-load-vs-stress-testing.html\">stress testing<\/a> or <a href=\"http:\/\/blogs.msdn.com\/b\/sdl\/archive\/2007\/09\/20\/fuzz-testing-at-microsoft-and-the-triage-process.aspx\">fuzzing<\/a> to find different kinds of errors.<\/p>\n<div style=\"text-align: center\"><i>Too much of anything is bad, but too much whiskey is enough.<\/i><\/div>\n<div style=\"text-align: center\"><i>(Mark Twain, as quoted in Code Complete)<\/i><\/div>\n<p>Refactoring is important for maintaining and improving the structure and readability of code over time. It is intended to be a supporting practice \u2013 to help make changes and fixes simpler and clearer and safer. When refactoring becomes <a href=\"http:\/\/www.makinggoodsoftware.com\/2011\/03\/27\/the-obsession-with-beautiful-code-the-refactor-syndrome\/\">an end in itself<\/a> or turns into <a href=\"http:\/\/programmers.stackexchange.com\/questions\/43506\/is-it-bad-to-have-an-obsessive-refactoring-disorder\">Obsessive Refactoring Disorder<\/a>, it not only adds unnecessary costs as programmers waste time over trivial details and style issues, it can also add unnecessary risks and <a href=\"http:\/\/programmers.stackexchange.com\/questions\/43489\/how-to-handle-coworker-with-obsessive-refactoring-disorder\">create conflict in a team<\/a>.<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<p>Make sure that refactoring is done in a disciplined way, and focus refactoring on those areas that need it the most: on code that is frequently changed, routines that are too big, too hard to read, too complex and <a href=\"http:\/\/books.google.com\/books?id=oEPjYVfUR1wC&amp;pg=PT489&amp;lpg=PT489&amp;dq=capers+jones+error-prone+modules&amp;source=bl&amp;ots=b8u6SqhQyG&amp;sig=_JTohpdPTXB1Bbyrc9wEPo5nWhE&amp;hl=en&amp;ei=MVK4Tpj8Ieft0gGSouHVCQ&amp;sa=X&amp;oi=book_result&amp;ct=result&amp;redir_esc=y#v=onepage&amp;q&amp;f=false\">error-prone<\/a>. Putting most of your attention refactoring (or if necessary rewriting) this code will get you the highest returns.<\/p>\n<p><span style=\"font-weight: bold\">Less and Less over Time<\/span><\/p>\n<p>Diminishing returns also set in over time. The longer that you spend working the same way and with the same tools, the less benefits you will see. Even core practices that you\u2019ve grown to depend on don\u2019t pay back over time, and at some point may cost more than they are worth.<\/p>\n<p>It\u2019s time again for New Year\u2019s resolutions \u2013 time to sign up at a gym and start lifting weights. If you stick with the same routine for a couple of months, you will start to see good results. But after a while your body will get used to the work \u2013 if you keep doing the same things the same way your <a href=\"http:\/\/www.nytimes.com\/1999\/01\/19\/health\/law-of-diminishing-returns-for-athletes.html\">performance will plateau<\/a> and you will stop seeing gains. You will get bored and stop going to the gym, which will leave more room for people like me. If you do keep going, trying to push harder for returns, you will overtrain and injure yourself.<\/p>\n<p>The same thing happens to software teams following the same practices, using the same tools. Some of this is due to inertia. Teams, organizations reach an equilibrium point and they want to stay there. Because it is comfortable, and it works \u2013 or at least they understand it. And because the better the team is working, the harder it is to get better \u2013 all the low-hanging fruit has been picked. People keep doing what worked for them in the past. They stop looking beyond their established routines, stop looking for new ideas. Competence and control lead to complacency and acceptance. Instead of trying to be as good as possible, they settle for being good enough.<\/p>\n<p>This is the point of inspect-and-adapt in Scrum and other time boxed methods \u2013 asking the team to regularly re-evaluate what they are doing and how they are doing it, what\u2019s going well and what isn\u2019t, what they should do more of or less of, challenging the status quo and finding new ways to move forward. But even the act of assessing and improving is subject to diminishing returns. If you are building software in 2-week time boxes, and you\u2019ve been doing this for 3, 4 or 5 years, then how much meaningful feedback should you really expect from so many superficial reviews? After a while the team finds themselves going over the same issues and problems and coming up with the same results. Reviews become an unnecessary and empty ritual, another waste of time.<\/p>\n<p>The same thing happens with tools. When you first start using a static analysis bug checking tool for example, there\u2019s a good chance that you will find some interesting problems that you didn\u2019t know were in the code \u2013 maybe even more problems than you can deal with. But once you triage this and fix up the code and use the tool for a while, the tool will find fewer and fewer problems until it gets to the point where you are paying for insurance \u2013 it isn\u2019t finding problems any more, but it might someday.<\/p>\n<p>In &#8220;<a href=\"http:\/\/gcn.com\/Articles\/2009\/11\/09\/Cybereye-SDLC-diminishing-returns.aspx\">Has secure software development reached its limits?<\/a>\u201d William Jackson argues that SDLCs \u2013 all of them \u2013 eventually reach a point of diminishing returns from a quality and security standpoint, and that Microsoft and Oracle and other big shops are already seeing diminishing returns from their SDLCs. Their software won\u2019t get any better \u2013 all they can do is to keep spending time and money to stay where they are. The same thing happens with Agile methods like Scrum or XP \u2013 at some point you\u2019ve squeezed everything that you can from this way or working, and the team\u2019s performance will plateau.<br \/>\n<span style=\"font-weight: bold\"><br \/>\nWhat can you do about diminishing returns?<\/span><\/p>\n<p>First, understand and expect returns to diminish over time. Watch for the signs, and factor this into your expectations \u2013 that even if you maintain discipline and keep spending on tools, you will get less and less return for your time and money. Watch for the team\u2019s velocity to plateau or decline.<\/p>\n<p>Expect this to happen and be prepared to make changes, even force fundamental changes on the team. If the tools that you are using aren\u2019t giving returns any more, then find new ones, or stop using them and see what happens.<\/p>\n<p>Keep reviewing how the team is working, but do these reviews differently: review less often, make the reviews more focused on specific problems, involve different people from inside and outside of the team. Use problems or mistakes as an opportunity to shake things up and challenge the status quo. Dig deep using <a href=\"http:\/\/swreflections.blogspot.com\/2011\/06\/moving-forward-from-failure.html\">Root Cause Analysis<\/a> and challenge the team\u2019s way of thinking and working, look for something better. Don\u2019t settle for simple answers or incremental improvements.<\/p>\n<p>Remember the 80\/20 rule. Most of your problems will happen in the same small number of areas, from a small number of common causes. And most of your gains will come from a few initiatives.<\/p>\n<p>Change the team\u2019s driving focus and key metrics, set new bars. Use Lean methods and Lean Thinking to identify and eliminate bottlenecks, delays and inefficiencies. Look at the controls and tests and checks that you have added over time, question whether you still need them, or find steps and checks that can be combined or automated or simplified. Focus on reducing cycle time and eliminating waste until you have squeezed out what you can. Then change your focus to quality and eliminating bugs, or to simplifying the release and deployment pipeline, or some other new focus that will push the team to improve in a meaningful way. And keep doing this and pushing until you see the team slowing down and results declining. Then start again, and push the team to improve again along another dimension. Keep watching, keep changing, keep moving ahead. <\/p>\n<p><strong><i>Reference: <\/i><\/strong><a href=\"http:\/\/swreflections.blogspot.com\/2011\/11\/diminishing-returns-in-software.html\">Diminishing Returns in software development and maintenance<\/a> from our <a href=\"http:\/\/www.javacodegeeks.com\/p\/jcg.html\">JCG partner<\/a>  <a href=\"http:\/\/www.blogger.com\/profile\/17371102366836131341\">Jim Bird<\/a> at the <a href=\"http:\/\/swreflections.blogspot.com\/\">&#8220;Building Real Software&#8221; blog<\/a>.<\/p>\n<div style=\"margin: 0px\"><strong><i>Related Articles :<\/i><\/strong><\/div>\n<ul>\n<li><a href=\"http:\/\/www.javacodegeeks.com\/2011\/11\/dealing-with-technical-debt.html\">Dealing with technical debt<\/a><\/li>\n<li><a href=\"http:\/\/www.javacodegeeks.com\/2011\/10\/on-importance-of-communication-in.html\">On the importance of communication in the workplace<\/a><\/li>\n<li><a href=\"http:\/\/www.javacodegeeks.com\/2011\/10\/services-practices-tools-that-should.html\">Services, practices &amp; tools that should exist in any software development house<\/a><\/li>\n<li><a href=\"http:\/\/www.javacodegeeks.com\/2011\/09\/this-comes-before-your-business-logic.html\">This comes BEFORE your business logic!<\/a><\/li>\n<li><a href=\"http:\/\/www.javacodegeeks.com\/2011\/08\/how-many-bugs-do-you-have-in-your-code.html\">How many bugs do you have in your code?<\/a><\/li>\n<li><a href=\"http:\/\/www.javacodegeeks.com\/p\/java-tutorials.html\">Java Tutorials and Android Tutorials list<\/a> <\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Everyone knows from reading The Mythical Man Month that as you add more people to a software development project you will see diminishing marginal returns. When you add a person to a team, there\u2019s a short-term hit as the rest of the team slows down to bring the new team member up to speed and &hellip;<\/p>\n","protected":false},"author":41,"featured_media":2386,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15],"tags":[],"class_list":["post-690","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software-development"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Diminishing Returns in software development and maintenance - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"Everyone knows from reading The Mythical Man Month that as you add more people to a software development project you will see diminishing marginal\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2011\/11\/diminishing-returns-in-software.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Diminishing Returns in software development and maintenance - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"Everyone knows from reading The Mythical Man Month that as you add more people to a software development project you will see diminishing marginal\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2011\/11\/diminishing-returns-in-software.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2011-11-16T10:14:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2012-10-21T20:39:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/software-development-2-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jim Bird\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jim Bird\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2011\\\/11\\\/diminishing-returns-in-software.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2011\\\/11\\\/diminishing-returns-in-software.html\"},\"author\":{\"name\":\"Jim Bird\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/3998192f3bf1e7750944bfa22630fdcc\"},\"headline\":\"Diminishing Returns in software development and maintenance\",\"datePublished\":\"2011-11-16T10:14:00+00:00\",\"dateModified\":\"2012-10-21T20:39:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2011\\\/11\\\/diminishing-returns-in-software.html\"},\"wordCount\":1669,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2011\\\/11\\\/diminishing-returns-in-software.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/software-development-2-logo.jpg\",\"articleSection\":[\"Software Development\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2011\\\/11\\\/diminishing-returns-in-software.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2011\\\/11\\\/diminishing-returns-in-software.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2011\\\/11\\\/diminishing-returns-in-software.html\",\"name\":\"Diminishing Returns in software development and maintenance - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2011\\\/11\\\/diminishing-returns-in-software.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2011\\\/11\\\/diminishing-returns-in-software.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/software-development-2-logo.jpg\",\"datePublished\":\"2011-11-16T10:14:00+00:00\",\"dateModified\":\"2012-10-21T20:39:58+00:00\",\"description\":\"Everyone knows from reading The Mythical Man Month that as you add more people to a software development project you will see diminishing marginal\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2011\\\/11\\\/diminishing-returns-in-software.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2011\\\/11\\\/diminishing-returns-in-software.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2011\\\/11\\\/diminishing-returns-in-software.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/software-development-2-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/software-development-2-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2011\\\/11\\\/diminishing-returns-in-software.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Software Development\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/software-development\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Diminishing Returns in software development and maintenance\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/3998192f3bf1e7750944bfa22630fdcc\",\"name\":\"Jim Bird\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/12045e36cd5c3c349d8d92a3cb2ced977bd13b8f800bf76e882767daff8aad3b?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/12045e36cd5c3c349d8d92a3cb2ced977bd13b8f800bf76e882767daff8aad3b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/12045e36cd5c3c349d8d92a3cb2ced977bd13b8f800bf76e882767daff8aad3b?s=96&d=mm&r=g\",\"caption\":\"Jim Bird\"},\"description\":\"Jim is an experienced CTO, software development manager and project manager, who has worked on high-performance, high-reliability mission-critical systems for many years, as well as building software development tools. His current interests include scaling Lean and Agile software development methodologies, software security and software assurance.\",\"sameAs\":[\"http:\\\/\\\/swreflections.blogspot.com\\\/\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/Jim-Bird\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Diminishing Returns in software development and maintenance - Java Code Geeks","description":"Everyone knows from reading The Mythical Man Month that as you add more people to a software development project you will see diminishing marginal","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/2011\/11\/diminishing-returns-in-software.html","og_locale":"en_US","og_type":"article","og_title":"Diminishing Returns in software development and maintenance - Java Code Geeks","og_description":"Everyone knows from reading The Mythical Man Month that as you add more people to a software development project you will see diminishing marginal","og_url":"https:\/\/www.javacodegeeks.com\/2011\/11\/diminishing-returns-in-software.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2011-11-16T10:14:00+00:00","article_modified_time":"2012-10-21T20:39:58+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/software-development-2-logo.jpg","type":"image\/jpeg"}],"author":"Jim Bird","twitter_card":"summary_large_image","twitter_creator":"@javacodegeeks","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Jim Bird","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2011\/11\/diminishing-returns-in-software.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2011\/11\/diminishing-returns-in-software.html"},"author":{"name":"Jim Bird","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/3998192f3bf1e7750944bfa22630fdcc"},"headline":"Diminishing Returns in software development and maintenance","datePublished":"2011-11-16T10:14:00+00:00","dateModified":"2012-10-21T20:39:58+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2011\/11\/diminishing-returns-in-software.html"},"wordCount":1669,"commentCount":0,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2011\/11\/diminishing-returns-in-software.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/software-development-2-logo.jpg","articleSection":["Software Development"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2011\/11\/diminishing-returns-in-software.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2011\/11\/diminishing-returns-in-software.html","url":"https:\/\/www.javacodegeeks.com\/2011\/11\/diminishing-returns-in-software.html","name":"Diminishing Returns in software development and maintenance - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2011\/11\/diminishing-returns-in-software.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2011\/11\/diminishing-returns-in-software.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/software-development-2-logo.jpg","datePublished":"2011-11-16T10:14:00+00:00","dateModified":"2012-10-21T20:39:58+00:00","description":"Everyone knows from reading The Mythical Man Month that as you add more people to a software development project you will see diminishing marginal","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2011\/11\/diminishing-returns-in-software.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2011\/11\/diminishing-returns-in-software.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2011\/11\/diminishing-returns-in-software.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/software-development-2-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/software-development-2-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2011\/11\/diminishing-returns-in-software.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Software Development","item":"https:\/\/www.javacodegeeks.com\/category\/software-development"},{"@type":"ListItem","position":3,"name":"Diminishing Returns in software development and maintenance"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/3998192f3bf1e7750944bfa22630fdcc","name":"Jim Bird","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/12045e36cd5c3c349d8d92a3cb2ced977bd13b8f800bf76e882767daff8aad3b?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/12045e36cd5c3c349d8d92a3cb2ced977bd13b8f800bf76e882767daff8aad3b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/12045e36cd5c3c349d8d92a3cb2ced977bd13b8f800bf76e882767daff8aad3b?s=96&d=mm&r=g","caption":"Jim Bird"},"description":"Jim is an experienced CTO, software development manager and project manager, who has worked on high-performance, high-reliability mission-critical systems for many years, as well as building software development tools. His current interests include scaling Lean and Agile software development methodologies, software security and software assurance.","sameAs":["http:\/\/swreflections.blogspot.com\/"],"url":"https:\/\/www.javacodegeeks.com\/author\/Jim-Bird"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/690","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/41"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=690"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/690\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/2386"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=690"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=690"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=690"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}