Mar 11

Scrum is a process for developing products such as software and quickly getting the products to the customer. Scrum is based on empirical controls through inspection and adaptation.

Scrum consists of iterations called Sprints. Each sprint has calendar days and during the sprint, a development team builds an Increment of potentially shippable product functionality. To initiate a Sprint, a product owner or business owner meets with the team for a 1-day Sprint Planning Meeting. At the meeting, business/product owner reviews the top priority requirements on a Product Backlog, which is a prioritized list of all requirements that are known for the product of system at that time.

The Development team selects that top priority Product Backlog that it believes it can turn into an increment of potentially shippable product functionality (increment) within the next sprint. Once the product owner and development team have agreed on what product backlog to select, the team develops a list of tasks needed to the build the functionality. This list of tasks emerges throughout the Sprint and it called sprint backlog.

The sprint starts immediately after the Sprint Planning Meeting. Everyday, ScrumMaster/Project manager meets with the development team for short daily status meeting called daily scrum. At the end of the sprint, the development team, ScrumMaster, Product owner and other stakeholders meet at a Sprint Review Meeting. At this meeting, the development team demonstrates the increment of the functionality that it developed during the sprint.

Figure: Scrum Process

Scrum uses two complementary, parallel cycles to build releases of a system. One cycle sustains an emerging list of prioritized requirements called product backlog. The other cycle consists of development iterations that build system increments of these requirements. These cycles are constructed so that the most appropriate and most essential system emerges over the project’s iterations.

Benefits of Scrum Includes:

  1. Putting the product owner in charge of the development project.
  2. Allowing the product owner to change and create the requirements as the project progresses.
  3. Ensure that the most important functionality is built first.
  4. Always focus on most important functionality.
  5. Achieve new working functionality on every sprint. Improves the delivery.
  6. Identifying something can be done to improve the productivity every single day.
  7. Allowing the product owner the choice to release the already built functionality at any time.

Value Driven Development:
The value is expressed as a function of the Product Owner’s ongoing choice of cost, quality, time and functionality:

Value = f (cost,time, functionality, quality)

Scrum provides the variables in the Product owner’s hands throughout the project. The product owner authorizes the development Sprint by Sprint, and is free to change any of the variables based on progress to date and delivered value. At the end of a Sprint, the Product owner reviews the working system functionality with the team. Based upon the review, owner can:

  • Re prioritize and change the next set of top priority requirements.
  • Release the demonstrated increment into the production.
  • Adjust the quality to increase or decrease the functionality delivered in a sprint.
  • Not allow additional sprints because value received for the cost is inadequate.

In nutshell, scrum can improve the quality, delivery of the product being developed by software development team. In whole cycle, product owner is the driver of the project and controls every aspect of the development and it’s values.

In TarKia, Scrum is a leading software development process used to develop the software for its clients.

Tagged with:
Nov 30

Continuous Integration is a software engineering process to speed-up the delivery and reduces the integration times. Basic mantras of continuous Integration are “Test Early” and improve the quality.

Continuous Integration means that we capture entire process, every step that turns our source code into software:

  • Build our code on every commit, on a schedule or on demand, with sophisticated build management.
  • Deploy the code to any enviornment, including development, test and staging with deployment scripts or automation.
  • Test daily build by automating the unit test cases.
  • Release with confidence along with the visibility and control.

         
     

CIM Best Practices

  1. Maintain a single source repository.
  2. Automate the build.
  3. Make the build self testing.
  4. Commit every day.
  5. Every commit builds on an integration machine.
  6. Keep the build fast
  7. Test in a clone of the production environment.
  8. Make it easy to get the last executable.
  9. Everyone can see what is happening.
  10. Automate deployment.

It is a process of clean rebuilding of project code base to ensure that new changes integrate well into the existing code base and provides feedback on the quality of new changes, so that fixes can be delivered in a timely manner. If the changes do not integrate and break the project code base, we can revert codebase back to stable release. Continuous integration avoids or detects compatibility problems early. If we integrate throughout the project in small amounts, we will not find ourself trying to integrate the system for weeks at the project end.

Advantages & Overhead

  1. Early warning of broken build.
  2. Automatic unit testing of new changes.
  3. When unit test fails, developers can revert the codebace back to stable state.
  4. Constant availability of “Currrent” build.
  5. Frequent code check-in pushes developers to create modular, less complex code.
  6. Quality improvement: Developers get feedback about quality, functioanlity, and impact of code they are writing.
  7. Intgration problems are detected early.

Overhead of adopting this process is to setup and manage continuos integration software on a dedicated server.

Software Available for CIM:

  1. Cruise Control for Java & .NET
  2. Hudson
  3. Apache Continuum
  4. Microsoft Team Foundation Server

A successful integration is a measure of progress. It provides feedback that new code runs correctly in the integration envrionment and successfully interoperates with rest of the code base.

In TarKia, we use Hudson open source software to implement continuos integration. We are using Hudson to promote our code from SVN to test, beta and production environments.

Screenshot of Hudson control panel

Tagged with:
preload preload preload