Devops for Growth
107.7K views | +15 today
Follow
Devops for Growth
For Product Owners/Product Managers and Scrum Teams: Growth Hacking, Devops, Agile, Lean for IT, Lean Startup, customer centric, software quality...
Curated by Mickael Ruau
Your new post is loading...
Your new post is loading...

Popular Tags

Current selected tags: 'asd', 'coaching agile'. Clear
Scooped by Mickael Ruau
Scoop.it!

ADAPTIVE SOFTWARE

The problem with software is that it takes too much time and money to develop, and is brittle when used in situations for which it was not explicitly designed. Various software design methodologies address this problem:

  • 1970s: Structured Programming makes it feasible to build larger-scale software systems - provided you have a specification of the desired results at the start of the project and the specification rarely changed. A typical application is a database report writing program which reads an input file and produces an output file. We call this an input/output based application.
  • 1980s: Object-Oriented Programming makes it easier to reorganize when the specification changes, because functionality is split up into separate classes that are designed to have minimal interaction between them However, each change to the specification (or to the environment) still requires programmer intervention, with a costly redesign/reimplement/rebuild/retest cycle A typical application is a desktop publishing system, where user-initiated events (mouse clicks, menu selections, etc.) trigger computation. We call this a user-initiated event based application.
  • Today: Adaptive Programming is aimed at the problem of producing applications that can readily adapt in the face of changing user needs, desires, and environment. Adaptive software explicitly represent the actions that can be taken and the goals that the user is trying to achieve. This makes it possible for the user to change goals without a need to rewrite the program. A typical application is an information filter which searches the Internet or company intranet for information of personal interest to the reader. Note that much of the searching may go on when the user is not even logged in. The application does more on behalf of the user without constant interaction, and the sophistication comes from a splitting of responsibilities between the program and the user. We call this an agent based application.

Of course, there have been other proposed methodologies for improving software. Some address the problem of managing change, but only adaptive programming is about anticipating change and automatically dealing with it within a running program, without need of a programmer. As a definition, we can say:

"Adaptive software uses available information about
changes in its environment to improve its behavior."

Mickael Ruau's insight:

Five Myths of Traditional Software Development

Traditional software development is based on some principles which are no longer appropriate under this new world of complex environments. It is worth looking at five of these myths.

    • The myth of the specification: Traditional software development assumes that the first task is to determine the specification, and all design and development follows after the specification is finalized. More modern approaches stress spiral rapid development methods in which the specification is constantly being refined. The target is really a combination of related components, not a single application.
    • The myth of software maintenance: The word "maintenance" gives the impression that the software has somehow degraded, and needs to be refurbished to its original condition. This is misleading. The bits in a program do not degrade. They remain the same, while the environment around the program changes. So it is really a process of upgrading or evolving to meet the needs of the changing environment. By viewing it as a maintenance problem, one risks making the mistake of trying to preserve the old structure when its time has passed.
    • The myth of the black box: Abstraction plays a crucial role in the development of reliable software. However, treating a process as a black box with an input/output specification ignores the practical problem of resource usage. When a system built out of these black boxes is too big or too slow, there is no way to improve the performance other than to tear the boxes apart. Some work has been done on the idea of Open Implementation, in which modules have one interface for input/output behavior, and another orthogonal interface for performance tweaking. Adaptive software adds to this by making the orthogonal interface a two way system ÷ there is a feedback loop that provides information on the results of the performance tweaking.

  • The myth of design choices: In traditional software development, the designers consider several alternatives to implement each component, and then make choices based on the desired product. The alternatives that were not chosen, along with the rationale for the choice, are then discarded. That means when the environment changes (perhaps a new communications protocol becomes popular, or the user gets a computer that is twice as powerful), one needs to start all over again to see what choices are now the best. Often, the original programmers have moved on, and so their design rationale is lost. The alternative is to capture the design criteria as a formal part of the program, and let the program reconfigure itself, as the environment changes, to optimally satisfy the criteria.
  • The myth of the expert programmer: Most programmers have pride in their abilities, and feel they can always come up with a good solution, given a suitable specification of the problem. In reality, programmers are only one resource available to a project, and an expensive resource at that. Furthermore, it is impractical to ship a developer with each program (except for very large and expensive custom applications). This suggests that we find a tradeoff where the programmers and designers do what they can do best ÷ formally describe what the program is trying to do. Then the program itself does the calculating and configuring necessary to achieve these goals in the current environment.
No comment yet.