Today's assignment is PrimeDirectivesRedux, where we reexamine some of our past assignments in terms of the Three Prime Directives.
The Three Prime Directives
- The system accomplishes a useful task.
- An external user can successfully install and use the system.
- An external developer can successfully understand and enhance the system.
One thing that's not included in the prime directives, but which several of the tools help support, is the ability of an external developer to join the project and become an internal developer.
Interactive Development Environments (Eclipse, VisualStudio, etc.)
An IDE is mostly focused on helping you create any system at all. Since the system needs to exist before it can satisfy any of the directives, it helps in that sense.
More directly, it can help satisfy Prime Directive Three by encouraging consistent structure and idioms. IDEs automate a lot of common tasks, and the results are usually very consistent, making the code easier for an outside developer to understand and extend.
Coding Standards and Coding Standards Compliance Tools (Checkstyle, etc.)
Coding standards and compliance tools also provide consistency, though of a different type. Again, consistent style helps external developers understand the code.
There's no direct effect on the first two Prime Directives, because the coding standards aren't going to directly make the system easy to install or change what it does.
Build Systems (Ant, Make, etc.)
A build system can output a single file for external users to download and install from, so that's quite helpful for Prime Directive Two.
By automating some important development tasks (building, of course, but also testing) a build system makes the development environment easier to learn and use, which helps with Prime Directive Three.
A build system also makes it easier to run tests on the system. That's helpful for Prime Directive One because it helps check that the task is being successfully accomplished.
Automated Quality Assurance Tools (PMD and FindBugs, etc.)
These tools help ensure that the system successfully accomplishes whatever task it is designed to accomplish, which can help with Prime Directive One.
They also help with Prime Directive Three by making it easier for external developers to successfully integrate their changes into the system. A system that passes quality assurance tests is also usually easier to understand.
There's no direct effect on installation, but preventing bugs with quality assurance can make the system easier to use.
Black and White Box Testing
Testing supports Prime Directive One by helping ensure that the system successfully accomplishes whatever task it's designed to accomplish.
It also helps with Prime Directive Three by giving external developers a "safety net" when making changes. They can see right away whether their change broke something.
Again, there's an effect on Prime Directive Two, in the sense that a system with fewer bugs tends to be easier to use.
Automated Testing Tools (JUnit, HttpUnit, etc.)
Automated testing tools make black and white box testing easier, so all the same effects apply. The tools are especially helpful for Prime Directive Three because they simplify an development task (running the tests) that could otherwise be much harder to learn.
Configuration Management (CVS, SVN, etc.)
Configuration management is focused on how the internal developers store and track the code, so here's no direct effect on the Prime Directives, except maybe Prime Directive Three if you make your commit logs available to external developers.
There is a strong, indirect effect on all three Prime Directives because configuration management makes it much easier for internal developers to work together and get things done.
Issue Driven Project Management
Like configuration management, issue driven project management is mostly about how internal developers run the project. If the issues are made public, they can sometimes be helpful to external developers and users, but mainly it helps the internal developers work more effectively, which might mean they do a better job of satisfying all three Prime Directives.
Use Cases
Use cases help define the tasks that the system is supposed to accomplish, which helps with Prime Directive One.
They can also make the system easier to use by getting the developers to think about what the experience of using the system is supposed to be like. Things like the number of mouse clicks needed for a common task can show up in the use cases.
It can also be helpful for an external developer to read the use cases. Understanding what a system is supposed to do is an important part of understanding it in general.
Software Review
Software review is particularly important because the Three Prime Directives are defined in terms of other people. In a software review, some external person can check that the system is useful, installable, usable, understandable, and enhanceable.
When they find places that it isn't, the internal developers can work on fixing the system to better satisfy the Prime Directives.
Agile Methods (XP, Scrum, etc.)
Agile methods emphasize communication with users, which helps with Prime Directives One and Two. Users can tell the internal developers what's needed to satisfy the Prime Directives, and the developers can make adjustments.
The effect on Prime Directive Three probably depends a lot on which particular method you are using and the particular developer. The agile method itself won't include external developers, but it can lead to things that are helpful to them, like good unit tests or simple implementations.
Open Source Licenses (GPL, CPL, etc.)
An open license has no real direct effect on Prime Directives One and Two because it doesn't directly affect the behavior of the program.
It will make a big difference for Prime Directive Three. If an external developer is not allowed to read the source code and modify it, then Prime Directive Three is clearly not being met.
Online Hosting Services (Google Project Hosting, SourceForge, etc.)
An online hosting service helps with Prime Directives Two and Three by giving external users and developers a place to get the system and information about it.
It also helps in a general way by making it easier for internal developers to get things done, which hopefully brings them closer to satisfying all three Prime Directives.

