Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Design perfume


Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Design perfume

  1. 1. Design Perfume The sweet smells of quality
  2. 2. Supple <ul><li>Rigidity  - System is hard to change. </li></ul><ul><li>The system is easy to change: </li></ul><ul><ul><li>introduce new modules </li></ul></ul><ul><ul><li>substitute alternate implementations </li></ul></ul><ul><ul><li>substitute alternate technologies  </li></ul></ul><ul><ul><li>extend with new functionality </li></ul></ul><ul><ul><li>refactor for clearer design  </li></ul></ul>
  3. 3. Resilient  <ul><li>Fragility  - Changes cause the system to break easily and require other changes. </li></ul><ul><li>Problems and their solutions tend to stay localised: </li></ul><ul><ul><li>Failures don't bring whole systems down </li></ul></ul><ul><ul><li>Failures don't introduce bad data </li></ul></ul><ul><ul><li>Bad data doesn't propagate </li></ul></ul><ul><ul><li>The consequences of failure make sense given the causes  </li></ul></ul><ul><ul><li>Fixes stay localised  </li></ul></ul><ul><ul><li>Technologies is used in obvious and limited scopes </li></ul></ul><ul><ul><li>Dependencies on specific configurations are localised </li></ul></ul>
  4. 4. Re-usable <ul><li>Immobility  - Difficult to disentangle components that can be reused in other systems. </li></ul><ul><li>Just fits in anywhere it might be useful: </li></ul><ul><ul><li>Any dependencies should make sense </li></ul></ul><ul><ul><li>Configuration and maintenance should be proportionate  </li></ul></ul><ul><ul><ul><li>Easy to figure out </li></ul></ul></ul><ul><ul><ul><li>Sensible defaults </li></ul></ul></ul><ul><ul><ul><li>Updates should seem relevant and not a burden  </li></ul></ul></ul><ul><ul><li>Reuse should add clarity: </li></ul></ul><ul><ul><ul><li>Making the intention and correct use obvious </li></ul></ul></ul><ul><ul><ul><li>Not introducing too much unused functionality  </li></ul></ul></ul>
  5. 5. Enabling  <ul><li>Viscosity  - Doing things right is harder than doing things wrong. </li></ul><ul><li>Makes good practices easy: </li></ul><ul><ul><li>The right information and operations are available  </li></ul></ul><ul><ul><ul><li>Back doors are hard find or make </li></ul></ul></ul><ul><ul><ul><li>It's easy to find or do what you need </li></ul></ul></ul><ul><ul><li>Like Guice makes DI easier than calling new </li></ul></ul><ul><ul><li>Like list processing libraries lead to less error prone loops, and more explicit condition and operation objects </li></ul></ul>
  6. 6. Appropriately Complex <ul><li>Needless Complexity  - System contains infrastructure that has no direct benefit. </li></ul><ul><li>The reasons for complexity are obvious: </li></ul><ul><ul><li>Clearly connecting complexity to business needs </li></ul></ul><ul><ul><ul><li>Thinking about the complexity reveals important things </li></ul></ul></ul><ul><ul><li>Complexity is visible up front </li></ul></ul><ul><ul><ul><li>No nasty surprises when you start to dig in </li></ul></ul></ul><ul><ul><ul><li>Complexity hiding shouldn't produce time-bombs </li></ul></ul></ul>
  7. 7. DRY <ul><li>Needless Repetition  - Repeated structures that should have a single abstraction. </li></ul><ul><li>Don't Repeat Yourself </li></ul><ul><li>Don't force users of your code to repeat themselves: </li></ul><ul><ul><li>Good default values or reusable configuration </li></ul></ul><ul><ul><li>Useful state and memory of previous actions </li></ul></ul><ul><ul><li>No need to code up the same things repeatedly </li></ul></ul>
  8. 8. Transparent <ul><li>Opacity  - Code is hard to understand. </li></ul><ul><li>Good code is obvious and easy to understand:  </li></ul><ul><ul><li>It does what it says it does </li></ul></ul><ul><ul><li>It doesn't do extra unexpected stuff  </li></ul></ul><ul><ul><ul><li>Explicit consequences (not implicit) </li></ul></ul></ul><ul><ul><li>It matches reasonable expectations </li></ul></ul>
  9. 9. Manifesto-style <ul><li>We prefer to strive toward excellence  </li></ul><ul><li>over  </li></ul><ul><li>merely struggling away from mediocrity. </li></ul>