New methodology of programming
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 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 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) 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 task. In particular, for this purpose very good team of developers is necessary. Thus it is necessary, that the 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 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.)
Programmers are responsible(crucial) professionals
One of Taylor's main ideas consists that people who perform work is not those who is best understands how it is necessary to do(make) it(her). At factory it can be and is true, on that there are some reasons. So, in particular, many of factory workers do not possess in the big degree abilities to creative activity. Besides between workers and heads always there is some opposition as the less workers will receive, the more money will get to heads.
The history of last years shows, this scheme(plan) for development of the software is how much inapplicable. To programming comes more and more than the bright presented persons with whom involves both shine of this trade, and potentially high earnings. (both these(it) of the factor in due time have forced me to throw employment(occupations) by electronics. Besides such financial schemes(plans) as share options allow to interest even more programmers in success of the company.
(Here can be, plays a role and the age factor. Looking at some anecdotical certificates of a cult of a youth in our branch, I asked by a question, whether the talented youth has come for last ten years to programming even more. If it so the cult of a youth in computer business can quite speak it(this) is in fact, as well as at any cult, it(he) should have a certain reasonable basis.)
If you want, that good experts worked for you, concern to them as to competent professionals. And competent professionals know how to carry out the technical party(side) of works. According to Taylor's model, it is necessary to have separate service of planning which will solve, how it is necessary to work. However it is meaningful only when the one who plans, knows as to perform work better, than the one who does(makes) it(her). If talented professionals work for you, it(she) is not necessary.
We operate the process focused on the person
Orientation to the person is shown in flexible processes differently. It leads to various results, and sometimes inconsistent.
One of the key moments - acceptance of process, instead of its(his) imposing. Quite often process of development of the software is imposed to programmers from a management(manual). The same frequently not priemlyut this process, especially, if heads already for a long time have departed from active participation in development. To accept process - means to incur and the certain obligations for what active participation of all team of developers is necessary.
From all it(this) the interesting conclusion follows: only developers can decide - to use adaptive process, or not. Especially it is fair for Extreme Programming (XP) at which realization the strict discipline is necessary. From this point of view Crystal has some advantage as demands the minimal discipline.
Other key idea consists that developers should have an opportunity to make all technical decisions. It reaches(achieves) the greatest expression in KHR where only developers can establish(install), what is the time should leave for this or that work.
Many heads perceive such management of technical process as something absolutely improbable. Adaptive process demands equal division of the responsibility for realization of the project between developers and a management(manual). Pay attention, I have told "equal". The management(manual) continues to play the role, however thus gives due to opinion of developers.
One of the important reasons of changes in habitual current of working process is speed of technological changes in our branch. The knowledge not demanded some(a little bit) years become absolutely become outdated(absolutely out-of-date). In any other industry technical skills do not become outdated so quickly. Even technical experts are compelled(forced) to recognize, that transition in the administrative board of the company means fast loss of technical skills. Ex-developers should understand, that their skills will soon disappear, and it(he,they) should be trusted opinion of those who is engaged in development at the moment.
Role business-advisers
However technical experts cannot incur performance of all process of works. In all that concerns(touches) needs of the given concrete business, they need a management(manual). It brings us to one more very important feature of adaptive processes: technical experts should have close contact to business-advisers.
In this case something means greater, than a usual degree of an involvement business-examination in the majority of projects. The commands(teams) working on flexible metodologiyam, cannot work at rare dialogue with clients. Constant contact to advisers by the given kind of business is necessary to developers. Moreover, such contact is necessary for carrying out not at a level of a management(manual), and at a level of any developer. Your developers - the qualified professionals, and they should have an opportunity to work on equal with the same professionals in other areas.
In general, to it(this) the essence of adaptive development which consists that all very quickly varies compels(forces). It is natural, that all in time learned(found out) about changes, constant contact is necessary.
There is nothing worse for the developer, than to see, how fruits of its(his) laborious work go to a garbage basket. Therefore so important to know, that you have good advisers who can constantly communicate with developers and possess sufficient knowledge in the area that developers could rely on them.
Adaptation of adaptive process
Till now I spoke about adaptibility in application to the project, that is, those cases when the software product adapts for changing requirements of the client. However adaptibility can be considered(examined) and in other foreshortening: from the point of view of changeability of the process. If you begin the project with use of adaptive process in a year will already work with process which will differ considerably from initial. Eventually the team of developers itself understands, that in this process to it(her) approaches(suits), and that is not present, and in appropriate way changes it(him).
Basis of changes in adaptive process - its(his) regular revision. Usually it is done(made) in the end of each iteration when you gather for short assembly and ask to itself following questions (on Norm(Rate) Kertu (Norm Kerth))
- What did we do(make) well?
- To that have we learned?
- What can we do(make) even better?
- What has nonplused us?
Answered these questions, you will understand, how it is necessary to change process to following iteration. Thus, process which in the beginning of the project causes some difficulties, it is possible to adapt gradually for a team of developers which uses it(him).
If "adjustment(option)" of process occurs(happens) during any project process becomes even more individualized, characteristic for the given company. To deepen such "adjustment(option)" I has advised developers to do(make) revision of process by even more strict and to mark(celebrate) the main marks of the project in the form of retrospective sessions as it is described at Norm(Rate) Kerta. Retrospective sessions include two-three day time assembly outside of office of the company with assistance of the special instructor. Such sessions are a source of knowledge not only for a team of developers, but also for all organization.
As a result of such variability of adaptive process never it is impossible to receive uniform corporate methodology. Instead of it(this) each team should choose the process most suitable it(her) and actively to change it(him), arranging under needs of the concrete project. The inspiration and base knowledge can be scooped from processes known already and own experience whereas final adaptation of process to tasks carried out at the moment concerns to sphere of the professional responsibility of developers.
The adaptive essence of the process more all is emphasized in ASD and Crystal. As to KHR at first sight can seem, that strict rules of this methodology do not allow to make to process of change. Actually it not so. However the main difference in comparison with others flexible metodologiyami consists in this case that propagandists KHR suggest to follow " the official version " to this methodology during several iterations, and already then to change it(her). Besides sources on KHR at all do not mention revisions of process and do not consider(count) as their part of methodology (though there is an opinion, that they should be made by one of expert KHR).
Methodology
Flexible it is possible to carry a lot to the category metodology. All of them are inherent the general(common) features, however there are also essential enough distinctions. In such brief review as I cannot tell this in detail about each methodology, but at least, I can specify to you where to search for the additional information. Besides I do not have experience of practical work with the majority of them. I worked with KHR very much, saw RUP in different ipostasyakh, however I know about all others almost exclusively under the literature.
XP (Extreme Programming)
From all flexible metodology this is the most known. Partly it has occured(happened) because leaders KHR, in particular Kent Bek (Kent Beck) are allocated by remarkable ability to draw to themselves attention. An important role the talent of Kent has played also to hire supporters of the movement and their message behind itself. It is possible even to tell, that popularity KHR became to a certain extent a problem as this methodology has practically superseded all the others, and together with them and those valuable ideas which they bear(carry).
Sources KHR conduct to community of software developers in language Smalltalk, namely to close cooperation of Kent Beka and Ward Kanningema (Ward Cunningham) in the end of 80th years. In the beginning of 90th years both of them perfected the techniques on numerous projects, developing ideas on creation of the new approach to development ON which would be adaptive and focused on the person.
Final transition from an informal technique to high-grade methodology has occured(happened) in the spring of 1996. "Crysler" has invited Kent to estimate(appreciate) a condition of works on the monitoring system of payments. The system was created in language Smalltalk by the foreign company which did not cope with a task. Quality of a program code was so low, that Kent has advised all to throw out and begin all anew. The project has begun with zero already under its(his) management(manual) and has soon turned to the first skilled range KHR.
The first stage of the project has come to the end in the beginning 1997. After that the project some time proceeded, then began to experience difficulties, which have led to that in 1999 the further development have been stopped. However, this system and to this day is used for payment of the salary ten thousand employees of the company.
XP costs(stands) on four whales: the Communications, the Feedback, Simplicity and Boldness. From them follow twelve expert to which the projects using KHR should follow. Many from this an expert are represented old checked up technics(technical equipment) which, nevertheless, by many had time to forget (including the majority of predicted processes). KHR not only revives by a life such technics(technical equipment), but also connects them in such a manner that all of them support(maintain) and strengthen each other.
That to me always imposed in KHR so it is that role which in it(him) is allocated(removed) to testing. All other processes too mention testing, but do(make) it somehow superficially. As to KHR in it(him) testing is that basis on which development is under construction. Thus each programmer writes tests simultaneously with a code of developed system. These tests are used at constant integration and during assembly of system that gives the stable base to the further work.
On this base KHR builds the evolutionary process of designing based(founded,established) on reorganization of a code of system during each subsequent iteration. Thus that functionality which concerns to current iteration is projected(designed) only, and any future needs(requirements) are not considered. The process which has turned out as a result demands from developers of discipline, and at the same time combines it(her) with high adaptibility. Such surprising combination allows to assume, that KHR is the most developed adaptive methodology.
At KHR it is a lot of leaders, the majority from which worked above Krajslerovskim the project. The set of sources of the information, concerning(touching) this methodology was as a result formed. The best summary KHR was Jim Khajsmita's clause(article) (Jim Highsmith) in magazine " Cutter ". However now it turns out, that it(she) is written by the outsider as now Jim propagandizes own methodology about which I shall tell later. Kent Bek has written book Extreme Programming Explained which represents present(true) manifest KHR. In the book the logic substantiation of this methodology and its(her) detailed enough description so readers can solve is given, whether they will follow KHR in the further.
Recently there were two more books. The first was written by three participants Krajslerovskogo of the project: Ron Dzheffris (Ron Jeffries), Ann Anderson (Ann Anderson) and Couples KHendrikson (Chet Hendrickson). It(she) refers to Extreme Programming Installed and represents description XP constructed on an operational experience of authors in this project. Kent Bek and I have written book Planning Extreme Programming in which principles of adaptive planning reveal.
Besides books, there is a fair quantity(amount) of web-resources. To begin acquaintance with KHR Rhone Dzheffri xProgramming.com and Don Vellsa (Don Wells) extremeProgramming.org is better to address to more structured information on sites. The whole sea of interesting materials contains on xPlorations Bill Uejka (Bill Wake). Originally practically all discussion and development of the ideas concerning(touching) KHR, occured(happened) on wiki web (environment(Wednesday) for joint conducting records) Ward Kanningema. On this site and to this day it is interesting to come, however in such abundance of the information it is easy(light) to be lost. Robert Martin widely known for the works in the field of C ++ and object-oriented designing, also has filled up numbers(lines) of supporters XP. On a site of its(his) company ObjectMentor it is possible to find a number(line) of works on this theme, including the description of variant XP which is constructed on the basis of RUP and carries the name dX. Except for it(this) its(his) company is the sponsor of debatable group XP on a site egroups. On KHR "from" we find an interesting sight at Mark Polka (Mark Paulk), one of leaders of ß¼¼-COMMUNITY. It(he) considers(examines) KHR just in the long term SMM.
Family metodology Crystal Alistera Kouberna
Alister Koubern (Alistair Cockburn) studies(investigates) methodology of development ON about the beginnings 90 when company IBM has given it(him) the task to write work on this theme. Thus its(his) approach essentially differs from the approach of the majority of others metodologov. Its(his) theories are based(founded,established) not only on personal experience, but also on constant researches of other projects and processes. Moreover, it(he) is not afraid to change the views as a result of the finds in this area. For this reason Alister Koubern remains my favourite metodologom.
First recommendation Kouberna on conducting projects became book Surviving Object-Oriented Projects, and in my opinion, it(she) remains the best work on management of the iterative project and to this day. More recently it(he) has written one more book which is devoted to the review flexible metodology development of the software. In it(her) it(he) considers(examines) the base principles underlying all these(it) metodology.
After that it(he) continued to investigate(research) flexible methodology, result of that became occurrence of family metodology Crystal. Koubern names it "family" as it is convinced, that to different projects are necessary different to methodology. It(he) enters following gradation of projects: on one axis the quantity(amount) of the people borrowed(occupied) in the project, on another - criticality of mistakes(errors) is postponed. Each of metodology "families" is intended for the certain cell turned out grids. Thus, the project in which it is borrowed(occupied) 40 person and on whom the company presumes to lose to itself some sum, will work on other methodology, rather than the project for 6 developers on which existence of the company depends.
As well as KHR, methodology of family Crystal too are focused on the person, however a little in another way. Alister considers(counts), that it is complex(difficult) to people to use process which demands from them high discipline in work. As a result of the researches it(he) has found out, what volume of discipline is minimal for effective methodology. Thus productivity of methodology meaningly was sacrificed to simplicity of its(her) use. Let Crystal concedes KHR in productivity, but to it(her) a lot of people can use, believes Alister.
Special value Alister gives to revisions of process in the end of each iteration owing to which process can be improved during work. By iterative development all the problems connected with used process, are found out early, and they can to have time be corrected. Therefore so important to supervise process of development and to adapt it(him) for a concrete situation.
In February, 2001 Alister has declared(announced), that they with Jim Khajsmitom have decided to unite the of methodology. However while how it(she) will refer to is not clear not only that itself their methodology will represent, but even.
Open Source
This heading, probably, has surprised you. In fact the open initial code is, more likely, a kind ON, instead of process of its(his) development. Nevertheless, that manner to work, which has developed in a society of software developers with the open initial code, it can appear useful and for the closed projects. In particular, it concerns to teamwork of commands(teams) of developers physically removed from each other. It is especially important, as the majority of adaptive processes emphasize that fact, that all developers should be beside.
The majority of projects with the open initial code has one or several coordinators. The coordinator is the leader of the project, the unique person who can make changes directly to a repository of an initial code. Nevertheless, other developers too can make to a code of change, with that unique difference, that it(he,they) should be sent all over again to their coordinator who will see(overlook) the corrected code and already then makes changes to a repository. Usually such changes look like a patch-files that simplifies similar procedure. Thus, the leader of the project coordinates patches and watches(keeps up) that they corresponded(met) to a general plan developed ON.
In different projects the role of the coordinator is realized differently. One prefer to have one coordinator on the project, others divide the project into modules and appoint(nominate) to each of them the separate coordinator, the third transfer(transmit) functions of the coordinator from one developer to another. Sometimes there are some coordinators for the same codes, or even own combination is made of all set forth above methods. The majority of developers works above projects with the open initial code far off and the incomplete working day, therefore problems with coordination of work of such team above full-time the project here are possible(probable).
One more feature of development of projects with the open initial code is that debugging of the program can be conducted in parallel. Thus, it is possible to involve a plenty of people in it(her). Having found in the program a mistake(an error), they can send a patch to the leader of the project. Thus, do not carry out very valuable function because the most part of time is spent for search of mistakes(errors). Besides this work approaches(suits) who does not have good skills of designing.
Process of development ON with the open initial code till now plainly is not described. The most known source on this theme there is Eric Rejmonda's The Cathedral remarkable clause(article) and the Bazar. Nevertheless, it(she) cannot apply for a full statement of process of development opened(open) ON. (Russian translation(transfer) of clause(article) - " the Cathedral and a market " - is published in magazine " Byte Russia " in October, 1999. A comment perev.) the Theme of process of development of projects with the open source codes is mentioned(touched) also by Charles Fogel (Karl Fogel) in the book about repositories of code CVS. This book will be interesting for esteeming even that who never wished to execute a team " cvs update ".
Adaptive development (ASD) on Jim Khajsmitu
Jim Kha jsmit is a lot of years worked with predicted metodologiyami successively. It(he) was engaged in their development, introduced them, learned(taught) them to use, and eventually, has come to conclusion, that they are deeply erroneous: especially in conditions of modern business.
In the book which has left recentlyit specifies the adaptive nature new metodology, paying special attention on use of ideas from area of complex(difficult) adaptive systems (usually them name the theory of chaos). In the book there is no detailed description of methods of development as in KHR, however this work pawns a fundamental theoretical basis of adaptive development. The book shows, why these(it) of methodology so are important, and in what consequences results(brings) their use at deeper organizational and supervising level.
Basis ASD is made with three nonlinear phases overlapping each other: considering, cooperation and training.
KHajsmit considers(examines) planning in an adaptive environment as paradox as results in this case will be always unpredictable. At usual planning a deviation(rejection) from the plan are mistakes(errors) which need to be corrected. In adaptive development of a deviation(rejection) conduct to correct decisions.
To overcome uncertainty of so unpredictable environment, developers should cooperate actively among themselves. Thus the attention of a management(manual) is directed not so much on explanations what exactly it is necessary to do(make), how many on maintenance of the communications at which developers find answers to arising problems.
In predicted metodologiyakh value of training is often underestimated. All undersigns in advance so then it is necessary to follow the plan only.
In an adaptive environment of training to not avoid to all participants of the project - both to developers, and their customers - as both those, and others during work should reconsider own obligations, and also use results of each cycle of development to be prepared for the following. -- [KHajsmit]
Thus, training appears the constant and important characteristic of process which presence means, that plans and projects should vary during works.
The basic, most effective and paramount advantage of life cycle ASD consists that this process forces us to refuse intellectual constructions which are a source of self-deception. It(he) compels(forces) us to estimate(appreciate) own abilities is more realistic. -- [KHajsmit]
Having emphasized it, KHajsmit passes directly by the complex(difficult) moments of adaptive development, in particular, to a question of maintenance of cooperation and training during realization of the project. Thus, its(his) book describing these "flexible" aspects of process, represents remarkable addition to "ordinarier" approaches, for example, KHR, FDD and Crystal. From this point of view, merge of methodology KHajsmita with Crystal looks(appears) quite proved.
SCRUM
This method enough for a long time is known among those who is engaged in object-oriented development, however I cannot tell, that thoroughly I know its(his) history and development. As well as in other flexible metodologiyakh, here it is emphasized, that the certain and repeating process suits only the decision of the certain and repeating problems in the certain and repeating environment in which the certain and repeating developers work.
According to method SCRUM, the project shares on iteration (which here refer to "sprint"), for 30 days everyone. Before the beginning of sprint you define(determine) functionality which is required at the given stage then give a up the place to a team of developers which carry out a task set by you. All focus in that during one sprint of the requirement remained constant.
However it is impossible to tell, that during all sprint the management(manual) is not at affairs. Every day the team of developers gathers on short (pyatnadtsatiminutnoe) the assembly called "scrum" ("fight") where fluently blabs out, than everyone will be engaged within next day. Besides at such assemblies to heads of the company let know about problems in promotion of the project which it(him) are necessary for solving, and also inform on the done work that they clearly imagined, in what stage there is a development.
The works devoted to methodology SCRUM, the main basic attention give iterative planning and process of tracking. As a whole SCRUM it is very close to others flexible metodologiyam, and it should be combined with rules of coding KHR well.
The book on methodology SCRUM all waited enough for a long time, and here Ken Shvaber (Ken Schwaber) and Mike Bidl (Mike Beedle) at last have written it(her). Ken Shvaber also supports(maintains) a site controlChaos.com where contains, perhaps, the best review SCRUM. On Jeff Sazerlenda's always brisk site (Jeff Sutherland), devoted to object-oriented technologies, there is a section about SCRUM. The material about working methods on methodology SCRUM in book PLoPD 4 is well stated.
Feature Driven Development
This methodology (briefly called FDD) has been developed by Jeff De Lyuka (Jeff De Luca) and the recognized guru in the field of object-oriented technologies Peter Koadom (Peter Coad). As well as other adaptive methodology, it(she) does(makes) the basic emphasis on short iterations, each of which serves for study of the certain part of functionality of system. According to(agree) FDD, one iteration lasts two weeks.
FDD totals five processes. First three from them concern to the beginning of the project.
- Development of the general(common) model
- Drawing up of the list of demanded properties of system
- Scheduling above each property
- Designing of each property
- Designing of each property
It is necessary to do(make) last two steps during each iteration. Thus each process is broken into tasks and has criteria of verification.
All developers share on two kinds: " class owners " (owners of classes) and " chief programmers " (the senior programmers). The senior programmers are the most skilled developers. They are entrusted with the development of concrete properties of system. However they are not engaged in it(this) independently: the senior programmer defines(determines), what classes are borrowed(occupied) in realization of the given concrete property then collects a team from owners of necessary classes which will be engaged in development. It(he) operates(works) as the coordinator, the main designer and the head, and on a share of owners of classes there is, generally, a direct coding.
The fullest description of methodology FDD can be found in Peter Koada's book with comrades, under the name " UML in Color " . Its(his) company, "TogetherSoft", also is engaged in consulting and training FDD.
Dynamic System Development Method (DSDM)
DSDM has appeared in the Great Britain in 1994. Its(his) founder became a consortium from 17 English companies which wished to work with use RAD and principles of iterative development. Now the number of its(his) members has passed for one thousand, and many of them are outside the United Kingdom. That DSDM is developed by the whole consortium, noticeably distinguishes it(him) from other flexible metodology. The whole organization is engaged in development of grants(manuals) on this methodology, the organization of training courses, programs of accreditation, etc. Besides value DSDM has a money's worth that has limited depth of my research. However, Jennifer Stejplton (Jennifer Stapleton) has written the book where it is possible to find the brief review of this methodology.
All begins with studying practicability of the program and area of its(her) application. In the first case, you try to understand, whether approaches(suits) DSDM for the given project. To study(investigate) a scope of the program it is supposed on a short series of seminars where programmers learn(find out) about that sphere of business for which they should work. Here the substantive provisions, concerning(touching) architecture of the future system and the plan of the project are discussed.
Further process shares on three interconnected cycles: the cycle of functional model is responsible for creation of the analytical documentation and prototypes, a cycle of designing and designing - for reduction of system a working condition, and at last, last cycle - a cycle of realization - provides expansion of program system.
Base principles on which is under construction DSDM, this active interaction with users, frequent releases of versions, independence of developers in decision-making and testing during all cycle of works. As well as the majority of others flexible metodology, DSDM everyone uses short iterations, duration from two about six weeks. The special emphasis is done(made) on high quality of work and an adaptability to changes in requirements.
I did not see, that DSDM used somewhere except for the Great Britain, however this methodology should be noted even because its(her) infrastructure possesses all features, characteristic for more mature traditional metodology while main principles correspond(meet) new flexible metodologiyam. I can be mistaken, but it seems to me, that those materials about DSDM which to me managed to be studied(investigated), speak about excessive orientirovannosti to this methodology on process and love to formalities.
The union of all flexible
Between all these(it) metodologiyami it is so much general(common), that there is a natural question, whether it is impossible to find an opportunity for teamwork. For this purpose in February, 2001 has been held a seminar where have invited representatives from each of described above metodology. I too have gone there, not testing any illusions. Eventually, if you have ventured to collect in one premise(room) the company metodologov observance of decencies is that maximum on which it is possible to count.
It is necessary to tell, that I was mistaken. Each of present understood, that at all processes presented at a seminar much in common, and that it is much more important than divergences existing between them. Thus, business was not limited to a simple establishment of contact between leaders metodology, and the offer has been stated to let out(release) the joint statement - an appeal to greater use flexible metodology. (We also have solved, that the term "flexible" (agile) most precisely reflects our general(common) representations about such metodologiyakh.)
As a result the Manifest of flexible development of the software (Manifesto for Agile Software Development) - the description of the general(common) features and principles of flexible processes was born. In it(him) intention to cooperate and in the further also expresses, and also to promote that also experts in the field of business, and experts in the field of technics(technical equipment), used flexible approaches in development ON and demanded it(this) from the partners. Recently in one of computer magazines there was article in which comments are led to the Manifest. Besides here you can prohonour hardly in more detail how we see the future of this document.
Whether it is possible to consider(count) RUP as a flexible method?
Every time at discussion of methods of development ON in sphere of object-oriented technologies, conversation inevitably comes about role Rational Unified Process (the Rational Unified Process). The unified Process has been developed by Phillip Krachtenom (Philippe Kruchten), Ivarom Yakobson (Ivar Jacobson) and other employees of the company " Rational Software " as addition to language of modelling UML. RUP represents a skeleton for processes, and thus, includes their huge quantity(amount). This feature RUP causes the basic criticism - as it(he) can be everything, it(he) cannot be considered(counted) as anything certain. I have more on a shower(soul) those processes, in which clearly it is underlined to you what to do(make), instead of giving infinite opportunities.
As a result of such frame construction RUP it is possible to use and as a basis for most, that on is traditional vodopadnogo style of development, and as flexible process. So, RUP can be both flexible, and heavy process - all depends on how you will apply it(him) in your concrete case.
Krejg Larman (Craig Larman) - one of propagandists of use RUP as flexible process. In the remarkable book - to introduction in object-oriented development ON it(he) has described process which in the big degree is based(founded,established) on such perception(recognition) RUP. Krejg considers(counts), that recent transition to new flexible metodologiyam actually anything other, as acceptance of idea of object-oriented development which just and reflects RUP. It(he) recommends all team of developers to spend first two-rub(-three) days of each iteration (which duration makes month), making of preliminary decisions on construction of system and making out them in the form of UML-diagrams. These diagrams - not the strict instruction which it is impossible to deviate, and only a sketch, giving to developers representation about the works planned for given iteration.
One more variant " flexible RUP " is process dX Robert Martin (Robert Martin). dX is the process completely corresponding(meeting) RUP, and thus being copy KHR (to understand a joke, turn(turn over) "dХ"). dX it is created for those who is compelled(forced) to use RUP though would like to work on XP. And this process is simultaneously both XP, and RUP, that shows a good example of "flexible" use RUP.
It seems to me, that leaders RUP should declare with all definiteness the approach to development ON. Some times I heard, that those who uses RUP, apply vodopadnyj style of development. According to my data, Phillip Krachten and its(his) team are firm supporters iterativnosti process. Having explained the position, and also encouraging flexible variants RUP (such as processes Krejga Larmana or Robert Martin) they would bring the valuable contribution to business of development metodology.
Other sources
There is still a set of other works and discussions on a theme of lungs metodology. Probably, they cannot be named the presents issued metodologiyami, however in them too there are interesting ideas.
In conferences Patterns Language of Programming often there are materials on the given theme (probably because those who is interested in patterns, is interested as well in methods of development more adaptive and focused on the person ON). The basic source from among early works on this theme was Jim Koplejna's work in PLoP1. In PLoP2 has appeared Episodes pattern language Ward Kanningema. Now Jim Koplejn supports(maintains) site OrgPatterns which represents wiki (environment(Wednesday) for joint conducting records) where patterns gather and organized.
Dirk Riel (Dirk Riehle) has sent work on XP2000. In this work it(he) compares characteristics XP and Adaptive Software Development. In letter Koada are compared already XP and FDD. In July number " IEEE Software " there are some clauses(articles) on a theme of " variety of processes " where also it is spoken about these(it) metodologiyakh.
Separately it would be desirable to mention Mary Poppendik's remarkable clause(article) (Mary Poppendieck) in which it(she) compares flexible methodology to non-profitable manufacture.
Whether flexible process is necessary to you?
Flexible processes approach(suit) not for all. If you have decided to go it(this) by it is necessary to remember several important points. However, I am absolutely assured(confident), that these(thus) new methodology can be applied widely enough. Anyway, now they are considered much with smaller quantity(amount) of people, than can use.
Today the most widespread methodology remains " we write and it is corrected ". To bring in this chaos it is a little discipline always on advantage(benefit), besides flexible approaches have an essential advantage - transition to them to carry out much easier, rather than to use heavy methodology. It is much easier to pass to use of simple process, especially if before this any process at you at all was not.
One of these most serious restrictions metodology - their application in greater(big) commands(teams) of developers. Crystal it is used in collectives up to 50 person. Unfortunately, we do not have data, whether are used flexible methodology by greater(big) commands(teams). Moreover, it is not known, whether it is possible to use in general them in that case.
I hope, in this clause(article) the thesis has clearly sounded, that flexible approaches are good for using in the event that to you requirements to system or if they often change are not clear. If you do not have stable requirements it not that situation in which it is possible to develop stable architecture or to work under the constant plan. Probably, in this case adaptive process will be not so is convenient, but it(he) will be more effective. Quite often greatest obstacle in a way of use of adaptive process is the customer. From my point of view, the customer should understand what to work on predicted process at often varying requirements for them as risky, as well as for developers.
So, as you have noticed, I have told, that if at you in a team more than 50 person, you should use predicted process and if requirements to system often vary adaptive. What to do(make), if at you both the big project, and varying requirements? To tell the truth, I do not know. I can tell only, that it is necessary to you popotet, but you for certain and guess it(this).
If you have decided to work according to adaptive process, it is necessary to trust the developers and to involve them in decision-making. All adaptive processes are based(founded,established) on trust to a team, therefore if you consider(count), that your developers do not possess sufficient qualification and motivation, use predicted process.
So, we shall sum up. Adaptive process should be used, if at you:
- Not clear or changing requirements to system
- The responsible(crucial) and qualified developers
- The understanding customer who agrees to participate in development.
And in these cases it is better to use predicted process:
- team of developers more than 50 person
- The contract with the fixed cost, or, more likely, with the fixed amount of works.
What from flexible processes to choose?
All the processes described above new, therefore I only can give you advice(council), being based on personal experience. In my opinion, all question at a rate of a team and volume of discipline which they agree.
I undoubtedly would recommend KHR if you have a dozen or less developers who would like to try(taste) this process. Probably, your team will not observe this process in accuracy (at least, in the beginning), however even in this case, partial use KHR will be useful. From my point of view, the main parameter of correct use of process is the writing(spelling) of the automated tests (unit testing). If the team copes with it(this) all rest will be put(applied). If is not present, most likely, KHR to them will not approach(suit).
If the team very much greater(big), or in it(her) limps discipline I would began to use Crystal. It is easiest(lightest) of all flexible metodology, and Koubern it is very susceptible to lessons of development. But also in this case I would borrow process of planning at KHR.
However, I work with a team from 40 person which successfully use many from expert KHR, and are already enough close to use of this methodology in full. Thus, having a purposeful team of adherents, you can adapt process even for atypical conditions for it(him).
And, at last, the most important. You would not take what process, firstly it(he) all the same not absolutely will approach(suit) you. You should supervise process, trace it(him) and arrange under your concrete needs. Eventually, it will be your own process, and all labels are not too important.
Gratitude
For this clause(article) I have borrowed ideas at the big number of people, much greater, than I can list here. I would like to thank Mark Belsera for concrete remarks (Marc Balcer), Kent Beka, Alistera Kouberna, Ward Kanningema, Bill Kimmelya (Bill Kimmel) and Frenka Vestfela (Frank Westphal).
(The given research changes constantly and supplemented with the author. The list of essential changes is applied in the end of the original of clause(article), all other are brought without the notification. Translation(Transfer) into Russian has been made by a variant of clause(article) from March, 2001. In November, 2001 we, after the author, have added clause(article) with several new references(links).) © Copyright Martin Fowler, 2001, all rights reserved
© Copyright maxkir.com, translation(transfer), 2001
|