Agile Software Development

  1. In the software development industry, there might be some competitive advantage. If you are talking about the service-related company, every month they are coming with some new services to the client so that they can remain champion in their market competition. For example, a mobile company. There are at least 5/6 operators in Bangladesh. To remain to stay in the competition they are changing their business strategies, offering new services, packages now and then. Because if they do not follow the market competition strategy they will remain backdated and other companies get ahead of them. So, to remain in the competition they need a change every month/ every three months/ six months.
  2. Technologies are changing rapidly. The technology which is the latest today may be backdated after 6 months. New technologies are coming and coming. This is another reason for changes.
  3. The most important reason and a major reason why changes are happening in the software development process is to deal with customer requirements. In the beginning, the customer does not know much about the software. They don't know the functionalities, the features. The customer does not know the complete picture of the software. After delivering some prototypes to the customer, he realizes what he needs. So, that's why the customer asks for changes, modifications of the developed features. Maybe they ask to remove some features because do not need that features, may ask to add some features. So, the customer will ask for any kind of changes. So, to adopt those changes we need to change our software development process.
  1. Since Agile is an Iterative process so we are going to divide the total project into parts by part. Each iteration is a self-contained mini-project where the Waterfall model can be used.
  2. Before delivering the whole project to the client we may deliver this particular part of the total project to an internal release. This internal release will reveal some problems or drawbacks that we need to work on before delivering to the actual client.
  3. Most importantly, the iterative process will provide us with some hints or some ways to find out the requirements of the next iterations. If we are talking about iteration no N which will help us to find out the requirements of iteration no N+1. This is how the previous iteration is used to help us to find out the requirements for the next iterations.
  1. It is a lightweight method. We are working with small parts, not with all the parts at a time. Just concentrating on a single part, not the other parts at a time.
  2. People-based rather than plan based. In Agile, there is no fixed plan like the Waterfall model. What happens in Agile is, all the team members choose the tasks by themselves. Nothing is assigned to anyone. Teams are coming and choosing that they will do these(one part) works for next 1 month then another team comes and choose another part. Like this, the works are done by pick and choose. This is called people-based. One important thing is, as there is no fixed plan, so the persons who are choosing the tasks must be experienced.
  3. No fixed single method/model. There are many methods in Agile development. It is not like that we must follow one method/model. We can work combined with more than one method/model (Hybrid).
  4. It is a set of guidelines. We are given some suggestions or guidelines not any kind of plan. We can plan according to our choice. There is no fixed plan, we should just follow the guidelines.
Rather than increase the iteration length to fit the chosen scope,
the scope is reduced to fit the iteration length.
  1. Individuals and interactions over processes and tools
  2. Working software over comprehensive documentation
  3. Customer collaboration over contract negotiation
  4. Responding to change over following a plan
  1. Client interaction is excellent. When we deliver something to a client every month then we can interact with the client, taking feedbacks from them and working with it, if clients request any changes we modify them.
  2. Client representative in the development team. A person is selected as the representative of the client who will work as a part of the software development team. He is the product owner. He is a person from the client who is dedicatedly assigned by the client to the software development company. So that, when the development team need to ask anything they do not need to visit the client, they can just ask the representative who is already assigned by the client.
  3. Delivering each iteration to the client. We deliver every iteration to the client, take feedback from them, working in the documentation process. We are working with requirements, designing, coding, testing, delivery, feedback in every single iteration. These things are done at a very early stage. If we think about the waterfall model, we cannot even start coding before 3/4 months. At first, we have to work with requirements, then designing then we can start coding. As a result, the working software will visualize lately but in agile we are getting the taste of working software at an earlier stage.
  4. Customer collaboration. Since there is a customer representative in the team so after every iteration he will collect the customer feedback.
  5. Changes are adopted easily.
  1. It is difficult to predict in advance which software
  1. Our highest priority is to satisfy the customer through early and continuous delivery of valuable software. Though we plan, expend money, whatever we do if our customer is not happy then it will be a total waste of money and time. So, in any kind of development, the primary measure of success is customer satisfaction. If the user is satisfied, then though there is any problem with the software/product, things will go right but if the user is not satisfied, even if we did everything we need to do, things will go wrong. So, Agile says, no matter what, you must satisfy the customer.
  2. Welcome changing requirements, even late in development. Agile process harnesses (control) change for the customer´s competitive advantage. Users can ask for any kind of changes at any point of time in the development process. So, we need to prepare to accommodate those changes even if late in the project development and should handle those changes properly. If we say to the client that we have already discussed the requirements and now any kind of changes is not possible then the client will be upset and dissatisfied. So, anyhow we have to welcome the changes.
  3. Deliver working software frequently with a preference for the shorter timescale. We have to deliver the working software frequently. We already know that the maximum iteration length in the Agile model is 1 month/30 days. We must divide a 6 months project into at least 6 parts. We can also divide it into more than 6 parts. So, the lesser the timebox the more frequently we can deliver the software and get more frequent feedback.
  4. Business people and developers must work together daily throughout the project. In the software development team, we will include a client representative so that both the development team and the representative can work together. Let's say, we are developing software for a bank. So, as the development team is mostly from a Computer Science background, they do not have all the processes and details about a bank. Now, if we have an expert (business people) from the banking sector then we can clear our queries from him/her. So, while working on any domain we need an expert from that domain in our development team.
  5. Build projects around motivated individuals. Give them the environment and support their need, and trust them to get the job done. In Agile development, we do not select any task for any team, we rather give them chance to pick the task. Let's say if we assign the designing task to a particular team member who is an expert in coding and assign the coding task to a member who is an expert in testing then they will be demotivated because they are not getting the tasks that they should. That’s why Agile does not assign any task rather it says to choose by yourself.
  6. The most efficient and effective method of conveying information to and within the development team is face-to-face conversation. Since the total requirements are not clear and changes can come at any time, we are not sure what is going to happen so we need face to face discussion with team members and the client. So that, the communication becomes easier. In Agile, everyone will work in a large space desk by desk, with no extra room for anyone so that, the physical barrier can be reduced.
  7. Working software is the primary measure of progress. When we deliver the first iteration, we are delivering a small part/function from the project. Suppose, if we have 10 functions in our project we are working with 1 function in the first iteration. After completing it the client wants to see if it is working or not.
  8. Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace persistently. We need to follow sustainable development in Agile development. We divide the 6 months’ project into 6 parts and worked very efficiently in the first two months but became lazy in the third month then it is not good. Thinking that we are on the right track and kept relaxing and end of the iteration could not the task in time. Then what will happen? The unfinished task will be added in the next iteration and will create extra pressure. That’s why Agile suggests maintaining the speed. Sometimes fast, sometimes slow it is not good practice.
  9. Continuous attention to technical excellence and good design enhances agility. When we are working on iteration N then we are going to learn from iteration N+1. We work on the current iteration and will also think about the next iteration. We age learning by doing. If we do not learn from the current project we can not expect that our next project will be better than our current project. So, if we do not analyse the work of the first timebox then we can not use the experience in the next iteration. So, continuous attention needs to be there.
  10. Simplicity — use simple approaches to make changes easier. We are dividing the tasks into small parts. So that, we can concentrate any small part at a time and things become easy for us.
  11. The best architectures, requirements, and designs emerge from self-organizing teams (iterative development rather than defined plans). As there are no fixed rules in Agile development, so if the team members do not have self-organizing skills then they can not work in this process. Because there is no one to assign him any duty, he has to do it by his responsibility. So, if any teams member does not have any sense of responsibility, then he is not fit for the Agile development process.
  12. At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behaviour accordingly. We are working on the practice of the current iteration in the next iteration. We will set some milestones. Suppose, we set 3 milestones in a 6 months’ project. After every two months we will check the progress of our work, will check can we do the work even more effective way?. So, we will check these things after a certain time.
  1. Small products and teams; scalability limited.
  2. Inappropriate for safety-critical products because of frequent changes.
  3. Good for dynamic, but expensive for stable environments.
  4. Require experienced Agile personnel throughout.
  5. Personnel succeed on freedom and chaos
  1. Large products and teams; hard to scale down.
  2. Handles highly critical products.
  3. Good for stable, but expensive for dynamic environments.
  4. Require experienced personnel only at the start if stable environment.
  5. Personnel succeed on structure and order.
  1. Competence/skill/capability
  2. Common focus
  3. Collaboration
  4. Decision-making ability
  5. Fuzzy (vague) problem-solving ability
  6. Mutual trust and respect
  7. Self-organization
  1. Extreme Programming (XP)
  2. Scrum
  3. Scrumban
  4. Dynamic Systems Development Method (DSDM)
  5. Feature-Driven Development (FDD)
  6. Crystal Methods
  7. Lean Software Development
  8. Adaptive Software Development (ASD)
  9. Agile UP
  10. Kanban
  1. R.S. Pressman & Associates, Inc. (2010). Software Engineering: A Practitioner’s Approach.
  2. Kelly, J. C., Sherif, J. S., & Hops, J. (1992). An analysis of defect densities found during software inspections. Journal of Systems and Software, 17(2), 111–117.
  3. Bhandari, I., Halliday, M. J., Chaar, J., Chillarege, R., Jones, K., Atkinson, J. S., & Yonezawa, M. (1994). In-process improvement through defect data interpretation. IBM Systems Journal, 33(1), 182–214.
  4. The Agile Unified Process (AUP) Home Page — Scott Ambler.” 2005. 21 Jun. 2016 http://www.ambysoft.com/unifiedprocess/agileUP.html
  5. “How to Manage the “7 Wastes” of Agile Software Development …” 2013. 21 Jun. 2016 https://www.scrumalliance.org/community/articles/2013/september/how-to-manage-the-7-wastes%E2%80%9D-of-agile-software-deve

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store