On the Software Development Process:

What makes a Successful Development Process?

  • The Games Outcomes Project
    • Cannot be summarized easily, but:
    • “Our study found several surprises, including a complete lack of any correlations between factors that one would assume should have a large impact, such as team size, game genre, target platforms, the production methodology the team used, or any additional financial incentives the team was offered beyond individual performance compensation.”
    • “The actual secret sauce seems to be a culture that continually and deliberately cultivates and enables good teamwork, gives it all the support it needs to flourish, and carefully and diligently diagnoses it and fixes it when it begins to go astray.”
  • The research of Nachi Nagappan as summarized on Microsoft Research
    • “The logical assumption would be that more code coverage results in higher-quality code. But what Nagappan and his colleagues saw was that, contrary to what is taught in academia, higher code coverage was not the best measure of post-release failures in the field.”
    • My hypothesis: Code coverage satisfies helps verify test coverage specifications are satisfied. EG: “This test will verify feature X” can be validated by verifying changes in test coverage.
    • “What the research team found was that the TDD teams produced code that was 60 to 90 percent better in terms of defect density than non-TDD teams. They also discovered that TDD teams took longer to complete their projects—15 to 35 percent longer.”
    • “Software engineers who were able to make productive use of assertions in their code base tended to be well-trained and experienced”
    • “Organizational metrics, which are not related to the code, can predict software failure-proneness with a precision and recall of 85 percent.”

Approaches to Software Development

    • “This article attempts to describe specific mental techniques that are related to resolving very complex tasks in software engineering.”
    • The approaches described here are abstract of any implementation. They are general approaches to distributed systems development. This is an approach that is sorely needed in the software development world. Implementation specific software development approaches (EG: OO), while valuable, are incomplete. To perceive those as complete approaches would result in achieving a local maxima without any recourse. We must be able to consider our activities in abstract of the technology to perceive how to adapt.


“Legacy” Systems Development

The concept of “Legacy” is often applied incorrectly. Legacy is only systems that have been retired after all dependencies have been removed. At which point it’s historical legacy. Otherwise the system is a system like all others.