<p>Maybe my understanding of agile development isn't as good as it should be, but I'm curious how an agile developer would potentially use off-the-shelf (OTS) software when the requirements and knowledge of what the final system should be are changing as rapidly as I understand them to (often after each iteration of development).</p>

<hr>

<p>I see two situations that are of particular interest to me:</p>

<p>(1) An OTS system meets the initial set of requirements with little to no modification, other than potential integration into an existing system. However, within a few iterations of development, this system no longer meets the needs without rewriting the core code. The developers must choose to either spend additional time learning the core code behind this OTS software or throw it away and build from scratch. Either would have a drastic impact on development time and project cost.</p>

<p>(2) The initial needs are not like any existing OTS system available, however, in the end when the customer accepts the product, it ends up being much like existing solutions due to requirement additions and subtractions. If the developers had more requirements and spent more time working on them up front, this solution could have been used instead of building again. The project was delivered, but later and at a higher cost than necessary.</p>

<hr>

<p>As a software engineer, part of my responsibilities (as I have been taught), are to deliver high-quality software to the customer on time at the lowest possible cost (among other things). Agile development allows for high-quality software, but in some cases, it might not be apparent that there are better alternatives until it is too late and too much money has been spent.</p>

<p>My questions are:</p>

<ol>
<li>How does off-the-shelf software fit in with agile development?</li>
<li>How do the agile manager and agile developer deal with these cases?</li>
<li>What do the agile paradigms say about these cases?</li>
</ol>

[{'answer_id': 51662, 'author': 'pauliephonic', 'author_id': 5374, 'author_profile': 'https://Stackoverflow.com/users/5374', 'pm_score': 2, 'selected': False, 'text': "<p>Not a strict answer per se, but I think that using off the shelf software as a component in a software solution can be very beneficial if:</p>\n\n<ul>\n<li>It's data is open, e.g. an open database or a web service to interact with it</li>\n<li>The off the shelf system can customised <em>easily</em> using a similar programming paradigm to the rest of your solution</li>\n<li>It can be seamlessly adapted to the rest of your work-flow</li>\n</ul>\n\n<p>I'm a big fan of not re-inventing the wheel, and using your development skills to design the 'glue' between off-the-shelf solutions can be a big win.</p>\n\n<p>Remember 'open' is the important part, and a vendor will often tout their solution as open when it isn't really.</p>\n"}, {'answer_id': 51674, 'author': 'Simon Keep', 'author_id': 1127460, 'author_profile': 'https://Stackoverflow.com/users/1127460', 'pm_score': 1, 'selected': False, 'text': '<p>I think I read somewhere that if during an iteration you discover that you have more than 20% more work that you initially thought then you should abandon the sprint and start planning a new one taking into account the additional work.</p>\n\n<p>So this would mean replanning with the business to see if they still want to go ahead with the original requirements now that you know more.</p>\n\n<p>At our company we also make use of prototyping before the sprint to try and identify these kind of situations before they arise on a sprint. Although of course that still may not identify the kind of situation that you describe.</p>\n'}, {'answer_id': 51776, 'author': 'Gishu', 'author_id': 1695, 'author_profile': 'https://Stackoverflow.com/users/1695', 'pm_score': 3, 'selected': True, 'text': "<h2>Scenario1:</h2>\n\n<p>This can occur regardless off the OTS nature of the component. Agile does not mean near-sighted.. you'd need to know the big chunks.. the framework bits and spend thinking time on it beforehand. That said, you can only build to what you know .. Delay only till the last responsible moment.Then you need to pick one of the alternatives and start on it.  (I'd Avoid third party application unless the cost of developing it in-house is infeasible.. but that's just me). Prototype multiple solutions to check feasibility with list of known requirements. Keep things loosely coupled (replacable), easy to change and full tested. If you reach the fork of keep hacking or rewrite, you'd need to think of which has better value for the business and pick that option. It's comes down 'Now that we're here, what's the best we can do now?' </p>\n\n<h2>Scenario2:</h2>\n\n<p>This can happen although the chances are slim compared to the team spending 2-3 months trying to get the requirements 'finalized' only to find that the market needs or customer minds have changed and 'Now we want it this way'. Once again, its a question of what is the point of time till which you are prepared to investigate and explore before committing on a path of action. Decide wisely with whatever information you have upto that point.. Hindsight is always 20-20 but the customers wont wait forever. You can't wait till the point of time where the requirements coalesce to fit a known OTS component :)</p>\n\n<p><strong>Agile says Do whatever makes sense and strip out the non-value-adding activities :) Agile is no magic bullet.</strong> just my 2 agile cents :)</p>\n"}, {'answer_id': 51826, 'author': 'Kristopher Johnson', 'author_id': 1175, 'author_profile': 'https://Stackoverflow.com/users/1175', 'pm_score': 1, 'selected': False, 'text': '<p>C2 wiki discussion: <a href="http://c2.com/cgi/wiki?BuyDontBuild" rel="nofollow noreferrer">http://c2.com/cgi/wiki?BuyDontBuild</a></p>\n'}]
['https://Stackoverflow.com/questions/51649', 'https://Stackoverflow.com', 'https://Stackoverflow.com/users/572/']