Agile Methodology and Emergence

What is Emergence?

“It is the behavior of a system that is not explicitly described by the behavior of the components of the system, and is therefore unexpected to a designer or observer” – Cunningham & Cunningham, Inc.

“…emergence is the way complex systems and patterns arise out of a multiplicity of relatively simple interactions” – Wikipedia

In short: The principle of emergence is 2 + 2 > 4

What is Agile?

[When I started working on this post, I was desperately looking for a decent definition of agile but could not find one. So, I modified the definition in Wikipedia to something acceptable]

“…refers to a group of software development methodologies based on iterative development, where requirements and solutions evolve through collaboration between self-organizing cross-functional teams.” – Wikipedia

In short: In agile software development …

…requirement emerges

…solution emerges

…team dynamics emerges

Therefore, applying the principle of emergence we can say that when you use agile software development methodology:

  1. The final solution is better than the individual pieces of requirements that you had specified in the beginning and
  2. The team produces more than the sum of the capability of the individual members

Without detailed planning and top down management

For any “manager” it is a paradigm shift in thinking.


How to Setup MediaWiki for Enterprise?

[MediaWiki is an open source wiki which runs Wikipedia – anybody can download it and use it]

We managed to setup MediaWiki for our Enterprise 2.0 initiative. We had to take care of some basic security needs. Our platform was: Windows Server 2003, Apache, and MySQL.

Let me document what we did. (I need to thank Radha who has done most of the actual work and also supplied me with the details to write this post)

Installation for the basic software

  1. Download MediaWiki, Apache, PHP and MySQL from respective sites and install them on the designated machine
  2. While installing PHP (do it after installing Apache), ensure you enable support for MySQL, MS-SQL and any other database support you will need in the future
  3. Any changes that need to be done in Apache has to be in the /conf/httpd.conf file – These may include the port that Apache is listening on, Document root (if your MediaWiki is not installed under Apache/htdocs), etc.
  4. Copy MediaWiki into Apache’s htdocs
  5. Point your browser to MediaWiki’s CONFIG directory/index.php and follow instructions
  6. The process will setup MediaWiki and you will be able to access it from the URL you installed it in e.g., http://localhost/wiki/ or http://n.n.n.n/wikiname or
  7. The installation will create a file called localsetttings.php in the CONFIG folder. Move this file to the root MediaWiki folder
  8. Delete the CONFIG directory
  9. Localsettings.php is the main configuration settings file for MediaWiki. The settings for the wiki can be changed in this
  10. The mediawiki/includes folder contains a file called Defaultsettings.php.

Changes and additions to MediaWiki configuration settings can be copied from Defaultsettings.php onto Localsettings.php but at any cost Defaultsettings.php must never be edited.

See also: MediaWiki – Newcomers guide to installing on Windows, MediaWiki – Installing MediaWiki, – MediaWiki Installation, MediaWiki – Manual:Configuration settings

Put your own logo

Add the following line to Localsettings.php and place your logo in … directory

$wgLogo = “{$wgScriptPath}/file name of your logo“;

See also: MediaWiki – Manual:$wgLogo

Implement access control – no access to the wiki without logging in

Add the following lines to Localsettings.php

$wgGroupPermissions[‘*’][‘read’] = false;
$wgGroupPermissions[‘*’][‘edit’] = false;
$wgWhitelistRead = array (“Special:Userlogin”);

See also: MediaWiki – Manual:$wgGroupPermissions, MediaWiki – Manual:$wgWhitelistRead

To restrict user creation by administrator only

Add the following line to Localsettings.php

$wgGroupPermissions[‘*’][‘createaccount’] = false;

See also: MediaWiki – Manual:$wgGroupPermissions

Enabling image and attachment upload

Add the following line to Localsettings.php. You can include different types of file extensions that you would like to enable upload for.

$wgFileExtensions = array(‘png’, ‘gif’, ‘jpg’, ‘jpeg’, ‘doc’, ‘xls’, ‘mpp’, ‘pdf’, ‘zip’, ‘ppt’);

See also: MediaWiki – Manual:$wgFileExtensions

Alternately, if you want to allow all file extensions to be allowed, add the following line.

$wgCheckFileExtensions = false;

See also: MediaWiki – Manual:$wgCheckFileExtensions

To implement suggest on the search box (auto-complete of a search item)

Add the following line to Localsettings.php.

$wgEnableMWSuggest = true;

See also: MediaWiki – Manual:$wgEnableMWSuggest

Implement parser function extension

[Note: You will need this extension if you want to include the nice looking Infobox that appears on the right side of many of the Wikipedia pages]

Download ParserFunctions extensions and extract it to your extensions directory.

See also: MediaWiki – Extension:ParserFunctions

Add the following line to Localsettings.php.

$wgExpensiveParserFunctionLimit = 100;
require_once( “$IP/extensions/ParserFunctions.php” );

See also: MediaWiki – Manual:Extensions, MediaWiki – Help:Extension:ParserFunctions

To take all non logged in user directly to login page

[Warning: You need to make code change to implement this feature]

Modify the public function loginToUse()in OutputPage.php. You will find the file in the include subdirectory.

$skin = $wgUser->getSkin();

# Begin – Code to redirect to the login page is user has not logged in
$this->mRedirect = SpecialPage::getTitleFor(‘UserLogin’) ->getFullURL() . ‘?returnto=’ . $wgTitle->getPrefixedUrl();
# End – Code to redirect to the login page is user has not logged in

$this->setPageTitle( wfMsg( ‘loginreqtitle’ ) );
$this->setHtmlTitle( wfMsg( ‘errorpagetitle’ ) );
$this->setRobotPolicy( ‘noindex,nofollow’ );
$this->setArticleFlag( false );

Add additional icons in edit toolbar

[Warning: You need to make code change to implement this feature]

Modify the static function getEditToolbar()in EditPage.php. You will find the file in the include subdirectory. Following lines need to be added to the $toolarray initialization.

‘image’ => $wgLang->getImageFile(‘button-table’),
‘id’ => ‘mw-editbutton-table’,
‘open’ => “{|”,
‘close’ => “|}”,
‘sample’ => ‘class=wikitable border=1 cellpadding=2
|+ table name
! header 1
! header 2
! header 3
! row 1, cell 1
! row 1, cell 2
! row 1, cell 3
! row 2, cell 1
! row 2, cell 2
! row 2, cell 3
‘tip’ => wfMsg(‘table_tip’),
‘key’ => ‘A’

See also: MediaWiki – Manual:Custom edit buttons

We have just started exploring the engine. Lot more can be done with it!

What is the Definition of “Agile Methodology”?

I am in a state of shock. [Update: Have a look at What makes Agile agile?]

I was looking for a nice definition of Agile Methodology and I was very confident that it would be easy to find. To my utter surprise, I could not locate any statement which even remotely looks like a definition. Here are some examples:

Wikipedia – “Agile software development is a group of software development methodologies that are based on similar principles.”

[Update: I have changed the definition in Wikipedia to – “Agile software development refers a group of software development methodologies that are based on principles of iterative development where requirement evolves through collaboration between self-organizing cross-functional team.”] – “In software application development, agile software development (ASD) is a methodology for the creative process that anticipates the need for flexibility and applies a level of pragmatism into the delivery of the finished product.”

TheFreeDictionary – “(They are) Methodologies for designing software that have proven to be more effective in dealing with business realities such as changing requirements during development. It promotes industry best practices that emphasize teamwork, customer involvement and the frequent creation of small, working pieces of the total system.” – “Agile methodology is an approach to project management, typically used in software development.” – “In software engineering, agile processes are low-overhead processes that accept that software is difficult to control. They minimize risk by ensuring that software engineers focus on smaller units of work.”

Only one which made some sense is by Scott Ambler:

Disciplined Agile Software Development: Definition – “(It is) an iterative and incremental (evolutionary) approach to software development which is performed in a highly collaborative manner by self-organizing teams within an effective governance framework with “just enough” ceremony that produces high quality software in a cost effective and timely manner which meets the changing needs of its stakeholders.”

I still do not like it.

  • Is iterative, incremental & evolutionary the same? Or, has these three words been put together to be on the safe side? [Update: Here is a nice post by Alistair Cockburn explaining the difference between iterative and incremental]
  • Why highly collaborative manner?
  • Is self-organizing teams a must?
  • Any methodology requires an effective governance framework.
  • What does “just enough” ceremony convey?
  • Which software development methodology does not claim that it produces high quality software in a cost effective and timely manner which meets the changing needs of its stakeholders?

Have you found anything better?

Posted in Agile. Tags: . 7 Comments »

Web 2.0 – Has the term outlived its life?

Frequently I am asked the question “What work you done on Web 2.0?” and most of the time I do not know how to answer it. Invariably I start by trying to explain what I understand by Web 2.0.

If you recollect, the term Web 2.0 had been coined in the year 2004 by Dale Doherty and Tim O’Reilly. The theme of the first Web 2.0 conference was “Web as Platform”. Though, back then, the term was dismissed my many as marketing hype (here is an example), there was a slow acceptance. Gartner initially ignored it but finally recognized its existence in 2006 and included it their hype cycle.

Unfortunately, there was no standard definition of the term. I used to go by the explanation by the originator, which is nicely explained in the post “What is Web 2.0?“. In that Tim O’Reilly had identified 7 characteristics:

  1. The Web As Platform
  2. Harnessing Collective Intelligence
  3. Data is the Next Intel Inside
  4. End of the Software Release Cycle
  5. Lightweight Programming Models
  6. Software Above the Level of a Single Device
  7. Rich User Experiences

It has been about 3 and a half years since the post and I think it requires a relook. We have specific terms covering each of these concepts.

From (2005) To (2009)
The Web as Platform Cloud Computing
Harnessing Collective Intelligence

Data is Next Intel Inside

Social Computing and Sharing
End of Software Release Cycle

Lightweight Programming Models

Agile Methodology
Software Above the Level of a Single Device

Rich User Experience

Multi-Channel User Experience


To this you need to add the technology terms like:

  • RIA (Rich Internet Application)
  • WOA (Web-Oriented Architecture)
  • Mashup

Also, you have many many variants of Web 2.0 like Enterprise 2.0, Travel 2.0 etc. Today I read an article from HBR talking about Finance 2.0. I have even seen the term Women 2.0!

I suggest that you do this exercise. Think of any word – add 2.0 to it – Google it. Can you find a word which does not give you a site explaining what 2.0 of that word means?

Therefore, if you are asked “What work you done on Web 2.0?” the question may refer to any of these points.

So, what do you think? Has the term outlived its life?

Posted in Trend, Web 2.0. Tags: , . 3 Comments »