1. Interactive Development Environments (Eclipse, VisualStudio, etc.)
PD2 - Interactive Development Environments (IDEs) do not really apply to external users unless they are going to launch the system from an IDE. In that case, many IDEs provide support for running systems in them.
PD3 - IDEs are very useful to software developers who are skilled at using them.
PD1 - Because IDEs and their features can greatly help developes in their coding and development, it allows the developers to implement a system that accomplishes a useful task.
2. Coding Standards and Coding Standards Compliance Tools (Checkstyle, etc.)
PD3 - Coding standards and Coding Standards Compliance Tools allow the developer to create code in a consistant manner. This helps to not only make the code more readable to the developer and any teammates, but also makes it more readable to an external developer because the code is consistent no matter who is writing it.
PD1 - If the code is more readable then it will also be easier to understand and therefore easier to maintain and improve. This will make it easier for a system to perform a useful task because developers will be able to understand it and maintain it (to either fix it so that it will do a useful task or maintain it so that it continues to accomplish a useful task).
PD2 - Coding standards really have no relation to external users other than allowing developers to more easily create or maintain a system that the external user will eventually use.
3. Build Systems (Ant, Make, etc.)
PD3 - Build systems provide greater flexibility for team-based, cross-platform development. It allows for developers using different IDEs and who have different development environments to be able to independently build and test the system regardless of what they are using (certain prerequisites must be met however). This is ideal when an external developer wishes to take a project and work on it.
PD2 - Moreover, an external user who has some technical background can use a build system to create an executable to run the system.
PD1 - In either case, build systems will help bridge developers and users together and allow the system that performs a useful task to be both developed and utilized.
4. Automated Quality Assurance Tools (PMD and FindBugs, etc.)
PD1 - Automated Quality Assurance Tools are useful in finding potential bugs or areas in code where potential problems lie. The real strength of Automated Quality Assurance tools is that they can find problems, defects, or bugs that developers or other experts may not be able to find through manual testing or inspection. The ability to find these types of problems will really benefit the system by allowing it to accomplish a useful task with minimal errors.
PD1 & PD2 - It will also allow both external developers and users to work with the system that has as few bugs as possible.
5. Black and White Box Testing
PD1 & PD2 - In order for a system to accomplish a useful task it must be tested to make sure that it accomplishes its task(s) in a consistent and expected manner and is affected by as little bugs as possible. To help with this process, both black box(functional) and white box (structural) testing should be conducted. After all, the system is no use to an external user if it accomplishes a useful task, but only accomplishes it sporadically or intermittently between errors.
PD3 - Also, black and white box testing will help to ensure that the system runs correctly should an external developer try to work on it further.
6. Automated Testing Tools (JUnit, HttpUnit, etc.)
PD3 - Automated testing tools are a nice means for developers to see if changes that they have made to the system have any rippling effects overall.
PD1 - If a change is made, the developer can run the automated tests to see if they all still pass. If they all still pass then the system will most likely not have been negatively affected overall. If they all do not pass, then the new change has negatively affected other aspects of the system. Automated testing tools can help to ensure that a system continues to accomplish a useful task since the system can be quickly tested without taking too much of the developer's time.
PD2 - External users, however, are not directly affected by automated testing tools other than the fact that if the system works as expected (due to thorough testing) they will be happier.
7. Configuration Management (CVS, SVN, etc.)
PD3 - Configuration management is critically important in the development process. It helps to track what is going on with a software system so that when problems arise the problems will be easier to indentify and fix. Even if there is only one developer working on a project, configuration management makes it very easy to rollback changes and restore the system to a previously working state.
PD1 - Overall, configuration management provides another tool for developers so that they can produce a system the performs a useful task.
PD2 - In the end, the external user will be more readily satisfied if the developers can utilize configuration management to make it easier to create and implement the system.
8. Issue Driven Project Management
PD3 - Issue driven project management provides a nice means of tracking what has been done to a system and what still needs to be done in the future. It provides an important organization tool and works nicely in conjunction with a version control system to manage a project. Developers can take advantage of issue driven project management and its organizational and management benefits to create the best possible system.
PD1 - The system will benefit greatly because it will hopefully insure that all outstanding issues are completed before the system will be released for use. This makes it highly more likely that the system will accomplish a useful task and accomplish that task well.
PD2 - In the end, the external users will benefit because any issues that have been discovered will have been addressed before release to external users.
9. Use Cases
PD1 - Use cases provide a means for capturing user requirements when designing a new system. The advantages of use cases are that if they are done correctly, it increases the chances that the system will preform a useful task since the use cases will provide scenarios of what the user expects the system to do and how the system should do it.
PD2 - Because of this, use cases also increase the odds that the external user will be satisfied with the system since hopefully the system was built based on what they envisioned it to do.
PD3 - Lastly, use cases allow the developers to have a clear picture of what the user wants the system to do, and how the system should go about doing that. This makes the development process much easier since the requirements are well-known.
10. Software Review
PD1 - Conducting software reviews should only benefit the system by making sure it accomplishes a useful task in a logical way and that it has met any requirements specified.
PD2 - External users will benefit from software reviews because whoever did the reviewing would have run into problems (at least the major ones) with the documentation, installation, or use of the system.
PD3 - External developers will benefit from software review because hopefully all the documentation and installation problems will have been worked out following the review, allowing the developer to focus on the system and the task(s) that it should accomplish.
11. Agile Methods (XP, Scrum, etc.)
PD1 - One of the possible negatives of agile methods is that it may not be applicable to larger systems and projects because it emphasizes interaction between developers and users (and requires a smaller group to be truly successful). However, smallers systems that accomplish useful tasks must still be developed and the agile method is very good at that.
PD2 - One of the characteristics of agile methods is that it focuses on interction between users and developers. While this may not directly benefit an external user (who has no direct involvement or stake in the project) it can benefit them indirectly depending on what was conveyed by the stakeholding users.
PD3 - External developers can benefit from agile methods if they choose to enhance or work on a system in a group. If the external developer joins a group of developers who have been working on the system for a while using agile methods, the external developer will be able to jump right into the process because it is not so strongly rooted in doing things in a precise, process-following manner.
12. Open Source Licenses (GPL, CPL, etc.)
PD1 - Open source allows the system to be worked on by a large amount of developers. With large amounts of developers working on a system, one would think that a system that accomplishes a useful task would be created.
PD2 - External users benefit from open source licenses because the software is usually free and accomplishes some useful task that the user can utilize.
PD3 - External developers really benefit from open source licenses because it allows them to work on preexisting projects during their free time that maybe they cannot develop at work.
13. Online Hosting Services (Google Project Hosting, SourceForge, etc.)
PD1 - A system that accomplishes a useful task can only help if it can be found. By having online hosting services available, more people including users and developers can have access to it and either use it or help improve it.
PD2 - Online hosting systems usually include documentation with it or provide a forums or some other means to get the documentation information that a user might need. External users benefit from this because they have access to documentation when they need it.
PD3 - External developers benefit from online hosting systems because they have free access to a variety of different systems that they can download and further develop.





