General Responsibility Assignment Software Principles

  1. Information expert: put the responsibility of handling inputs on the class that owns the inputs (coupling, encapsulation)
  2. Creator
  3. Low coupling
  4. Protected variations
  5. Indirection: compare with Adapter pattern
  6. Polymorphism: compare with Strategy pattern
  7. High cohesion: focus classes around one responsibility; compare with SOLID
  8. Pure fabrication: compare with Facade pattern
  9. Controller: an example of previous


The cost of inconvenience

It’s interesting how long you can put up with something for. You make the judgement that it’s less important than the job you’re tasked with. And two years later you’re still doing some weird startup sequence. Or you type a password a few times because you can’t be bothered sharing SSH keys.

Perhaps occasionally we should stop to review our processes?


Software development life cycle

Waterfall versus agile Construction of a building is often used to describe the software design process. But the analogy breaks down the building designer only has one attempt to compile the building. If he could try a different foundation halfway through then he probably would. Actually in Royce’s later revisions of the model he stated that the whole process should be done “twice if possible”. Software validation versus verification Validation is concerned with checking that the system will meet the customer’s actual needs. [Read More]