It is my site!
           Alex Shell

 Starting 

My work
Methodology   of management  

  Analytics
 Picture albums
 Humour
 Puzzles
 Games
 Music
 VAU!
 Extreme Programming
 Archive


 

Google
Web
On a site

" New methodology of programming ", Martin Fowler

Martin Fowler
Chief Scientist, ThoughtWorks

Original text at martinfowler.com

For the last some years have strongly grown interest to so-called flexible metodologiyam development of the software (known also under the name " facilitated metodology "). In given clause(article) their basic characteristics are resulted(brought), and the main attention is given not to "weight", and adaptive essence of these(it) metodology and their orientations to the person. Besides the brief review existing at present metodology similar type here is given and factors which will help(assist) you to solve are specified, costs(stands) or it is not necessary to go this(thus) unbeaten by.

From full absence - to monumentalism, from monumentalism - to flexibility

As a rule, development of the software represents chaotic enough activity which can be characterized a phrase " code and fix " (" we write and we correct "). The Coherent plan does not exist, and the general(common) project represents simply a mix of short-term decisions. Such approach can fit for creation of small system, however if the system starts to grow, add in it(her) new properties begins more and more inconveniently. Besides in it(her) will appear more and more than mistakes(errors) which will be more difficult for correcting all. Typical attributes of such system - the long test period already after development of all functionality of system is finished. Thus plans of release of the program as at similar testing and correction of mistakes(errors) adequate planning is simply impossible are broken all.

So we also worked long enough time. However, we always had an alternative - to use methodology. The methodology transforms creation of software product into the ordered process by means of which it is possible to make work of the programmer more predicted and effective. For this purpose the detailed description of process of creation of system is created, the special place in which borrows(occupies) planning (similarly other engineering disciplines).

Such methodology exist already for a long time. It is impossible to tell, that they very much are effective. With even smaller degree of confidence it is possible to speak about their popularity. More often them accuse of bureaucratism - to follow such methodology, it is necessary to carry out so many various instructions that all rate of works is slowed down. For this reason them name heavy metodologiyami, or, according to Jim Khajsmita's term (Jim Highsmith), - monumental.

For last years in a counterbalance this metodologiyam has appeared group new which could be named facilitated (lightweight) earlier. Now for them use other term - flexible (agile) methodology. Appeal new metodology for many consists in absence of the bureaucratism inherent monumental metodologiyam. New methodology represent attempt to reach(achieve) the necessary compromise between too overloaded process of development and its(his) full absence. In other words, in them just it is enough volume of process to receive reasonable feedback.

In comparison with monumental metodologiyami, in flexible the basic accents(stresses) are displaced all. The most obvious distinction - smaller orientation to the documentation that is expressed in its(her) smaller volume for each specific target. Will be more correct in this case to speak about orientirovannosti on a code, that is the basic precondition consists that the key part of the documentation is an initial code.

However, I think, what not it is the main difference flexible metodology from monumental. Absence of the documentation is a consequence(an investigation) of much more essential distinctions:

  • Flexible methodology are adaptive, instead of are predicted. For heavy metodology detailed planning great volume of development is necessary, and such approach works - however until changes will begin. Hence, for this purpose metodology to resist to any changes naturally enough. Flexible methodology, on the contrary, changes welcome. Unlike heavy, they have been conceived as processes which adapt changes and only win from them, even in that case when changes occur(happen) in them.
  • Flexible methodology are focused on the person, instead of on process. In them it is clearly declared necessity to consider in work natural qualities of a human nature, instead of to operate(work) with it(him) in defiance. Except for it(this) in flexible metodologiyakh it is especially emphasized, that work on creation of software products should bring pleasure.

In the subsequent sections I shall consider(examine) these distinctions in more detail that you clearly understood, that process in what its(his) advantages and lacks, and whether it is necessary to you to use it(him) in the work - and as to the developer of software products and as to the customer means under concepts "adaptive" and " focused on the person ".

Predicted or adaptive?

Designing and designing

The traditional sample for metodology programming are engineering disciplines, such, for example, as civil construction and mechanical engineering where the special attention is given planning which precedes direct construction. Engineers develop a lot of drawings, in which precisely it is underlined, what exactly should be constructed and how to connect all components in a single whole. During work above these drawings various design decisions - for example are accepted many how to distribute(allocate) a cargo on the bridge, etc. After that drawings are transferred(transmitted) other group of people, more often, in general in other company which will be actually engaged in construction. It is considered to be, that builders in accuracy reproduce everything, that has been designated on drawings. Actually, builders collide(face) thus with some problems, however, as a rule, they are insignificant.

Drawings where separate elements of construction are presented, lay down in a basis of the detailed drawing which allows to define(determine) specific targets and dependences between them. And it, in turn, enables to calculate cost and time(temporary) frameworks of construction. Besides here it is in detail described, how builders should do(make) the work. Owing to it(this) work of builders becomes even less intellectual though, certainly, quite often demands very good skills of manual skills.

So, in this case before us absolutely different two kinds of activity. On the one hand, designing which is difficultly predicted process and for which expensive creative experts are required, with another - designing which to predict much easier. As soon as the project is ready, it is possible to plan designing. As soon as the plan is ready, designing becomes quite predicted process. In civil construction a phase of designing much masshtabnee, rather than designing and planning - both from the point of view of the budget, and on time.

In a similar way the approach to development of the software, accepted in many metodologiyakh looks(appears) also: it is considered, that it is necessary to have the preliminary plan of works on which people of lower qualification can work. For this purpose designing should be separated from designing. Hence, it is necessary to design process of creation of software product so that work on direct designing (at presence of the plan) became simple.

So, what form such plan should have? Many consider(count), that the notation created, for example, by means of language UML should play a role of the plan. If by means of UML it is possible to display all essential design decisions, means, it is possible to create the necessary plan and to transfer(transmit) his then to encoders which will carry out a problem(task) in designing.

However here there is an important question: whether it is possible to create such plan which will transform coding into rather simple work? And, if yes, whether that is coding by so dear(expensive) and long-term process that the similar approach justified itself?

All this sets thinking above several questions. First, it is how much complex(difficult) to finish the project executed in language UML, to such condition when it(he) can be transferred(transmitted) programmers. The problem consists that the notation in language UML can look(appear) very well on a paper and thus to comprise serious defects which will be shown only when work on direct programming will begin. In civil construction founders of models lean(base) on the long-term experience fixed(recorded) in the whole system of rules. Besides base positions of model (for example, designing of interaction of various forces) give in to the mathematical analysis. Unlike such models, UML and diagrams similar to them it is possible to check up only in one image - by means of an expert estimation. Certainly, such check bears fruit, however thus some mistakes(errors) can remain, and you learn(find out) about them only during coding or testing. Even skilled designers (as what I consider(count), for example, themselves) quite often test surprise, seeing as their plan is embodied in software product.

Now concerning comparative cost. At construction of the bridge for works on designing leaves about 10 % from all cost of works. The rest - expenses for designing. In program development time, which is spent for coding much less (Makkonnell (McConnell) has assumed, that in the big project on coding and a writing(spelling) of a test code is necessary only 15 %, that is the figure just what isn't needed repeating a parity(ratio) of planning and designing at construction of the bridge. Even if to consider(count) testing by a part of designing all the same designing will borrow(occupy) not less than 50 % of works.) from here a question on essence of designing by development of software products and its(his) differences from designing in other areas of engineering activity.

Presence of similar questions has forced Jack Rivza (Jack Reeves) to assume, that actually the design document is the initial code, and all phase of designing is reduced to use of the compiler and komponovshchika. And really, everything, that it is possible to carry to designing, can and should be automated.

Reflecting on all this, it is possible to come to following conclusions:

  • By development of the software designing manages so cheaply, that charges on it(him) can be not considered at all
  • By development of the software the basic amount of works is necessary on designing for which talented creative experts are necessary
  • Any creative process trudnopredskazuem, therefore prognoziruemost in this case can become the unattainable purpose
  • By development of the software principles of civil construction and mechanical engineering need to be used very cautiously. It absolutely other kind of activity for which other process is necessary

Unpredictability of requirements

Each time when I collide(face) with the project in which problems are observed, I hear the same. Developers come and speak: " All problems of that the customer constantly changes requirements ". In this situation I am am surprised only with one - why with all this are surprised. By development program business-appendices of the requirement should change, it is normal. A question only that it is possible to make in this occasion.

Certainly, it is possible to consider(count), that varying requirements - result of bad development of requirements. Idea behind development of requirements it is necessary simple - to receive a full picture of requirements before work above creation of software product will begin, to force the customer to subscribe under these requirements, and then to arrange, interfering their subsequent change.

All problem consists what even attempt to realize variants of requirements - uneasy enough problem(task). Moreover, as a rule, it(she) becomes complicated also that the organizations, engaged development ON, do not give the information on the prices. As a result the customer appears in a situation of the person which, maybe, and wants that its(his) machine(car) had a hatch in a roof, however the seller cannot tell, how many it will be necessary to pay in addition for it(him) - 10 dollars or 10 thousand. How it seems to you, whether it is possible to solve in such situation, it is necessary to pay for it(him) or not?

To estimate(appreciate) duration of process of development ON heavy for the several reasons. First, creation of software products represents work on designing which is difficult for planning and estimating(appreciating). Secondly, initial materials quickly vary. Thirdly, very much much depends on concrete people who perform work, and people it is always complex(difficult) to predict and approach(suit) to them with any measures.

The non-material essence of software products also plays the role. It is very difficult to estimate(appreciate) the importance any свойствa programs while you do not start to use it(him) actually. Only working with the first version of the program, you start to understand, what properties tsenny and what are not present.

It leads to ironical enough conclusion: customers believe all, that requirements can be changed. Eventually, at a word "software" there is a word soft. So, requirements not simply can vary - they should vary. It is necessary to put many forces and energy to force the customer to fix(record) precisely the requirements. To make it it is even more complex(difficult), if customers once plaid about development ON - then they know what to change the program simply.

However, even if you managed to receive the precise list of requirements, all the same you are doomed. In modern economy value of those or other properties of software products varies too quickly. That is a sufficient set of requirements today, appears become outdated(out-of-date) already in half a year. Even if customers can give the stable list of requirements, the world of business will not stand with it(this). And in fact many changes in the world of business are absolutely unpredictable (that who I will tell, that not the rights, or lzhet, or have already earned one million, playing on a stock exchange).

All other in development of the software depends on requirements. If you do not have stable list of requirements, you will not manage to make the predicted plan of works.

Predictability is impossible?

Generally, it is possible(probable). There are certain kinds of program development where predictability is possible(probable). Such organizations as group on development of the software for spacecrafts in NASA show the excellent proof of that creation of software products can be predicted process. For this purpose observance of weight of reserves is necessary, the greater(big) command(team) of developers and stable requirements is a lot of time. Yes, there are program projects for spacecrafts, however I do not think, that the most part program business-appendices can be carried to this category. Other type of process is necessary for them.

One of serious mistakes(errors) - to pretend, that you use predicted process while it is not possible to you. Developers metodology badly define(determine) boundary conditions, that is, those situations in which the methodology from suitable passes in the category unusable. The majority metodologov want, that as much as possible people used their development, thus they do not realize boundary conditions and do not inform on them users. As a result of it(this) the methodology is quite often used in improper conditions, for example, predicted methodology can use in a unpredictable situation.

Yes, the temptation is great. Predictability - very valuable property. However if you will consider(count), that can predict events while have already lost ability it to do(make), by all means appear in a situation when the plan of works is created in advance, and the moment when it(he) ceases to correspond(meet) to the valid state of affairs, it is already missed. And here, you see, how the plan and a reality slowly miss in opposite directions. Certainly, it is possible to create long enough visibility of that the plan still carries out the function. But during any moment this divergence becomes so serious, that the plan simply collapses. As a rule, event this(thus) rather painful(unhealthy).

So, the situation is unpredictable, and the predicted methodology cannot be used more. The Hard blow. It means, that many models of management of process of the development, many models of mutual relations with the customer do not exist any more. Predicted process and as it is difficult to refuse it(him) was how much better! As well as in the majority of problems, the most difficult in this case - simply to recognize, that the problem exists.

However, it is not necessary to believe, that without predicted process you plunge into uncontrollable chaos. No, process which gives the control over unpredictability is simply necessary to you. And here we closely approach(suit) to concept of adaptibility.

We operate unpredictable process

So, how we manage to keep calmness, living in the unpredictable world? The most important and the most complex(difficult) - precisely nobility, that actually occurs(happens) at the moment. The mechanism giving truthful data about a current situation through short time intervals is necessary for us.

For anybody not the secret, that in program development by a key to such mechanism is iterativnost. Iterative development are known for a long time and under different names: incremental, evolutionary, step and spiral - all you will not list. During iterative development working versions the systems having a certain limited set of demanded properties, are made often enough. Such intermediate versions have not enough functionality, however in all rest they completely correspond(meet) to final system. Intermediate versions should be completely integrated and as it is good ottestirovany, as well as the final version of system.

Nothing approaches the project to a reality how the tested integrated system. In documents the diversified mistakes(errors) can contain. The set of mistakes(errors) conceals in itself not tested code. However if people start to work directly with system all mistakes(errors) and malfunctions come up outside - and as defects in a program code so incorrectly understood requirements.

Advantages of iterative development can be used and in predicted process. However for adaptive processes iterativnost vital as they should work at constant changes of requirements for properties of system. Owing to it(this) there is a certain style of planning at which all long-term plans are rather indistinct, and stability the short-term plans developed for given concrete iteration possess only. Thus, iterativnost enables to make each iteration by the reliable basis for planning following.

Stumbling-block in this case is the question on duration of each iteration. The common opinion on this account(invoice) is not present. Extreme Programming (XP) assumes, that iteration should last from one about three weeks. SCRUM suggests to prolong it(her) about one month. Crystal - it is even more. However, everyone agree in one - it is necessary to do(make) iteration so short, how much(as far as) it is possible(probable). Frequent iterations allow developers to receive more often data on system from its(her) customers so, it is better to imagine a current situation.

The adaptive customer

Adaptive process demands other attitudes(relations) with the customer (not such with what them usually represent), especially if development is carried out by the foreign organization. If you employ separate firm-developer, the majority of customers will want to conclude the contract with the fixed cost of works. Procedure is known: you explain the companies-developers that it is necessary to make, they name the price, you accept it(her), then the responsibility lays down on shoulders of developers which should create demanded software product.

The contract with the fixed cost assumes an invariance of requirements, so, use of predicted process. If to use adaptive process at astable requirements, usual installation on the fixed payment any more does not work. Attempt to squeeze adaptive process in frameworks of the fixed payment leads to rather unpleasant conflicts. Thus the most unpleasant that the customer will suffer at all less companies-developers. Eventually, the software product if that was not demanded with business would not be necessary for the customer. If it(he) will not receive this software product, business will suffer. So, even if the customer will not pay the company to the developer of anything, it(he) all the same incurs losses. Moreover, it(he) loses even more than if has paid for ready system (what for to the customer to pay for it(her) of money greater(big), rather than its(her) commercial cost?)

Thus, at signing the contract with the fixed sum of payment of situations when it is impossible to use predicted process, both parties(sides) risk. In other words, it means, that the customer should operate(work) in another way.

At adaptive process it is much easier to customer to carry out the control over development of the software. In the end each both iterations - both the customer, and the developer - estimate(appreciate) current successes and correct(adjust) a direction of works. Attitudes(relations) arising at it(this) between them - any more formality, and the present(true) business cooperation. Certainly, close kontaktirovanie will approach(suit) not to each customer, and not to each developer. Nevertheless, that adaptive process has appeared effective, it is necessary.

The basic advantage of such approach from the point of view of customers is that process of development of the software becomes more susceptible to their needs. Suitable for work (thus minimal on functionality) the version of system can be started in operation very quickly. After that the customer can make changes to its(her) opportunities if that is demanded with business or if it(he) has come to such conclusion after real work with system.

First of all - people

To carry out adaptive process in practice - a uneasy problem(task). In particular, for this purpose very good command(team) of developers is necessary. Thus it is necessary, that the command(team) not simply consisted of experts of high test, but also able to work harmoniously. Here the interesting interrelation is observed: for adaptive process the strong command(team) of developers is necessary, but also the majority of good experts too prefer adaptive process.

Compatible programming devices

One of the primary goals which put before itself traditional methodology - to provide process of works in which people will represent zamenimye blocks. Thus to people concern simply as to resources of various types. You have an analyst, some encoders, some testers, the project head. Individuality is not important - only roles. Thus, at planning you does not interest, what analyst at you and what testers - the main thing, the nobility, how many at you workers for their quantity(amount) needs to be considered by way of.

Here again there is very important question: whether it is possible to consider(count) the people borrowed(occupied) in creation of the software, zamenimymi as blocks? Flexible to methodology speak - is not present.

Probably, most brightly about it(this) writes Alister Koubern (Alistair Cockburn). In the work " People as nonlinear and most important components in creation of the software " (" Characterizing People as Non-Linear, First-Order Components in Software Development "), it(he) approves(confirms), that components which will behave also in the predicted image are necessary to predicted process. People cannot be considered as those. Moreover, as a result of studying various projects Koubern comes to conclusion, that people represent the most important factor in creation of software products.

In the name of [clause(article)] I name people "components". It is accepted to do(make) it in the works, the processes devoted to designing and metodology. A mistake(an error) in such approach is that "people", unlike "components" rather changeable and nonlinear, and each person in case of success or failures behaves in the unique image. These factors have prime value, they cannot be neglected. Inability of founders of processes and metodology to take them into consideration results(brings), as we quite often see it, to various unexpectedness in realization of the project.
-- [Koubern]

Koubern it is most frank in the chelovekotsentristskikh sights at development of the software, however similar ideas are a habitual theme for discussion in our branch. More often the problem consists that the methodology holds opposite opinion concerning influence of the human factor on success or neuspeshnost the project.

Results do not keep itself waiting long. If you consider(count) the developers as simply compatible programming devices will not search to them for an individual approach. It worsens moral atmosphere (and productivity) in the company. Good experts will look for to themselves other, best places of work, and you will have to what you so aspired - compatible programming devices.

To put people on the first place - a serious step for which realization all your resoluteness is required. The attitude(relation) to people as to resources has deeply taken roots in business-consciousness, its(his) sources originate in " Scientific management " Frederika Taylor (Frederick Taylor). At factory management this approach, probably, also justifies itself. However for such creative and professional work as what I consider(count) creation of software products, it(he) is not necessary. (By the way, modern manufacture also departs from Taylor's model.)


Email me