Thursday, January 30, 2014

Basics of Agile methodology

Related post: Scrum - an introduction


Agile Software Development

Wikipedia meaning:
Agile software development is a group of software development methods based on iterative and incremental development, where requirements and solutions evolve through collaboration between self-organizing, cross-functional teams.

Why Agile?
It promotes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen tight interactions throughout the development cycle.

Agile methods break tasks into small iterations (that typically last from one to four weeks).
Each iteration involves  planning, requirements analysis, design, coding, unit testing, and acceptance testing.
When one iteration completes, demo is shown to the stakeholders.
This minimizes overall risk and allows the project to adapt to changes quickly.


Waterfall method is very sequential. All steps are performed sequentially
  • Analyses of Business requirements
  • Design
  • Implementation
  • Testing

Any issue would imply going back to the drawing board and starting from Step 1.
This adds to the risk!!!

Agile mitigates this risk since evaluation happens after end of every cycle.
Agile methods benefit constantly changing requirements.


Wednesday, January 29, 2014

B Tree v/s Bit Map Indexes

BitMap v/s B-Tree Index?

If your table has low cardinality value (e.g. Gender column, boolean data), opt for a Bit Map Index.
If your table has high cardinality value, opt for a B-tree Index.

B Tree index is very useful in OLTP systems.
Bit Map works best in Data wareehousing systems.

In Bit Map structures, a two-dimensional array is created with one column for every row in the table being indexed.
Each column represents a distinct value within the bitmapped index.
Thus for low cardinality columns, they become very compact and fast to scan.

In B-tree, records are stored in locations called leaves. The starting point is called the root.
Its a tree where max number of children per node is called order.
Depth is the # of operations needed to reach the desired leaf

Consider below an example of a B-Tree with  

Order   = 2
Depth   = 3
Leaves = 4

                           [Root]
                                |
                                | 
                                |  
                                |  
                               / \  {Node]
                              /   \
                             /     \
                            /\     /\
                           /  \   /  \
                          /    \ /    \
                      [Leaves]