Showing posts with label Scrum. Show all posts
Showing posts with label Scrum. Show all posts

About Traditional Development vs Agile Development

Traditional DevelopmentvsAgile Development
Plan DrivenValue Driven
Fixed ScopeVariable Scope
Variable ResourcesFixed Resources
Variable TimeFixed Time


In agile paradigm shift, just reverse to traditional development, In traditional development, there is fixed scope/requirements but in agile resources and time. Whereas in traditional development estimated resources and time but in agile features (scope).

About Traditional Development vs Agile Development

Traditional software development, it's long, large, late way of development and deliverable. Each cycle tack long time and once define, code, test, deploy. Time to market 12 to 36 months. For product owner, it's very hard to understand the end result even though have clear vision it.

About Traditional Development

Agile software development, it's iterate, increment and innovate. Time to market 1 to 6 months. Each life cycle have potentially ship-able product increment. For product owner, easy to see the end result from few days, 2 to 4 weeks max as per sprint length.

About Agile Development

Thanks for reading, traditional software development, agile software development.

Happy learning and implementation!!!

Reference: Relly

Ansible, Centos65, Oracle VirtualBox, Vagrant and Provision

In Agile age, can't wait for environment’s (Development, Test, SIT and Pre-Prod and Prod) in place for start the development and configuration. What we need, just single windows system, where we can start provisioning with below tools and technologies. This will help more in Continues Development CD, Continues Integration CI and Continues Delivery CD.



Ansible centos virtualbox vagrant and provision
Ansible centos virtualbox vagrant and provision














Let’s discussed how it will possible:

Pre-quest:
Windows 7 OS 64
Install the Oracle VM VirtualBox  or any VM more
Install Vagrant more
Download Centos box more
Install ansible
Install Git Bash more

Open the Git Base
Windows Start > All Programs > Git > Git Base

Welcome to Git (version 1.9.5-preview20150319)

 Run 'git help git' to display the help index.
 Run 'git help <command>' to display help for specific commands.
 tutorialbyexample@WS7 ~

Crete the directory vagrant-ansible-centos under c:\
e.g. c:\vagrant-ansible-centos

Download it from https://github.com/tutorialbyexample/vagrant-ansible-centos.git


















c:\vagrant-ansible-centos
  - provision.sh
  - Vagrantfile 
  - centos65-x86_64-20140116.box
  - etc 
        -  ansible
                    - web.yml
                    - site.yml
                    - roles
                             - git
                                   - tasks
                                            - main.yml
                             - tar
                                   - tasks
                                            - main.yml
                             - zip
                                   - tasks
                                            - main.yml
  - inventory
        - dev 

Pest the all files under c:\vagrant-ansible-centos
1. Vagrantfile (no any extension)
#C:\vagrant-ansible-centos\Vagrantfile
# Vagrantfile Details
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "centos6"
  config.vm.provider "virtualbox" do |vb|
    vb.customize ["modifyvm", :id, "--memory", "5000", "--cpus", "2"]
  end
  config.vm.synced_folder ".", "/vagrant-ansible-centos"
  
end

2. provision.sh
#C:\vagrant-ansible-centos\provision.sh
cp -rf /vagrant-ansible-centos/inventory /tmp
chmod -x /tmp/inventory/*
sudo ansible-playbook -vvvv -i /tmp/inventory/$1 /vagrant-ansible-centos/etc/ansible/site.yml --extra-vars 'proxy_host="proxy_host" proxy_port="80" proxy_username="tutorialbyexample" proxy_password="password" proxy_required=true'
#sudo ansible-playbook -vvvv -i /tmp/inventory/$1 /vagrant-ansible-centos/etc/ansible/site.yml

3. dev (no extensions)
#C:\vagrant-ansible-centos\inventory
local ansible_ssh_port=2200 ansible_ssh_host=127.0.0.1 ansible_connection=local

[web-servers]
local

4. web.yml
#C:\vagrant-ansible-centos\etc\ansible\web.yml
---  
- hosts: web-servers
  remote_user: root
  sudo: yes
  roles:
    - zip
    - tar
    - git

5. site.yml 
#C:\vagrant-ansible-centos\etc\ansible\site.yml
---
- include: web.yml

6. main.yml (this is for git)
#C:\vagrant-ansible-centos\etc\ansible\roles\git\tasks\main.yml
---
- name: Install Git
  yum: name={{ item }} state=present
  with_items:
    - git
    - git-svn

7. main.yml (this is for tar)
#C:\vagrant-ansible-centos\etc\ansible\roles\tar\tasks\main.yml
---
- name: Install tar 
  yum: name=tar state=present  

8. main.yml (this is for zip)
#C:\vagrant-ansible-centos\etc\ansible\roles\zip\tasks\main.yml
---
- name: Install zip/unzip util
  yum: name={{ item }} state=present
  with_items:
    - "zip"
    - "unzip"

Need to switch our base tool to vagrant-ansible-centos directory
$ cd C:\vagrant-ansible-centos

$ pwd
/c/vagrant-ansible-centos

$ ls -tlr
centos65-x86_64-20140116.box
inventory
etc
provision.sh
Vagrantfile

Note: assuming centos65-x86_64-20140116.box has been downloaded under c:\vagrant-ansible-centos

$ vagrant box add centos6 centos65-x86_64-20140116.box
Downloading or copying the box...
Extracting box...ate: 2005k/s, Estimated time remaining: --:--:--)
Successfully added box 'centos6' with provider 'virtualbox'!

Note: You will experiences new folder created under /c/vagrant-ansible-centos with name .vagrant



$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Importing base box 'centos6'...
[default] Matching MAC address for NAT networking...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Fixed port collision for 22 => 2222. Now on port 2200.
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2200 (adapter 1)
[default] Running 'pre-boot' VM customizations...
[default] Booting VM...
[default] Waiting for machine to boot. This may take a few minutes...
[default] Machine booted and ready!
[default] Mounting shared folders...
[default] -- /vagrant
[default] -- /vagrant-ansible-centos
[default] Configuring proxy environment variables...
[default] Configuring proxy for Yum...

Alternatively, ssh into localhost:2200 or 2222 what ever printed on above
using private key c/vagrant-ansible-centos\.vagrant\machines\default\virtualbox\private_key

$ vagrant ssh
[vagrant@vagrant-centos65 ~]$ pwd
/home/vagrant
[vagrant@vagrant-centos65 ~]$ ls -tlr
total 0
[vagrant@vagrant-centos65 ~]$ cd /vagrant-ansible-centos/
[vagrant@vagrant-centos65 vagrant-ansible-centos]$ ls -tlr
centos65-x86_64-20140116.box
inventory
etc
provision.sh
Vagrantfile

All this files will mount in /vagrant-ansible-centos/ as mentioned in Vagrent file.

Install the Ansible

[vagrant@vagrant-centos65 vagrant-ansible-centos]$ sudo yum install ansible
Loaded plugins: fastestmirror, versionlock
Determining fastest mirrors
epel/metalink                                                             
 * base: centos.openitc.uk
 * epel: epel.besthosting.ua
 * extras: centos.mirroring.pulsant.co.uk
 * updates: centos.serverspace.co.uk
...
..
Complete!

Verify the Ansible
[vagrant@vagrant-centos65 vagrant-ansible-centos]$ ansible --version
ansible 1.9.2
  configured module search path = None

Provision it, with provision.sh script along with Ansible

[vagrant@vagrant-centos65 vagrant-ansible-centos]$ ./provision.sh dev

PLAY [web-servers] ************************************************************

GATHERING FACTS ***************************************************************
ok: [local]

TASK: [zip | Install zip/unzip util] ******************************************
<127.0.0.1> REMOTE_MODULE yum name=zip,unzip state=present

TASK: [tar | Install tar] *****************************************************
<127.0.0.1> REMOTE_MODULE yum name=tar state=present
ok: [local] => {"changed": false, "msg": "", "rc": 0, "results": ["tar-1.23-11.el6.x86_64 providing tar is already installed"]}

TASK: [git | Install Git] *****************************************************
<127.0.0.1> REMOTE_MODULE yum name=git,git-svn state=present

PLAY RECAP ********************************************************************
local                      : ok=4    changed=2    unreachable=0    failed=0

[vagrant@vagrant-centos65 vagrant-ansible-centos]$

Verify the provision software, e.g. git, tar and zip

[vagrant@vagrant-centos65 vagrant-ansible-centos]$ git --version
git version 1.7.1
[vagrant@vagrant-centos65 vagrant-ansible-centos]$ tar --version
tar (GNU tar) 1.23
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by John Gilmore and Jay Fenlason.
[vagrant@vagrant-centos65 vagrant-ansible-centos]$ zip --version
Copyright (c) 1990-2008 Info-ZIP - Type 'zip "-L"' for software license.
This is Zip 3.0 (July 5th 2008), by Info-ZIP.
Currently maintained by E. Gordon.  Please send bug reports to
the authors using the web page at www.info-zip.org; see README for details.

Latest sources and executables are at ftp://ftp.info-zip.org/pub/infozip,
as of above date; see http://www.info-zip.org/ for other sites.

Compiled with gcc 4.4.4 20100525 (Red Hat 4.4.4-5) for Unix (Linux ELF) on Nov 11 2010.

Zip special compilation options:
        USE_EF_UT_TIME       (store Universal Time)
        SYMLINK_SUPPORT      (symbolic links supported)
        LARGE_FILE_SUPPORT   (can read and write large files on file system)
        ZIP64_SUPPORT        (use Zip64 to store large files in archives)
        UNICODE_SUPPORT      (store and read UTF-8 Unicode paths)
        STORE_UNIX_UIDs_GIDs (store UID/GID sizes/values using new extra field)
        UIDGID_NOT_16BIT     (old Unix 16-bit UID/GID extra field not used)
        [encryption, version 2.91 of 05 Jan 2007] (modified for Zip 3)

Encryption notice:
        The encryption code of this program is not copyrighted and is
        put in the public domain.  It was originally written in Europe
        and, to the best of our knowledge, can be freely distributed
        in both source and object forms from any country, including
        the USA under License Exception TSU of the U.S. Export
        Administration Regulations (section 740.13(e)) of 6 June 2002.

Zip environment options:
             ZIP:  [none]
          ZIPOPT:  [none]
[vagrant@vagrant-centos65 vagrant-ansible-centos]$

Is not it simple? For real implementation only we have to change the actual IP address of web server.

C:\vagrant-ansible-centos\inventory\dev

local ansible_ssh_port=2200 ansible_ssh_host=127.0.0.1 ansible_connection=local

[web-servers]
local

Note: instead of local need to change the actual IP address and it will work for you.

How to know Scrum Team Capacity (in hours)?

How to know Scrum Team Capacity (in hours)?

It's very simple, just open the Microsoft Excel and create the data like below image, fill the appropriate team member details and you will get the Scrum Team Capacity. With help of this you can plan your sprint work and respective ship-able project or product.














Also read How to implement Scrum in few steps

Please response your input if any! Like it!!!

Cross-Functional Team In Scrum





















Cross Functional Scrum Team, As an individual have "T-shaped" skills. T-shaped, good in one skill but have knowledge of other required skills.
e.g. Web development team of 7 members.
1. Business Analyst BA
2. UI Designer
3. Coder
4. Tester
5. PL/SQL/ Database Administrator
6. Infra administrator
7. Subject Metter Expert

As a cross functional scrum team:
UI Designer expert in UI related work and also know about coding of PHP/JSP/ASP or any web technologies along with PL/SQL.
Coder expert in PHP/JSP/ASP or any web technologies and also know about UI Designing along with PL/SQL and testing.
Tester expert in testing with all expect and also know about requirement gathering along with PL/SQL and admin work.
BA expert in functional/non-function requirement gathering and also know about testing.
Infra admin expert in hardware/software configuration and also know about PL/SQL/DBA and Testing.
Whereas SME expert in web development end to end and have all required skills.

Normal day to day activity, all team member work with their primary activity but in case of any one absence and overload of other team member help it for achieving the common goals.
Please share your point of view if any....Like it!!!


2+2=4; Four Eyes Principle


What is 2 + 2 = 4; four eyes principle?
Four eyes principle, work on base of two man rule over system for correctness, maker and checker, in Information Technologies IT word, coder and reviewer.





What is advantage of four eyes principle?
Very simple, we have coder and reviewer in place, as coder write code for app/system in respective language then review will do the review and so on. This process will happen till end of system delivery.

e.g. 
Coder, write the code in java:
 public class ClsMain
 {
 Public static void main(String arg[]){
 System.out.println(“Hello
 }
 }

Reviewer, review the code and suggest for correctness:
 /*****************************************************/
 /* ClsMain.java, for printing the “Hello, http://tutorialbyexample.com”  
 /* Author : Tutorial by Example
 /* Date : 06-Jul-2015
 /*****************************************************/
 public class ClsMain{
     /* Main method with args as string parameters */
     public static void main(String[] args) {
         System.out.println("Hello, http://tutorialbyexample.com");
    }
 }

Note: this principle is already implemented in so many product base organizations.

References:

How to implement Scrum in few steps

Step $: Get cross functional team on board or run from existing team
Step $: Trained team if there are not cross functional
Step $: Environments ready (Development, Sprint...)
Step $: Decide sprint cycle 2-4 weeks
Step $: Team details in any portal e.g.; Google site or confluence or any wiki
Step $: Share Team communication details if multi location environment (as agreed day and time to work/available)
Step $: Team calendar or working day and time for sprint
Step $: Know your stack-holder’s or Vendors working with you
Step $: Choose tools for scrum, e.g. Rally or Jirra or xplanner or any other as per your need
Step $: Implement CD, CI and CD with latest tools. e.g. Git, Gerrit and Jenkins
Step $: Sticky note tool or windows for scrum update, apart form scrum tools
Step $: Messenger for communication in team for file, desk, audio and videos sharing
Step $: Get your backlog in order with help of PO and team
Step $: Estimate your product backlog with available technique
Step $: Sprint Planning (Top level first half)
Step $: Sprint Planning/estimate tasks (With team in second half)
Step $: Scrum tools update by team every day before stand up
Step $: Stand up and be part of it without failure
Step $: Track progress with a daily burn down chart in tool
Step $: Finish for sprint, when you said your work done or not
Step $: Review, Retrospect, Reflect, Repeat...for next Sprint!

How to implement Scrum (Agile) in few steps

Step $: Get cross functional team on board or run from existing team
Cross Functional Scrum Team, As an individual have "T-shaped" skills. T-shaped, good in one skill but have knowledge of other required skills.
e.g. Web development team of 7 members.
1. Business Analyst BA
2. UI Designer
3. Coder
4. Tester
5. PL/SQL/ Database Administrator
6. Infra administrator
7. Subject Metter Expert


As a cross functional scrum team:
UI Designer expert in UI related work and also know about coding of PHP/JSP/ASP or any web technologies along with PL/SQL.
Coder expert in PHP/JSP/ASP or any web technologies and also know about UI Designing along with PL/SQL and testing.
Tester expert in testing with all expect and also know about requirement gathering along with PL/SQL and admin work.
BA expert in functional/non-function requirement gathering and also know about testing.
Infra admin expert in hardware/software configuration and also know about PL/SQL/DBA and Testing.
Whereas SME expert in web development end to end and have all required skills.

Normal day to day activity, all team member work with their primary activity but in case of any one absence and overload of other team member help it for
achieving the common goals. 

Step $: Trained team if there are not cross functional
For making cross functional team if we don’t have:
1. Internal/external training
2. Internal knowledge sharing within team
While doing this non cross functional team will converted in cross functional team. What's required willingness inside team and adaptation.

Step $: Environments ready (Development, Sprint, SIT, Pre-PROD and PROD)
End to end development/sprint environment required for starting work.
e.g.
1. Web/Application Server
2. Database Server
3. Repository Server, e.g. SVN, Git
4. Build Server. e.g. Jenkins

Step $: Decide sprint cycle 2-4 weeks
In scrum, sprint cycle is very important factory, if we decide it for 2, 3 or 4 weeks, accordingly we have to work on it till end of all release. As cycle will be fixed for all sprint and subsequent releases. As per scrum rule min 2 weeks and max we can choose 4 weeks.

Step $: Team details in any portal
Simply we have to put team profile along with picture in portal for visible to others. It’s easy for identification, as who is doing what along with what expatiation that person have.
e.g.; Google site or confluence or any wiki

Step $: Share Team communication details if multi location environment (as agreed day and time to work/available)
Team communication details are more important if team located in different geography. Simply we have to put their primary communication details along with secondary.
e.g.
Name: Vinod Kumar
Address: India or UK
Phone No: 07442790858
Email address: vinod@tutorialbyexample.com

Step $: Team calendar or working day and time for sprint
Calendar will have details working day and time, as team is working in different location and deferent weekday and time zone.
e.g. Suppose, running with scrum of scrum and few member are working in different country as mention below all have different time zone and working day.
USA Monday to Friday but different time zone
UK Monday to Friday but BST time zone
UAE Sunday to Thursday with GTZ
India Monday to Friday but GMT

Step $: Know your stack-holder’s or Vendors
Clear communication details required and all team must know about stack-holders' and their single point of contact SPOC.

Step $: Choose tool for scrum
Identifying the tool and uses all depend on company and cost of project, few tools are there as paid or open source which support the scrum.
e.g. Rally or Jirra or xplanner or any other as per your need

Need to put project, team, vendors, task, test case details.

Step $: Implement Continuous development CD, Continuous Integration CI and Continuous Delivery/Deployment CD
CD, CI and CD bring all work on single click instead of doing the deployment, server configuration, testing and all in day to day work.
e.g. implement Git, Gerrit and Jenkins like tool for achieving it.

Step $: Sticky note tool or windows for scrum update, apart from scrum tools

Step $: Messenger for communication in team for file, desk, audio and videos sharing
Choose any tool, e.g. join me, web sharing, Lynch, Skype, or any other tool.

Step $: Get your backlog in order with help of PO
Backlog have details about vision in form of epic, that epic will divide in backlog then sprint backlog and iteration backlog.
e.g. We need web site where we have logging screen along with employee and customer details.
















Step $: Estimate your product backlog with available technique
In scrum, follow few technique, planning poker, story point and t-shirt size. All depend on what you are choosing and following for your scrum.

Step $: Sprint Planning (Top level first half)
In sprint planning, first half just we picked it up high propriety backlog, and discussed on it high level with PO, SME, Lead and few stack holders.
Accordingly we put in sprint backlog.

Step $: Sprint Planning/estimate tasks (With team in second half)
In second half of sprint planning meeting, detailed discussion with team and there estimation and feasibility or dependency.

Step $: Scrum tools update by team every day before stand up
Individual team member responsibility to update the respective task status in tool and there work time. As per status tool, generate the different type of reports.













Step $: Stand up and be part of it without failure
Daley status, 15 minutes reporting to each other, as in this meeting all are required and have to say:
What I have did that in last 24 hours?
What I’m going to do?
Is there any impediment?  

Why answering all three above question, scrum master will note and put it in tool.

Step $: Track progress with a daily burn down chart in tool
Generating the burn down chart and share with higher management on demand basis.

Step $: Review
After Sprint execution, the team holds a Sprint Review Meeting to demonstrate a working product increment to the Product Owner and everyone else who is interested.

Step $: Retrospect
Each Sprint ends with a retrospective. At this meeting, the team reflects on its own process. They inspect their behavior and take action to adapt it for future Sprints.

Step $: Reflect
Finished work for this sprint. It will visible in shippable.

Step $: Backlog Refinement Meeting
Most Product Backlog Items (PBIs) initially need refinement because they are too large and poorly understood. Teams have found it useful to take a little time out of Sprint Execution — every Sprint — to help prepare the Product Backlog for the next Sprint Planning Meeting.


Step $: Repeat...for next Sprint!

Scrum-reference-card