Friday, April 4, 2014

Agile Methodology Myths busted

Myth-1: Each team member in Agile Scrum method should do everything

Agile says Scrum teams should be self-organizing and cross-functional.  It means scrum team as a whole should be having necessary skills to create product increment.  This doesn't mean that each individual in team should be cross-functional.  In Agile, each team member is called developer having different skills like Designer, Programmer, Tester, etc.  Agile doesn't mean and doesn't want to kill the expertise of the people.  


Myth-2: Agile means no documentation

Agile never says that there should be any documentation.  Documentation is important but focus should be on working software instead of comprehensive documentation.  Agile says, we should get rid of documentation which doesn't add value.  For example: Low level design docs are important for future reference as well but creating estimation of how many defects testers are going to open in release doesn't make any sense. How can anyone forecast, how many defects would be raised :-)


Myth-3: Agile means no planning


On the contrary, Agile requires more planning.  Only difference between planning in Waterfall and Agile methods is when planning is done.  In Waterfall model, whole planning is done at the start of the release cycle, whereas in Agile small amount of planning is done to fix the Time and Cost of the project at the start of the release and team continue to do sprint planning to pick up the tasks which is most important for the customer


Myth-4: Agile means lack of discipline


This is utmost false. Agile brings sense of responsibility and discipline in each team member.  It brings people together and commitment at each step and it demands that each individual be responsible to deliver whatever he has agreed too. The daily interactions enhance this sense of responsibility, which is not the case when people hide behind documents and bureaucratic obstacles.  So, it actually demands more responsibility and a discipline enforced by the collective.

The rule of keeping a sustainable pace – which means avoiding overtime – requires a serious commitment against procrastination. The ideal velocity of the team should be determined, and maintained. The iterations are short, so any lagging will be promptly noticed.


What is "Agile" Methodology

Lets first try to define what is Agile Methodology?

Agile Methodology is an alternative development methodology to traditional project management like waterfall model. Agile Methodology encourages rapid and flexible response to changes.  Heart of Agile Methodology is defined in Agile Manifesto.


Components which comes into consideration when we do project management.
  1. Time
  2. Budget
  3. Scope
  4. Quality
In Traditional Waterfall model, Time-Cost-Scope remains fixed and if project is behind schedule it makes quality go down.  Whereas in Agile Model, Time-Quality-Cost remains fixed and scope varies as per time-boxed iterations.



Agile Manifesto
  • Individuals and interactions over processes and tools
  • Working software over comprehensive documentation
  • Customer collaboration over contract negotiation
  • Responding to change over following a plan 


The meanings of the manifesto items on the left within the agile software development context are described below:
  • Individuals and interactions: In agile development, self-organization and motivation are important, as are interactions like co-location and pair programming.
  • Working software: Working software will be more useful and welcome than just presenting documents to clients in meetings.
  • Customer collaboration: Requirements cannot be fully collected at the beginning of the software development cycle, therefore continuous customer or stakeholder involvement is very important.
  • Responding to change: Agile development is focused on quick responses to change and continuous development.


Agile Manifesto is based on 12 principles:
  • Customer satisfaction by rapid delivery of useful software
  • Welcome changing requirements, even late in development
  • Working software is delivered frequently (weeks rather than months)
  • Working software is the principal measure of progress
  • Sustainable development, able to maintain a constant pace
  • Close, daily co-operation between business people and developers
  • Face-to-face conversation is the best form of communication (co-location)
  • Projects are built around motivated individuals, who should be trusted
  • Continuous attention to technical excellence and good design
  • Simplicity- The art of maximizing the amount of work not done - is essential
  • Self-organizing teams
  • Regular adaptation to changing circumstances


Well-known Agile software development methods:
  • Agile Modeling
  • Agile Unified Process (AUP)
  • Crystal Clear
  • Crystal Methods
  • Dynamic Systems Development Method (DSDM)
  • Extreme Programming (XP)
  • Feature Driven Development (FDD)
  • GSD
  • Kanban (development)
  • Lean software development
  • Scrum
  • Velocity tracking

Everything you want to know about Agile Scrum Team

Scrum team builds the product (software, website, etc) that the consumer consumes.  Scrum ideally consists of core roles and additional roles.  But, whenever we talk about scrum team that means we are talking about core roles only. 

Core Roles
  • Product Owner
  • Development team
  • Scrum Master
Additional Roles
  • Stakeholders
  • Managers
  • Users

 Scrum teams consists of following features:
  • Team size for scrum team should be 7 plus or minus 2
  • Team should be cross-functional.  Cross-functional teams have all the competencies required to accomplish the work without depending on others who are not part of the team. As we can see there are no testers, coders, programmers, in scrum team.  All the members except Product Owner and Scrum master are called developers.  Developers could be having different skills like programmer, tester, designer, documentation, etc. 
  • Team should be able to do everything required to achieve sprint goals.  There is an misconception that every team member should be able to do everything.  Every scrum team should have developers with variety of skills like programmer, test, etc but every scrum team member is not supposed to do everything
  • Team should be Self-organizing.  Self-organizing teams chooses how best to accomplish their work, rather than being directed by others outside the team.
  • Scrum team should decide on scrum goals and results
  • Scrum team demos work to the Product owner and other stakeholders

Tuesday, January 14, 2014

Ok, Google. Extraordinary feature by Google

World is becoming lazy so am I :-)

Welcome to the world of Google Now. This app works on Android 4.0+.  I recently purchase Nexus 5 phone and found Google bar on my homepage raising curiosity. It is having mike icon prompting me to say something.  It activates by simply saying "Ok Google" and now wonder starts.

What all things you can do with Google Now. Here are the various commands you can try.

Phone Calls 

To place the call simply tell "Call ". If there are more than one contacts found then it will prompt you to select one of them.  If there are more numbers associated with any contact then again it will prompt you to select one. Amazing.

SMS

Again if you want to send sms to any contact in phone's address book simply say "Text " for example "Text wife I will be late for home" and you will be amazed.

Getting Directions

Many times I found it irritating to stop my car to search for the driving direction to the place I am visiting.  Now google has made it easy.  You just need to tell Google Now where you are headed by saying something like "Driving direction to Pune Airport" or "how to get to Pune Airport" and it will give directions from your current location to Airport in just few seconds. How convenient.

Launching Installed Apps

 To launch any installed app in your phone you give command like "Open Temple run 2" and if it finds this app then it will launch this app for you. To launch particular webpage you need to tell "go to www.espncricinfo.com" and it will open browser with this website.

Setting Alarms

 If you want to set alarms then you just need to say "Set Alarm for 6.00 AM" to set alarm for particular time or you can say "Set alarm to 5 hours from now" and alarm would be set from 5 hours from current time. How easy.

Events and Reminders

You can set events by just telling Google Now "Create an calendar event for 8 to 8.30" and it will precisely set it for you.  If you want to Schedule meeting event then you can say "Schedule meeting with Client at 3 to 4".

You can set note for yourself by telling "note to self " and note will be created in Google Keep.

To set reminders you just need to tell Google Now "remind me to " for example "remind me to feed my fish today evening" or even more advanced reminders can be set like "remind me to call the boss when I reach home".  For this to work properly you have set location of your home or your office or grocery store, etc. Mind blowing.

Writing Emails

To send emails you command it "send email to subject message " for example "send email to Rinku subject hi message I am coming to pune this weekend.  Will you be available?" and it will send email as commanded.  Similarly you can post on Google+ by saying "post to google+".

Ask Questions

 Everyone knows Google is Pantomath and it knows everything.  So you can consider Google Now as Google Search and ask any question and it will do search for you.  For example "Find Petrol pump" and it will find all petrol pumps in 1KM area.

Enjoy...




Sunday, November 17, 2013

Configuring VNC server to display Gnome/KDE desktop when connected through VNC client

We all are tired and irritated with the default UI shown by VNC client and would love to have UI showing more menu's and user friendly UI when connected through VNC client.  Here are the simple steps which will show you user friendly Gnome desktop when connected through VNC.

Few basic assumptions:
  • VNC server is already installed on the machine 
  • User can find xstartup file of VNC in /root/.vnc folder on Redhat Linux boxes. User needs to find corresponding folder for other operating systems.

Steps to change the Desktop
  • Go to .vnc folder
  • Edit xstartup file using editors like vi
  • Initial xstartup file will look something like:
    #!/bin/sh

    # Uncomment the following two lines for normal desktop:
    # unset SESSION_MANAGER
    # exec /etc/X11/xinit/xinitrc

    [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
    [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
    xsetroot -solid grey
    vncconfig -iconic &
    xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
    twm &
  • Change it to below to start gnome desktop
     #!/bin/sh

    # Uncomment the following two lines for normal desktop:
    # unset SESSION_MANAGER
    # exec /etc/X11/xinit/xinitrc

    [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
    [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
    xsetroot -solid grey
    vncconfig -iconic &
    xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
    #twm &
    exec gnome-session &
  • Change it to below to start KDE desktop
     #!/bin/sh

    # Uncomment the following two lines for normal desktop:
    # unset SESSION_MANAGER
    # exec /etc/X11/xinit/xinitrc

    [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
    [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
    #xsetroot -solid grey
    #vncconfig -iconic &
    #xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
    #twm & 
    startkde &
  • Kill all the VNC server sessions which are running using command
    vncserver -kill :1
  • Start VNC server 

Tuesday, October 9, 2012

Array to Hash

my @arr = ("Hundred", 100, "Ten", 10, "Thousand", 1000);
my %denomination = map { $_->{key} => $_->{value} } @arr;

while (($key, $value) = each(%denomination))
{
     print "$key, $value\n";
}

Output:
Thousand, 1000
Hundred, 100
Ten, 10 

Wednesday, September 26, 2012

Deletes property in property file if property value matches the given value

# Function Name    :: deleteParameterForValue($$$$)
# Input            : 1. name of the property file
#                  2. Parameter name
#                  3. Parameter Value
#                    4. Delimiter
# Output        : none. Deletes the given parameter from a given file based on value
# Description    : Deletes given property from a given file if its value matches the given value
sub deleteParameterForValue($$$$)
{
    my ($file, $parameter_name, $parameter_value, $delimiter) = @_;
    $parameter_name = &trim($parameter_name);
    $parameter_value = &trim($parameter_value);
    $delimiter= &trim($delimiter);

    $file = &convertSlash(&trim($file));
    my $new_str = "";
    open (FI, $file) or do {  return -1;  };

    while ()
    {
        my ($str) = $_;
        chomp ($str);
        $str = &trim($str);

        unless (($str eq "") || (substr($str, 0, 1) eq "#"))
        {
            my $key = &trim(substr($str, 0, index($str, $delimiter)));
            my $value = &trim(substr($str, index($str, $delimiter) + 1));
           
            if (($key eq $parameter_name) && ($value eq $parameter_value))
            {
                next;
            }
            $str = join($delimiter, $key, $value);
        }
       
        $new_str .= "$str\n";
    }
    close (FI);

    open (FO, ">$file") or do { return -1 };
    print FO $new_str;
    close(FO);
}