Agile software development

Manifiesto por el Desarrollo Ágil de Software:

Estamos descubriendo formas mejores de desarrollar

software tanto por nuestra propia experiencia como

ayudando a terceros. A través de este trabajo hemos

aprendido a valorar:

Individuos e interacciones sobre procesos y herramientas

Software funcionando sobre documentación extensiva

Colaboración con el cliente sobre negociación contractual

Respuesta ante el cambio sobre seguir un plan

Esto es, aunque valoramos los elementos de la derecha,

valoramos más los de la izquierda.

http://agilemanifesto.org/iso/es/manifesto.html

Esta técnica nos habla de cómo trabajar juntos con el usuario para llegar al objetivo en común.

Para llegar al objetivo tenemos que seguir los siguientes pasos:

1.- Planificación del programa:

2.- Diseño del programa: Se tienen que definir los procesos.

2.- Construir el programa.

3.- Probar el programa.

4.- Revisar el programa.

5.- Lanzar al mercado.

Beneficios de agile:

  1. Satisfacción del cliente por la rapidez de entrega y por las mejoras continuas que se realizan.
  2. La persona y la interacción son el énfasis, no lo son los procesos ni las herramientas.
  3. El (los) desarrollador(es), el (los) cliente(s) y los probadores interactúan constantemente entre sí.
  4. El software desarrollado se entrega frecuentemente (meses en lugar de meses).
  5. La conversación cara a cara es la mejor forma de comunicación.
  6. La cooperación entre las personas de negocios y los desarrolladores es cercana.
  7. Atención continua a la excelencia técnica y buen diseño.
  8. Adaptación regular a las circunstancias cambiantes.
  9. Incluso cambios de requerimientos tardíos son bienvenidos.

Desventajas de agile:

  1. Existe falta de énfasis en el diseño y la documentación necesaria.
  2. El proyecto puede fácilmente salirse fuera de los objetivos si el representante del cliente no es muy claro con lo que desea.
  3. Es muy complicado que este modelo lo tomen los programadores novatos debido a el tipo de decisiones que se puedan
    Continue reading "Agile software development"

Is there anything more beautiful than crystals?

The Crystal Methodologies are a set of Software engineering methodologies that derive from Agile Sofware Development. The main idea of their creator (Alistair Cockburn) is to meet customer needs and have aligned team goals.
This model focuses on:
-Interaction
-Communication
-Community
-People
-Skills
A main idea of the model is to consider development as a game to generate creativity in all of the participants. There must be communication density, system criticality and project priorization. There are two main assumptions:
1. Teams work together integrating and optimizing.
2. Projects are unique and dynamic and need to be designed based on customer specifications.
These are the types of Crystal Models:
3. Crystal Clear
4. Crystal Yellow
5. Crystal Orange
6. Crystal Orange Web
7. Crystal Red
8. Crystal Maroon
9. Crystal Diamond
10. Crystal Sapphire

Sources:

Four Variants of Agile Development Methods

The Software Development Process

Software Development Processes are the basic models that give us a rough guideline on how to organize all of the work involving the creation of a software product.

All of the methodologies are based on the Software Development Life Cycle.

Paul Downey  Development process
Paul Downey
Development process

Here are some of the main approaches:

WATERFALL ( read a bit more… )
A linear model that follows a sequential flow, work is split into many phases and development happens first in one phase, gets completed and then moves to the next phase, the phases don’t overlap.

This was the first approach invented, it is very straight forward and easy to understand. This process works best for projects that do not change requirements in late stages of development because it is very hard to make changes and implement new features after early stages.

PROTOTYPING
This model focuses on creating protoypes for the client so he/she gets a better idea of how the requirements they gave are being implemented. This is a good model for testing and reduces the misunderstanding gap between developer and client.

Some types of prototyping methodologies are:
-Throwaway Prototyping
-Evolutionary Prototyping
-Incremental Prototyping

Although it is better for user involvement it can also lead to confusion over the protoypes and the final product.

SPIRAL
This method involves combining design and prototyping. This model is used mostly for expensive and complex projects, these project is composed mostly of small waterfall models, the phases go in the same order, and then prototypes are built and simulated.

This model is good for budget estimating and issue discovery at early stages of development, but it also involves a lot of time and high costs and has quite limited re-usability.

AGILE or EXTREME PROGRAMMING (read a bit more… )

OTHERS

-Lightweight Methodologies
-Rapid Application Development
-Code Continue reading "The Software Development Process"

Be Agile!

agile_project_management_by_planbox1

In the beginning of the 21st century, software development reached a point where a lot of projects were failing and programmers started to find many limitations in the traditional waterfall method. That’s why, in 2001, seventeen software developers decided to write the Manifesto for Agile Software Development, which has 12 principles that will help us create our own definition of “Agile Development”:

  1. To satisfy the customer through early and continuous delivery of valuable software.
  2. Welcome changing requirements, even late in development.
  3. Deliver working software frequently with a preference to the shorter timescale.
  4. Business people and developers must work together daily throughout the project.
  5. Build projects around motivated individuals.
  6. The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
  7. Working software is the primary measure of progress.
  8. Agile processes promote sustainable development.
  9. Continuous attention to technical excellence and good design enhances agility.
  10. Simplicity–the art of maximizing the amount of work not done–is essential.
  11. The best architectures, requirements, and designs emerge from self-organizing teams.
  12. At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.

Just like the new trends in organization magement, Agile focuses a lot in team work and constant results. It seems like it’s the perfect method, isn’t it? For me, what Agile is looking for is really hard to reach, however, nothing’s impossible.

Agile development reduces the risk of failure and allows to have more cetainty, visibility and adaptability. Through software development process, clients requirements can change, and the advantage of this method is that it won’t affect that much the project, that’s the great thing about developing in “baby steps-short term goals-.

agile101-software-dev-300x200

The methodologies of Agile Development Software are:

Software Development Life Cycle

In this world, things tend to behave as cycles. We have a new president every 6 years, which it seems, does no difference, but we go through the same process. Every year we start with great promises, and as soon as time goes, we forget them.

Software development is not an exception. Why? Because even the best developed program can fail, not because it’s bad, but because people’s needs change. This scheme tries to generalize development in general: not focusing on details such as roles, time lapses and more. Instead, it breaks software development into 5 simple steps (some sources believe 6 or even 7):

  • Planning: What do you need? How will you develop?
  • Design: Are we using NoSQL this time? Is RoR better than Django? Is a binary tree better than a hash table?
  • Implementation: Coding, coding, coding…
  • Testing: Not only PEBCAKs tend to happen. Let’s prevent the ones in our side.
  • Evolution: This might be the hardest step to explain. Basically, software prepares for the next cycle.

One can notice this pattern in the waterfall method such as in agile development.

flickr photo by Sam Howzit https://flickr.com/photos/aloha75/7778968110 shared under a Creative Commons (BY) license
flickr photo by Sam Howzit https://flickr.com/photos/aloha75/7778968110 shared under a Creative Commons (BY) license

Waterfall Development

Just as ASD (Agile Software Development), the waterfall model for software development gets the job done. The question is: How?  Unlike ASD development, this methodology is sequential, you can’t skip one step just like that, you’ll need thousands of reasons to do it. Waterfalls always flow from top to bottom, and it is the same way in the technical concept.  There are five main stages in the waterfall methodology:plainicon-com-45868-512px

  • Requirements
  • Design
  • Implementation
  • Verification
  • Maintenance

As you can see, the stages are basically the same as in ASD. But the difference is that it is sequential. In this context, sequential means much more than just a structure. It paves the way of the development. I consider this methodology to be excessively sequential. When an stage is over or completed, once you step on the next phase, you never go back. That means that in order to step into the design phase, the project requirements must be heavily specified, because as I said, there is no turning back.

There are a few situations in which is better to use Waterfall methodology, according to Base36 Inc., these are the top three situations:

1. When there is a clear picture of what the final product should be.

2. When clients won’t have the ability to change the scope of the project once it has begun.

3. When definition, not speed, is key to success.

Credits to: PlainIcon.com and WallPaperSafari.com


Software Development Processes

A software development process or life cycle is a structure imposed on the development of a software product. There are several models for such processes, each one of them describing an approach to a variety of tasks or activities that take place during the development process. There are different points of view depending on the customer’s and project needs.

For example, the Capability Maturity Model, is focused on how mature the software is. Then there is the agile development process, which I described here. Another one is called the waterfall process, which you can read in here, too.

There are tons of SDPs that you can use in order to successfully complete a project. You can choose between them by establishing priorities depending not only on your customer, but also taking into account you and your team’s working style.


Agile development

Can one produce software the same way as cars are made in a factory? Is the sequential process efficient for ambiguous requirements?

flickr photo by cyclonebill https://flickr.com/photos/cyclonebill/2905044002 shared under a Creative Commons (BY-SA) license
flickr photo by cyclonebill https://flickr.com/photos/cyclonebill/2905044002 shared under a Creative Commons (BY-SA) license

Agile development is an alternative to traditional sequential development. It was purposed in 1970 by Dr. Winston Royce in his paper “Managing the Development of Large Software Systems”. He mentioned that this process does not work because the communication between each specialized group tends to fail. Also, sequential process supposes that all the requirements can be determined in the beginning, and this seldom happens. Sometimes, the requirements change, and in the production phase, the requirements may have changed completely, making the product completely useless.

Agile development is based on 12 principles, which can be found in the Agile Manifesto page:

  1. Satisfying the customer during all phases.
  2. Be ready for changes.
  3. Deliver constantly. Don’t wait at the end.
  4. Business people and developers work together.
  5. Motivate employees. Make them feel like fish in sea.
  6. Face-to-face conversation does matter.
  7. Working software measures the progress.
  8. Sustainability is essential.
  9. Focus on good design and technical details.
  10. Simplicity.
  11. Teams organize by themselves.
  12. Regular intervals of time make coordination and feedback better.

Agile development has several benefits over sequential development, which include:

  • Prevents analysis paralysis: this is one of the main problems in sequential development. You have made the requirements analysis and you’re building software, but in another step, you realize that several requirements have changed or have been added. You need to make another analysis in order to keep working. This does not happen in agile, since analysis is a step in every sprint.
  • Allows client to have a product every time: because of the sprints, each iteration returns a product, each time better. In this way, the client does not needs to wait until production phase.
  • Continue reading "Agile development"

Agile S. D.

Based on the Agile Alliance, Agile Software Development is a group of methods and practices which are based on values and principles stated in a document called Agile Manifesto.

The “Agile” term appeared in 2001 when some software developers gathered to discuss and shair the ideas that each individual had about software development.

Agile-Development

Image source

The Agile Alliance developed 12 principles as follows:

  1. Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
  2. Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage.
  3. Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.
  4. Business people and developers must work together daily throughout the project.
  5. Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
  6. The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
  7. Working software is the primary measure of progress.
  8. Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
  9. Continuous attention to technical excellence and good design enhances agility.
  10. Simplicity–the art of maximizing the amount of work not done–is essential.
  11. The best architectures, requirements, and designs emerge from self-organizing teams.
  12. At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.

Main source

My classmate Michelle Sagnelli also made a research on Agile regarding methodologies and the meaning Agile has as well.

There are many methodologies: Extreme Programming XP, Scrum, Crystal, Dynamic Systems Development Method DSDM, Lean Development, and Feature-Driven Development FDD. Each one of them has a unique characteristic; however, they all share the same approach to

Continue reading "Agile S. D."

Being “Agile” while developing software

There is an umbrella term for a set of methods and practices that are based on values and principles, expressed in the Agile Manifesto, that you will get to know in a bit. It is known as

ASD

The 12 principles that define it are:

  1. The priority is to satisfy the customer.
  2. Welcome changing requirements for the customer’s competitive advantage.
  3. Deliver working software with preference to the shorter timescale.
  4. Business people and developers must work together daily throughout the project.
  5. Motivate the individuals that build the projects.
  6. Promote face-to-face conversation and sustainable development.
  7. Working software is the primary measure of progress.
  8. Agile processes promote interaction between sponsors, developers and users.
  9. Continuous attention to technical excellence and good design enhances agility.
  10. Simplicity.
  11. Best works come from self-organizing teams.
  12. The team becomes more effective and adjusts its behaviour.

There are also several agile project management frameworks such as:

descarga

But it isn’t only rainbows, order and friendly team work, there are some other downsides. You can find more about it HERE

Team:

Victor Najar  & Carmina Pérez