devel-rules.rst
author Oleksandr Gavenko <gavenkoa@gmail.com>
Sat, 30 Jun 2012 17:46:01 +0300
changeset 1312 a468648775f8
parent 419 645990ee83c8
permissions -rw-r--r--
99 bottles of beer.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
419
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     1
-*- mode: outline; coding: utf-8 -*-
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     2
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     3
* General discussion.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     4
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     5
See
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     6
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     7
  http://en.wikipedia.org/wiki/List_of_software_development_philosophies
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     8
  http://en.wikipedia.org/wiki/List_of_eponymous_laws
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     9
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    10
* Principle of good enough (POGE).
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    11
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    12
It favours quick-and-simple (but potentially extensible) designs over
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    13
elaborate systems designed by committees.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    14
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    15
Once the quick-and-simple design is deployed, it can then evolve as needed,
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    16
driven by user requirements.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    17
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    18
This kind of design is not appropriate in systems where it is not possible to
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    19
evolve the system over time, or where the full functionality is required from
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    20
the start.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    21
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    22
See
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    23
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    24
  http://en.wikipedia.org/wiki/Principle_of_good_enough
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    25
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    26
* No Silver Bullet.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    27
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    28
There is no single development, in either technology or management technique,
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    29
which by itself promises even one order of magnitude improvement within a
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    30
decade in productivity, in reliability, in simplicity.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    31
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    32
See
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    33
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    34
  http://en.wikipedia.org/wiki/No_Silver_Bullet
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    35
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    36
* Rule of thumb.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    37
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    38
A rule of thumb is a principle that postulate in some case use simple
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    39
procedure wich produce approximate result instead use complex but exact
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    40
produce.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    41
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    42
See
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    43
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    44
  http://en.wikipedia.org/wiki/Rule_of_thumb
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    45
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    46
* The Zero One or Infinity.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    47
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    48
The Zero One or Infinity (ZOI) rule is a rule of thumb in software design. It
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    49
suggests that arbitrary limits on the number of instances of a particular
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    50
entity should not be allowed. Specifically, that an entity should either be
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    51
forbidden entirely, one should be allowed, or any number (presumably, to the
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    52
limit of available storage) of them should be allowed. It should not be the
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    53
software that puts a hard limit on the number of instances of the entity.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    54
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    55
  http://en.wikipedia.org/wiki/Zero_One_Infinity
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    56
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    57
* 80-20 rule (pareto principle).
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    58
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    59
This rule postulate that roughly 80% of the effects come from 20% of the
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    60
causes.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    61
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    62
This rule applied to optimisation (most time spent by program only by little
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    63
piece of code), functionality (80% of users use only 20% of program
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    64
functionality); bugs (fixing the top 20% of most reported bugs solve 80% of
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    65
the error and crashes).
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    66
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    67
See
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    68
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    69
  http://en.wikipedia.org/wiki/80:20_rule
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    70
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    71
* 1% rule.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    72
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    73
The 1% rule states that the number of people who create content on the
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    74
internet represents approximately 1% (or less) of the people actually viewing
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    75
that content.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    76
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    77
See
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    78
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    79
  http://en.wikipedia.org/wiki/1%25_rule_%28Internet_culture%29
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    80
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    81
* Parkinson's Law.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    82
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    83
Work expands so as to fill the time available for its completion.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    84
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    85
Data expands to fill the space available for storage.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    86
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    87
See
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    88
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    89
  http://en.wikipedia.org/wiki/Parkinson%27s_law
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    90
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    91
* Ninety-ninety rule.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    92
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    93
The first 90% of the code accounts for the first 10% of the development time.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    94
The remaining 10% of the code accounts for the other 90% of the development
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    95
time.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    96
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    97
See
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    98
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    99
  http://en.wikipedia.org/wiki/Ninety-ninety_rule
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   100
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   101
* Wirth's law.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   102
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   103
Software is getting slower more rapidly than hardware becomes faster.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   104
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   105
See
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   106
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   107
  http://en.wikipedia.org/wiki/Wirth%27s_law
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   108
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   109
* Student syndrome.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   110
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   111
Student syndrome refers to the phenomenon that many people will start to fully
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   112
apply themselves to a task just at the last possible moment before a deadline.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   113
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   114
The student syndrome is a form of procrastination ().
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   115
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   116
See
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   117
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   118
  http://en.wikipedia.org/wiki/Student_syndrome
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   119
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   120
* Conway's Law.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   121
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   122
...organizations which design systems ... are constrained to produce designs
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   123
which are copies of the communication structures of these organizations.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   124
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   125
Example: Consider a two-person team of software engineers, A and B. Say A
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   126
designs and codes a software class X. Later, the team discovers that class X
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   127
needs some new features. If A adds the features, A is likely to simply expand
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   128
X to include the new features. If B adds the new features, B may be afraid of
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   129
breaking X, and so instead will create a new derived class X2 that inherits
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   130
X's features, and puts the new features in X2. So the final design is a
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   131
reflection of who implemented the functionality.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   132
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   133
A real life example: NASA's Mars Climate Orbiter crashed because one team used
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   134
United States customary units (e.g., inches, feet and pounds) while the other
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   135
used metric units for a key spacecraft operation.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   136
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   137
See
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   138
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   139
  http://en.wikipedia.org/wiki/Conway%27s_Law
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   140
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   141
* Brooks's law.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   142
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   143
It takes some time for the people added to a project to become productive.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   144
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   145
Communication overheads increase as the number of people increases.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   146
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   147
Adding manpower to a late software project makes it later.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   148
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   149
See
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   150
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   151
  http://en.wikipedia.org/wiki/Brooks%27_law
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   152
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   153
* Code bloat.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   154
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   155
Code bloat is the production of code that is perceived as unnecessarily long,
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   156
slow, or otherwise wasteful of resources. Code bloat generally refers to
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   157
source code size but sometimes is used to refer to the generated code size or
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   158
even the binary file size.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   159
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   160
  http://en.wikipedia.org/wiki/Code_bloat
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   161
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   162
* Beerware.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   163
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   164
Beerware is term for software released under a very relaxed license. It
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   165
provides the end user with the right to use a particular program.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   166
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   167
Should the user of the product meet the author and consider the software
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   168
useful, he is encouraged to buy the author a beer 'in return' (or, in some
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   169
variations, drink a beer in the author's honor).
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   170
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   171
/* ----------------------------------------------------------------------------
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   172
 * "THE BEER-WARE LICENSE" (Revision 42):
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   173
 * <phk@FreeBSD.ORG> wrote this file. As long as you retain this notice you
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   174
 * can do whatever you want with this stuff. If we meet some day, and you think
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   175
 * this stuff is worth it, you can buy me a beer in return Poul-Henning Kamp
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   176
 * ----------------------------------------------------------------------------
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   177
 */
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   178
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   179
  http://en.wikipedia.org/wiki/Beerware
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   180
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   181
* Demoware.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   182
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   183
Demoware (also known as trialware) is commercial software released for free
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   184
(shareware) in a version which is limited in one or more ways.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   185
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   186
  http://en.wikipedia.org/wiki/Demoware
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   187
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   188
* Crippleware.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   189
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   190
Crippleware is any product whose functions have been limited (or "crippled")
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   191
with the sole purpose of encouraging or requiring the user to pay for those
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   192
functions (either by paying a one-time fee or an on-going subscription fee).
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   193
Crippleware is also a term used to describe software that makes use of Digital
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   194
Rights Management.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   195
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   196
  http://en.wikipedia.org/wiki/Crippleware
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   197
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   198
* Nagware.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   199
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   200
Nagware (also known as begware, annoyware or a nagscreen) is a type of
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   201
shareware that reminds (or nags) the user to register it by paying a fee. It
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   202
usually does this by popping up a message when the user starts the program, or
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   203
intermittently while the user is using the application. These messages can
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   204
appear as windows obscuring part of the screen or message boxes that can
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   205
quickly be closed. Some nagware keeps the message up for a certain time
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   206
period, forcing the user to wait to continue to use the program.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   207
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   208
  http://en.wikipedia.org/wiki/Nagware
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   209
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   210
* Registerware.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   211
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   212
Registerware refers to computer software which requires the user to give
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   213
personal information, e.g an email address, through registration in order to
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   214
download or use the program.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   215
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   216
  http://en.wikipedia.org/wiki/Registerware
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   217
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   218
* Scareware.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   219
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   220
Scareware comprises several classes of scam software, often with limited or no
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   221
benefit, sold to consumers via certain unethical marketing practices.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   222
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   223
  http://en.wikipedia.org/wiki/Scareware
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   224
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   225
* Donationware.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   226
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   227
Donationware is a licensing model that supplies fully operational software to
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   228
the user and pleads for an optional donation be paid to the programmer or a
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   229
third-party beneficiary (usually a non-profit). The amount of the donation may
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   230
also be stipulated by the author, or it may be left to the discretion of the
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   231
user, based on individual perceptions of the software's value. Since
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   232
donationware comes fully operational (i.e. not crippleware) and payment is
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   233
optional, it is a type of freeware.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   234
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   235
  http://en.wikipedia.org/wiki/Donationware
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   236
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   237
* Freeware.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   238
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   239
Freeware is computer software that is available for use at no cost or for an
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   240
optional fee.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   241
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   242
  http://en.wikipedia.org/wiki/Freeware
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   243
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   244
* Shareware.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   245
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   246
Shareware is proprietary software that is provided to users without payment on
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   247
a trial basis and is often limited by any combination of functionality,
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   248
availability or convenience. Shareware is often offered as a download from an
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   249
Internet website or as a compact disc included with a magazine.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   250
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   251
The rationale behind shareware is to give buyers the opportunity to use the
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   252
program and judge its usefulness before purchasing a license for the full
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   253
version of the software.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   254
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   255
The words "free trial" or "trial version" are indicative of shareware.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   256
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   257
  http://en.wikipedia.org/wiki/Shareware
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   258
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   259
* Software bloat.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   260
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   261
Software bloat is a term used to describe the tendency of newer computer
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   262
programs to have a larger installation footprint, or have many unnecessary
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   263
features that are not used by end users, or just generally use more system
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   264
resources than necessary, while offering little or no benefit to its users.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   265
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   266
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   267
Comparison of Microsoft Windows minimum hardware requirements (for 32-bit
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   268
versions):
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   269
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   270
Windows version     Processor   Memory  Hard disk
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   271
Windows 95[4]        25 MHz      4 MB    ~50 MB
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   272
Windows 98[5]        66 MHz     16 MB   ~200 MB
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   273
Windows 2000[6]     133 MHz     32 MB    650 MB
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   274
Windows XP[7]       233 MHz     64 MB    1.5 GB
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   275
Windows Vista[8]    800 MHz    512 MB     15 GB
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   276
Windows 7[9]          1 GHz      1 GB     16 GB
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   277
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   278
Every program attempts to expand until it can read mail. Those programs which
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   279
cannot so expand are replaced by ones which can.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   280
                                                   -- Jamie Zawinski
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   281
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   282
** Foistware.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   283
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   284
Foistware, Bloatware, or Bundler is software bundled with completely unrelated
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   285
programs. That means that there is no particular property in the software that
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   286
makes it foistware, but rather the context in which it was installed.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   287
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   288
  http://en.wikipedia.org/wiki/Foistware
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   289
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   290
** Bloatware.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   291
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   292
Software bloat is a term used to describe the tendency of newer computer
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   293
programs to have a larger installation footprint, or have many unnecessary
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   294
features that are not used by end users, or just generally use more system
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   295
resources than necessary, while offering little or no benefit to its users.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   296
Bloatware, or foistware, is also used to describe software that comes
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   297
pre-installed on a computer when it's bought, mostly consisting of
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   298
time-limited trials or feature-lacking basic or "beginner" versions.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   299
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   300
  http://en.wikipedia.org/wiki/Bloatware
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   301
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   302
** Shovelware.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   303
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   304
Shovelware is sometimes used to denote foistware which was chosen to fill up
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   305
the remaining space on a freely distributed CD-ROM.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   306
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   307
  http://en.wikipedia.org/wiki/Shovelware
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   308
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   309
* Second-system effect.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   310
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   311
In computing, the second-system effect or sometimes the second-system syndrome
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   312
refers to the tendency, when following on from a relatively small, elegant,
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   313
and successful system, to design the successor as an elephantine,
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   314
feature-laden monstrosity. The term was first used by Fred Brooks in his
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   315
classic The Mythical Man-Month.[1] It described the jump from a set of simple
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   316
operating systems on the IBM 700/7000 series to OS/360 on the 360 series.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   317
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   318
* Inner-platform effect.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   319
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   320
The inner-platform effect is the tendency of software architects to create a
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   321
system so customizable as to become a replica, and often a poor replica, of
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   322
the software development platform they are using.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   323
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   324
XXX read more http://thedailywtf.com/Articles/The_Inner-Platform_Effect.aspx
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   325
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   326
  http://en.wikipedia.org/wiki/Inner-platform_effect
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   327
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   328
* Feature creep.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   329
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   330
Feature creep is the proliferation of features in a product such as computer
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   331
software. Extra features go beyond the basic function of the product and so
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   332
can result in baroque over-complication, or "featuritis", rather than simple,
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   333
elegant design.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   334
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   335
  http://en.wikipedia.org/wiki/Feature_creep
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   336
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   337
* Bullet-point engineering.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   338
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   339
Bullet-point engineering is a software design anti-pattern where developers
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   340
use the features of competing software packages as checklists of features to
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   341
implement in their own product. These features are often implemented poorly
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   342
and haphazardly, without any real design, merely so they can be added to a
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   343
bulleted list of features in marketing material. Bullet point engineering
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   344
often leads to feature creep and software bloat but may also simply result in
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   345
a poorly designed imitative product.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   346
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   347
  http://en.wikipedia.org/wiki/Bullet-point_engineering
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   348
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   349
* KISS
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   350
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   351
Keep it simple and stupid, or keep it simple, stupid!
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   352
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   353
Instruction creep and function creep, two instances of creeping featuritis,
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   354
are examples of failure to follow the KISS principle in software development.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   355
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   356
  http://en.wikipedia.org/wiki/KISS_principle
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   357
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   358
* Minimalism.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   359
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   360
In computing, minimalism refers to the application of minimalist philosophies
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   361
and principles in hardware and software design and usage.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   362
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   363
  http://en.wikipedia.org/wiki/Minimalism_%28computing%29
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   364
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   365
* Unix philosophy.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   366
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   367
** From Doug McIlroy.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   368
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   369
"Do one thing and do it well."
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   370
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   371
"Write programs that do one thing and do it well. Write programs to work
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   372
together. Write programs to handle text streams, because that is a universal
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   373
interface."
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   374
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   375
** From Pike: Notes on Programming in C.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   376
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   377
 1. You cannot tell where a program is going to spend its time. Bottlenecks
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   378
occur in surprising places, so do not try to second guess and put in a speed
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   379
hack until you've proven that's where the bottleneck is.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   380
 2. Measure. Do not tune for speed until your performance analysis tool tells
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   381
you which part of the code overwhelms the rest.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   382
 3. Fancy algorithms tend to run more slowly on small data sets than simple
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   383
algorithms. They tend to have a large constant factor in O(n) analysis, and n
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   384
is usually small. So don't get fancy unless Rule 2 indicates that n is big
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   385
enough.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   386
 4. Simplify your algorithms and data structures wherever it makes sense
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   387
because fancy algorithms are more difficult to implement without defects. The
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   388
data structures in most programs can be built from array lists, linked lists,
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   389
hash tables, and binary trees.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   390
 5. Data dominates. If you have chosen the right data structures and organized
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   391
things well, the algorithms will almost always be self-evident. Data
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   392
structures, not algorithms, are central to programming.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   393
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   394
** From Mike Gancarz: The UNIX Philosophy.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   395
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   396
 1. Small is beautiful.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   397
 2. Make each program do one thing well.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   398
 3. Build a prototype as soon as possible.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   399
 4. Choose portability over efficiency.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   400
 5. Store data in flat text files.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   401
 6. Use software leverage to your advantage.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   402
 7. Use shell scripts to increase leverage and portability.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   403
 8. Avoid captive user interfaces.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   404
 9. Make every program a filter.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   405
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   406
With this not all agree:
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   407
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   408
 1. Allow the user to tailor the environment.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   409
 2. Make operating system kernels small and lightweight.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   410
 3. Use lowercase and keep it short.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   411
 4. Save trees.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   412
 5. Silence is golden.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   413
 6. Think parallel.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   414
 7. The sum of the parts is greater than the whole.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   415
 8. Look for the 90-percent solution.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   416
 9. Worse is better.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   417
 10. Think hierarchically.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   418
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   419
** Misc.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   420
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   421
"Unix is simple. It just takes a genius to understand its simplicity."
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   422
                              -– Dennis Ritchie
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   423
"Unix never says 'please'."
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   424
                              -– Rob Pike
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   425
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   426
  http://en.wikipedia.org/wiki/Unix_philosophy
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   427
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   428
* Worse is better.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   429
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   430
In the "Worse is better" design style, simplicity of both the interface and
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   431
the implementation is more important than any other attribute of the system —
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   432
including correctness, consistency and completeness.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   433
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   434
Simplicity
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   435
  The design must be simple, both in implementation and interface. It is
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   436
  more important for the implementation to be simpler than the interface.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   437
  Simplicity is the most important consideration in a design.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   438
Correctness
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   439
  The design must be correct in all observable aspects. It is slightly better
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   440
  to be simple than correct.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   441
Consistency
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   442
  The design must not be overly inconsistent. Consistency can be sacrificed
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   443
  for simplicity in some cases, but it is better to drop those parts of the
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   444
  design that deal with less common circumstances than to introduce either
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   445
  implementational complexity or inconsistency.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   446
Completeness
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   447
  The design must cover as many important situations as is practical. All
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   448
  reasonably expected cases should be covered. Completeness can be sacrificed
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   449
  in favor of any other quality. In fact, completeness must be sacrificed
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   450
  whenever implementation simplicity is jeopardized. Consistency can be
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   451
  sacrificed to achieve completeness if simplicity is retained; especially
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   452
  worthless is consistency of interface.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   453
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   454
  http://dreamsongs.com/WIB.html
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   455
                Lisp: Good News, Bad News, How to Win Big
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   456
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   457
* The right thing.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   458
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   459
The MIT approach (known as "The right thing"):
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   460
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   461
Simplicity
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   462
  The design must be simple, both in implementation and interface. It is
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   463
  more important for the interface to be simpler than the implementation.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   464
Correctness
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   465
  The design must be correct in all observable aspects. Incorrectness is
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   466
  simply not allowed.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   467
Consistency
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   468
  The design must be consistent. A design is allowed to be slightly less
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   469
  simple and less complete to avoid inconsistency. Consistency is as important
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   470
  as correctness.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   471
Completeness
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   472
  The design must cover as many important situations as is practical. All
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   473
  reasonably expected cases must be covered. Simplicity is not allowed to
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   474
  overly reduce completeness.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   475
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   476
  http://dreamsongs.com/WIB.html
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   477
                Lisp: Good News, Bad News, How to Win Big
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   478
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   479
* YAGNI.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   480
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   481
"You aren't gonna need it" (or YAGNI for short) is the principle in extreme
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   482
programming that programmers should not add functionality until it is
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   483
necessary.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   484
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   485
  http://en.wikipedia.org/wiki/You_ain%27t_gonna_need_it
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   486
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   487
* DRY (DIE).
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   488
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   489
Don't Repeat Yourself (DRY) or Duplication is Evil (DIE).
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   490
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   491
 * VCS allow multiple and diverging copies ("branches").
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   492
 * Source code generation.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   493
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   494
  http://en.wikipedia.org/wiki/Don%27t_repeat_yourself
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   495
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   496
* Do it yourself (DIY).
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   497
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   498
Do it yourself (or DIY) is a term used to describe building, modifying, or
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   499
repairing of something without the aid of experts or professionals.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   500
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   501
when tasklist longer then people life mutch easy use already written libraries
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   502
then wrote own.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   503
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   504
  http://en.wikipedia.org/wiki/Do_it_yourself
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   505
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   506
* Once and Only Once (OAOO).
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   507
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   508
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   509
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   510
* MoSCoW Method.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   511
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   512
The capital letters in MoSCoW stand for:
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   513
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   514
 * M - MUST have this (included in the current delivery timebox in order
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   515
   for it to be a success).
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   516
 * S - SHOULD have this if at all possible (critical to the success of the
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   517
   project, but are not necessary for delivery in the current delivery
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   518
   timebox).
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   519
 * C - COULD have this if it does not affect anything else (nice to have).
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   520
 * W - WON'T have this time but WOULD like in the future.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   521
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   522
  http://en.wikipedia.org/wiki/MoSCoW_Method
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   523
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   524
* Abandonware.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   525
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   526
Abandonware is a term used to describe computer software that is no longer
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   527
sold or supported, or whose copyright ownership may be unclear for various
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   528
reasons. While the term has been applied largely to older games, utility
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   529
software, etc.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   530
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   531
  http://en.wikipedia.org/wiki/Abandonware
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   532
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   533
* Separation of concerns.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   534
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   535
In computer science, separation of concerns (SoC) is the process of separating
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   536
a computer program into distinct features that overlap in functionality as
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   537
little as possible. A concern is any piece of interest or focus in a program.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   538
Typically, concerns are synonymous with features or behaviors. Progress
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   539
towards SoC is traditionally achieved through modularity of programming and
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   540
encapsulation (or "transparency" of operation), with the help of information
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   541
hiding. Layered designs in information systems are also often based on
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   542
separation of concerns (e.g., presentation layer, business logic layer, data
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   543
access layer, database layer).
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   544
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   545
HyperText Markup Language (HTML) and cascading style sheets (CSS) are
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   546
languages intended to separate style from content.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   547
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   548
  http://en.wikipedia.org/wiki/Separation_of_concerns
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   549
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   550
* Modular design.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   551
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   552
In systems engineering, modular design — or "modularity in design" — is an
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   553
approach that subdivides a system into smaller parts (modules) that can be
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   554
independently created and then used in different systems to drive multiple
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   555
functionalities.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   556
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   557
  http://en.wikipedia.org/wiki/Modular_design
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   558
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   559
* Occam's razor.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   560
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   561
"entia non sunt multiplicanda praeter necessitatem"
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   562
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   563
Entities must not be multiplied beyond necessity.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   564
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   565
* Code and fix.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   566
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   567
Programmers immediately begin producing code. Bugs must be fixed before the
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   568
product can be shipped.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   569
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   570
  http://en.wikipedia.org/wiki/Code_and_fix
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   571
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   572
* Cowboy coding.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   573
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   574
Cowboy coding is a term used to describe software development where the
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   575
developers have autonomy over the development process. This includes control
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   576
of the project's schedule, algorithms, tools, and coding style.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   577
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   578
A cowboy coder can be a lone developer or part of a group of developers with
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   579
either no external management or management that controls only non-development
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   580
aspects of the project, such as its nature, scope, and feature set (the
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   581
"what", but not the "how").
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   582
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   583
  http://en.wikipedia.org/wiki/Cowboy_coding
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   584
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   585
* Extreme Programming.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   586
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   587
  http://en.wikipedia.org/wiki/Extreme_Programming
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   588
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   589
* Hollywood Principle.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   590
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   591
In computer programming, the Hollywood Principle is stated as "don't call us,
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   592
we'll call you." It has applications in software engineering; see also
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   593
implicit invocation for a related architectural principle.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   594
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   595
  http://en.wikipedia.org/wiki/Hollywood_Principle
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   596
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   597
* Inversion of control.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   598
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   599
Inversion of control, or IoC, is an abstract principle describing an aspect of
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   600
some software architecture designs in which the flow of control of a system is
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   601
inverted in comparison to procedural programming.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   602
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   603
  http://en.wikipedia.org/wiki/Inversion_of_control
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   604
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   605
* Literate programming.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   606
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   607
  http://en.wikipedia.org/wiki/Literate_Programming
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   608
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   609
* Model-driven architecture.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   610
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   611
  http://en.wikipedia.org/wiki/Model-driven_architecture
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   612
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   613
* Quick-and-dirty.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   614
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   615
Quick-and-dirty is a term used in reference to anything that is an easy way to
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   616
implement a workaround or "kludge." Its usage is popular among programmers,
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   617
who use it to describe a crude solution or programming implementation that is
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   618
imperfect, inelegant, or otherwise inadequate, but which solves or masks the
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   619
problem at hand, and is generally faster and easier to put in place than a
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   620
proper solution.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   621
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   622
  http://en.wikipedia.org/wiki/Quick-and-dirty
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   623
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   624
* Release early, release often.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   625
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   626
Release early, release often (sometimes abbreviated RERO) is a software
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   627
development philosophy that emphasizes the importance of early and frequent
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   628
releases in creating a tight feedback loop between developers and testers or
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   629
users.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   630
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   631
  http://en.wikipedia.org/wiki/Release_early,_release_often
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   632
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   633
* Test-driven development.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   634
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   635
Test-driven development (TDD) is a software development technique that relies
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   636
on the repetition of a very short development cycle: First the developer
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   637
writes a failing automated test case that defines a desired improvement or new
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   638
function, then produces code to pass that test and finally refactors the new
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   639
code to acceptable standards.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   640
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   641
  http://en.wikipedia.org/wiki/Test-driven_development
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   642
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   643
* Unified Process.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   644
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   645
The Unified Software Development Process or Unified Process is a popular
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   646
iterative and incremental software development process framework. The
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   647
best-known and extensively documented refinement of the Unified Process is the
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   648
Rational Unified Process (RUP).
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   649
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   650
  http://en.wikipedia.org/wiki/Unified_Process
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   651
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   652
* Waterfall model.
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   653
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   654
   1. Requirements specification
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   655
   2. Design
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   656
   3. Construction (AKA implementation or coding)
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   657
   4. Integration
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   658
   5. Testing and debugging (AKA Validation)
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   659
   6. Installation
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   660
   7. Maintenance
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   661
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   662
  http://en.wikipedia.org/wiki/Waterfall_model
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   663
645990ee83c8 Devel rules.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   664
* Do it yourself.