Wednesday, September 05, 2007

The Mythical Man-Month

The Mythical Man Month


The Mythical Man-Month was written by Frederick D. Brooks in 1975 and deals with various aspects of problems related to software engineering. The book is considered to be a masterpiece and features on various suggested reading lists including that of Joel Spolsky. After undergoing an elective course on "Managing Software Projects and Enterprises" during my 4th term of PGP curriculum at IIM Ahmedabad, I decided to read the book and hopefully summarize the essence of its text. The following is a chapter-wise summary of the book. The work was first published in 1975, and republished as an anniversary edition in 1995 with the essay "No Silver Bullet" and commentary by the author.

1. THE TAR PIT

An interesting concept of how debugged programs can be turned into useful commercial entities. A 'program', here, means a debugged piece of code which performs some specific task. A 'programming product' is a program that can be run, repaired and extended by anybody. It is useable in many operating environments and for many set of data. A 'programming system' can be thought to be analogous to a development platform. It comprises of debugged components and established interfaces which can be used to build larger programs.


1. Program

2. Programming System

3. Programming Product

4. Programming Systems Product


Brook's says that it is 3 times for difficult to transition across a horizontal or vertical boundary. Hence, moving from A to B or C requires 3 times the effort of building A. So, moving from A to D would require 9 times the effort!


The chapter emphasizes the fact the programming is a craft and the pleasure associated with it are due to several reasons like cognitive freedom, thrill of creation etc. The same reasons result in the woes of the craft as well - jumbled thoughts, no physical system to test complications, burden of taking the entire responsibility on our self for failed ideas, etc.

2. THE MYTHICAL MAN MONTH

Schedule estimates go awry because they are made on an optimistic premise that everything will go right. The strong belief in our own competency and the fact that a programming idea is purely internal, unaffected by physical limitations of equipment or material resources available, clouds the reality.

The Brook's law is postulated as - "Adding manpower to late software project makes it later". The author argues that using 'man-month' as a unit of measurement of effort is a dangerous practice. Reasons behind this are:

1. Increasing number of people increases communication overheads and training time.

2. Tasks are sequential and adding people doesn't make them parallel.

The thumb rule for scheduling a software task is given as:

1/3 planning

1/6 coding

1/4 component test and early systems test

1/4 complete system test

3. THE SURGICAL TEAM

The problem addressed in this chapter is that competencies among peers is not equal. Sometimes the order of difference can be as large as 10 times! Ideally, one would like 'a small, sharp team'. A new organization structure based on a surgical team paradigm is proposed:

1. The Surgeon - The chief programmer. He personally defines the functional and performance specifications and designs the program.

2. The Copilot - Alter ego of the surgeon, he knows all the code intimately. He researches alternative design strategies and points out flaws in the Surgeon's approach. However, the Surgeon is not bound to accept his recommendations.

3. The Administrator - He handles money, people, resources and interfaces with rest of the administration of the organization. The Surgeon is the boss, The Administrator is the manager.

4. The Editor - Though the Surgeon generated documentation for clarifying his own thought process, the Editor criticizes it and improves it by adding references and maintaining versions.

5. Two Secretaries - One each for the Administrator and the Editor to assist in paper work.

6. The Program Clerk - He maintains all the technical records, maintains libraries and keeps the code repository in shape.

7. The Toolsmith - Responsible for providing, maintaining and upgrading programmer tools like file editing, text editing, IDEs, makefiles, debuggers, build environment etc.

8. The Tester - He writes the test cases, carries out all phases of testing and acts as a friendly adversary to the Surgeon.

9. The Language Lawyer - If the system under development is a programming language or a platform, this guy will showcase to the world the neat tricks and tips of using the system. He is the spokesperson, tech-support and marketer of the system.

The surgical team works because there is no division of work and a superior-subordinate relationship is maintained. However, it can't work for large projects. Moreover, the issue of suppression of creativity of members other than the Surgeon comes into play.

4. Aristocracy, Democracy and System Design

A system design should reflect a conceptual integrity rather than a patch up of good but anomalous features. Also, there should be a fine balance between functionality and conceptual simplicity of a programming system. Excess of either can result in loss of purpose. Conceptual integrity demands that design should be a product of a single mind or a very small number of similar thinking minds. However, large projects need many people for implementation. This paradox can be resolved in two ways - by separating architecture from implementation and by following the proposed Surgical Team organization. The issue of hindered creativity of developers can be resolved by recognizing that even the implementation within the bounds of a defined architecture requires lot of creativity and decision making.

5. The Second System Effect

Some important tips are given for the architecture to not get overenthusiastic while designing the system.

1. Remember that the programmers have the creative freedom on their implementation. So don't start dictating on that front.

2. Always be prepared to suggest one way of implementing things. However, accept the developer's way whenever he differs.

3. Deal quietly and privately in such suggestions.

4. Be ready to forego any credit for improvements.

When an architect develops a system for the first time, he will be extra cautious and careful. However, some or the other problem will always creep in as the exercise proceeds. The third and later systems he designs will be in conformation to his earlier experiences and general patterns he has observed during the development cycle. However, the second system is the most dangerous as the architect will always have a tendency to over-design the second system. The architect should avoid functional ornamentation and stretching of functions far beyond their required purpose.

6. Passing The Word

Dissemination of information regarding design and implementation details is critical to the success of a project. Written specifications should capture all the intents of the user; even if this process has to through several iterations to achieve concurrency of minds. The style must be precise, full and accurately details. However, the specification document should not venture into the implementation aspects of the system.

Generally, when there is a confrontation between a manual and the actual implementation, the manual loses. However, this can't be afforded when a programming language or a platform is being built.

7. Why Did The Tower of Babel Fail?

Tower of Babel is described as the first human engineering project to fail. The first one, Noah's Ark, was a resounding success. The failure came because the groups involved developed dissonance because of different languages they spoke. A software project is doomed to meet the same fate if the different stakeholders are not on the same communication plane. Teams require to communicate among themselves in as many ways as possible - informally, through meetings and by maintaining workbooks.


The maintenance of workbook has been explained in detail. For large projects, workbooks tend to grow to prohibitive sizes. In such circumstances, maintaining a change summary on top of major revisions (with the help of already available well-advanced text editors) should be practiced.

As the organization size grows, the number of communication interfaces invariable explodes. With this respect, achieving division of labor and specialization of function achieves paramount importance. To illustrate the fact, a relevant excerpt for the book "The Man Who Sold The Man" has been presented.

8. Calling The Shot

The chapter describes the inherent fallacy in extrapolating short-run project productivity and phase-wise time distribution data (i.e. fraction of total time used for design, coding, testing etc.) to estimate the effort for large projects. It is shown that the effort increases exponentially rather than linearly. The exponent estimated from sample data is 1.5. Data from various studies are given to highlight this aspect.

9. Ten Pounds in a Five-Pound Stack

Program size control and memory footprint reduction are the main them of this chapter. The information presented is from the view of Systems Programming and emphasis has been given to prevention of the already limited system memory with large programs. No specific technique is dealt in detail. Mention has been given to algorithm complexity, space vs. time trade-offs, space vs. functionality trade-offs, overlay technique to reuse memory etc.

10. The Documentary Hypothesis

The hypothesis, verbatim copied from the book, is as follows:

"Amid a wash of paper, a small number of documents become the critical pivots around which every project's management revolves. There are the manager's chief personal tools."

The critical documents are - Objectives, Specifications, Schedule, Budget, Organization chart, Space Allocations and Cost Estimates. An illustration of the idea is made by describing the documents required for managing a University Department.

11. Plan The System for Change

The ideas presented in this chapter are quite radical. The journey from prototype to final customer deliverable product cannot be one giant leap. There is bound to be an intermediate state of system development when unforeseen problems accumulated while scaling from prototype to deliverable product make further development tedious and patchy. The system has to be redesigned from scratch keeping in mind the learning from such an exercise. Moreover, customer requests and expectations will also change as the system develops and they play with it. In such a scenario, it will be foolhardy to be headstrong about "doing it right the first time". A throw-away system should be part of the schedule planning itself and not come as an afterthought or compulsion.


Also, the organization structure should be such as to allow the architect and implementers the flexibility to have one throw-away system. The architect will tend to be defensive about his design and will not commit to put it in writing as later it is bound to backfire. The managers and technical team should be interchangeable as much as their talents allow to achieve such a flexibility.


The bug-fixing process is described as 'two steps forward, one step backward'. All repairs tend to destabilize the overall architecture of the system. This happens because bug fixing is generally done by junior programmers who don't have completely overview of the system and it is unknown that removal of a local defect causes what effects in some other part of the system. To quote from C. S. Lewis:

"That is the key to history. Terrific energy is expended - civilizations are built up - excellent institutions devised; but each time something goes wrong. Some fatal flaw always brings the selfish and cruel people to the top, and then it all slides back into misery and ruin. In fact, the machine conks. It seems to start up all right and runs a few yards, and then it breaks down."

12. Sharp Tools

Tools are quintessential to the system development process. However, there exist personal preferences of each member of team for a particular tool amongst various available options. Also, people tend to guard their tools as they are a reflection of hard-earned personal skills. This approach is destructive for a programming team. Hence, as discussed in the Surgical Team, the toolmaker is responsible for acquiring, distributing, maintaining and upgrading the tools. He also makes specific tools for the chief programmer as the need be. The various tools which a manager must plan for are:

1. Computer facility - Target machines (for which the system is being developed) and vehicle machines (on which the system is developed)

2. Operating system

3. Programming language

4. Debugging aids

Note: The technical details in this chapter are quite dated. C is not even mentioned as a system programming language. RAD tools are too far beyond the horizon.

13. The Whole and The Parts

Testing philosophy and details are the focus of this chapter. Careful function definition and testing the specification itself is the first safeguard against potential bugs. A top-down approach of specification development is proposed. One should sketch a rough task definition and a rough solution method that achieves the principal result. Then one examines the definition more closely to see how the result differs from what is wanted, and one takes the large steps of solution and them down into smaller steps. Each refinement in the definition of the task becomes a refinement in the algorithm for solution, and each may be accompanied by refinement in data representation.


The details of debugging techniques are dated. Structured programming and discouragement of GOTO usage is heralded as the way ahead. Debugging techniques like On-machine debugging, Memory dumps, Snapshots and Interactive debugging are discussed.


It is suggested that for system testing, one should use only debugged components. One should not use bolt-it-together-and-try approach as this mixes system bugs with component bugs. Whenever a new or improved component is added or replaced in the system, the entire system testing should be redone. Plenty of test support architecture should be built. Generating automated test code and test data may require as much as 50% of the effort to write actual code. But this infrastructure is necessary for speedy testing and delivering a robust product. Also, changes made during bug fixing should be well controlled. All changes should get documented and should be clearly identifiable till they get tested and do not become integral part of the system.

14. Hatching a Catastrophe

"How does a project get late? …. One day at a time." Thus begins the chapter on managing schedule slippage. It is argued that big catastrophes or failures in design receive immediate attention and hence get sorted as quickly as possible. However, small slippages like sick leaves, executive meeting, unplanned customer visit, system outage etc. go unnoticed and people take optimistic attitude that they can be covered.




It is suggested to have concrete, definable "milestones" to keep track of the project progress. Milestones should be unambiguous. Fuzzy milestones will result to overlooking of slippages by both the line managers as well as the project manager.


An interesting result is shown from two studies conducted on estimating behavior of government contractors on large scale projects:

1. Estimates of the length of an activity, made and revised carefully every two weeks before the activity starts, do not significantly change as the start time draws near, no matter how wrong they ultimately turn out to be.

2. During the activity, overestimates of duration come steadily down as the activity proceeds.

3. Underestimates do not change significantly during the activity until about three weeks before the scheduled completion.

There is an inherent conflict of interest between line-managers and project manager on dealing with slippages. A line-manager would not want to reveal the small problems to project manager and try to deal it himself. Project Manager, though, needs to know the true picture in order to plan for slippages. The situation is aggravated when the Project Managers convert a 'status review' meeting into a 'problem solution' exercise. The Project Manager should accept the status reports without panic or preemption and let the line-manager deal the situation.


PERT techniques go a long way in providing the exact picture of effects of schedule slippages in the components. Because PERT is an elaborate technique, at least a critical path analysis should be done. A 'Plans and Controls' team is suggested to manage the tasks of gathering information and carrying out the PERT analysis. The team should be diplomatic and should devise inventive ways of unobtrusive but effective control methods.

15. The Other Face

A program has two faces - one which is seen by the machine and other which is seen by human user. The other face should be intelligible to a user of the program. Note that that 'the user' here may be different from the programmer who wrote the program code. Thus, documenting a program is very essential. However, documentation is more preached than practiced. A company should not establish elaborate documentation policies because experience shows that earlier generation of programmers were not able to follow the practice as desired and neither will current generation of programmers.


There may be 3 types of program users - a casual user of program (load and execute), one who depends upon the program for functionality (use library or component) and one who must adapt the program (feature enhancement or future versions).


A simple 3-4 page prose documentation suffices for the needs of a casual user. The following information should be captured - purpose of the program, system requirements, valid domain of input and range of output, any standard algorithms used, input-output format, command line syntax and abort sequence, expected running time for a problem of specified size on a specified machine configuration and means to perform error checking of results.


A component user requires a suite of test cases to validate the library after it has been integrated in his own code. The test cases needed are:

o Functionality test for commonly encountered data

o Edge cases on the input data domain

o Barely illegitimate cases from the other side of input domain boundary to test for proper exception raising and handling.

For future code modifiers, the source code itself should serve as a documentation. Variable names, initialization labels, code block indentations, function names etc. should all help in telling the story in their own right. Paragraph form of comments should be inserted to explain the logic flow. One should not get into complication of drawing elaborate multi-page flowcharts. A flowchart has utility only if it can be compresses into a single page to show the top level program organization. In theory, flow chart should drive the code. But in practice, flow chart is generated after code is written to comply to company policies. Why create rules and harp on them which have traditionally never been followed?


16. No Silver Bullet - Essence and Accident in Software Engineering

This chapter was added into the 1987 edition of the book. No Silver Bullet - essence and accidents of software engineering is a well-known paper on software engineering written by Brooks in 1986. Brooks argues that there will be no more technologies or practices that will serve as 'silver bullets' (legends say tat only silver bullets can be used to kill werewolves) and create a twofold improvement in programmer productivity over two years. The entire text can be found here.


17. "No Silver Bullet" Refired

Several articles were written by Brook's contemporaries as a rebuttal as well as support of Brook's arguments in his No Silver Bullet paper. This chapter is meant as an answer and explanation to these responses. Again, the brief summary of the arguments can be found here.



18. Propositions of The Mythical Man-Month: true or false?

This chapter presents a point-wise summary of ideas presented in the 15 chapters of the initial edition of the book. It may be a useful section to preserve as a handy reference-guide.


19. The Mythical Man-Month after 20 Years

Brooks goes on to expound on relevance of his theories and ideas in context of 1995, 20 years after the first edition was published. While some of the core principles have attained increasingly strong position, some implementation ideas have either been proven wrong or become obsolete with microcomputer revolution and advances in programming tools and languages.


The central argument of the conceptual integrity and the separation of architect from implementers appears more convincing than ever. Though enterprise level solutions pose the challenge of efficiently implementing the functional separation concept, yet divide-and-conquer and recursion techniques like maintain architects for major function areas under a principal architect can achieve the benefits proposed.


Shrinkwrapped software products give rise to 'Featuritis', the besetting temptation for the architect to overload the product with marginal utility features. Also, the larger and more amorphous the user set, the more necessary it is to define it explicitly if one is to achieve conceptual integrity. A system architect should find out (or guess, if data is not available) on the relative frequency of different attributes of the user set. Such exercise is immensely helpful in defining the scope and complexity of the product.


The idea of a planning for a throw-away system (Chapter 11) seems to contradict the caution given against second system effect (Chapter 5). However, Brooks explains that the confusion is linguistic. The second system in Chapter 11 is the second try at building what should be the first system fielded.


The success of WIMP interface (Windows, Icons, Menus and Pointing Devices - a terminology used for GUI when it was first proposed by Doug Engelbart in his historic 1968 demo and later developed at Xerox Palo Alto Research Center. The story of Steve Jobs "coaxing" Xerox management to showcase the technology to him, its porting to 'Lisa', triumph on Macintosh and 'influence' on Windows is an interesting sidetrack to follow) is cited as a triumphant example of conceptual integrity and successful metaphor conforming to the mental models of desktop workspace arrangement. Substantial critique is made of various aspects of WIMP in about 4 pages.


Attention is next drawn to the Waterfall Model of Software Engineering. This sequential method of developing software is acknowledged as implicitly assumed in suggestions such as 'build one to throw away' and proportioning time between design, development and testing. Brooks admits that that the suggestions derived as such suffer from the basic fallacy of waterfall model in that it assumes a project goes through the process once, that the architecture is excellent and easy to use, the implementation design is sound and the realization is fixable as testing proceeds.


An incremental-build model is suggested as better for progressive refinement. An end-to-end exoskeleton is first built according to the design decisions but has blank function bodies. The functions are incrementally fleshed out and system testing is performed at each significant increment. This ensures that there is a debugged, tested system at every stage. Microsoft's daily-build process, incremental-build and rapid prototyping are explained in this context. Further, the importance of Object Oriented programming and its properties like information hiding, data abstraction and inheritance are shown to give tremendous advantage in following an incremental-build as well as code reuse approach.


Empirical, independent studies are then referred for showing the validity of Mythical Man-Month and Brooke's Law. The Brooke's Law is modified on the basis of data to show that its possible to finish a slipping project on time by adding manpower but only if this is down before the middle of the project timeline. Any later additions will result in project delay. There will be a drop in efficiency immediately after manpower addition. However, given enough time (i.e. for new developers to become familiar with program and knowledge dissemination having taken place) the efficiency can come back on track.


'Peopleware' is given more credence now. The real assets of the project are its people. A heavy price has to be paid for moving projects between different teams or loss of knowledge due to attrition. It is also suggested that power of decision making should be transferred deep down the organization hierarchy as much as can be warranted. Example of Microsoft product development teams is given to highlight the productivity gained by such a management philosophy.


The last 10 pages of the book are devoted the phenomenon of explosive growth of microcomputer and the allied industry of shrinkwrapped software. The technological improvements in hardware have made overcome various accidental (term used by Brook to refer to the implementation aspect of the software development) restrictions mentioned in earlier chapters. The development platform choices have coalesced into few operating systems. One can now buy software off-the-shelf rather than incurring expenses for in-house or outsourced development. Brooks makes the observation that organizations have learnt to modify their business processes to fit to these available software products rather than putting efforts into building a software highly customized to their original processes. In the areas where this does not change the very basic nature of organization's business model, there is cost saving to be made by this paradigm shift. Also, accidental complexities are proposed to be only 1/10th of the overall complexity in building a software product. Hardware and development tools improvements only attack accidental complexities and the order of magnitude in efficiency gains obtained thus can at maximum eliminate 1/10th of overall complexity. The rest 9/10th complexity is due to essence, I.e. the design conceptualization of software product. Earlier nothing significant was available to attack this complexity. But emergence of shrinkwrapped software and expected emergence of components market (off-the-shelf C++ classes) has given rise to build-on-package phenomenon which truly attacks the essence complexity.


Lastly, it is hoped that software engineering will truly attain the properties of an engineering discipline when distinctive processes giving exact results would have been identified to build software.

Monday, August 27, 2007

Steve Jobs and Bill Gates, together!

Jobs and Gates appeared together on stage to interview for D5 at All Things Digital. It was a fitting culmination of my two week long sojourn into the history of personal computing. I had watched Pirates of the Silicon Valley, read Fire in the Valley, saw Apple 1984 superbowl ad, unearthed clippings from Triumph of the Nerds, enjoyed some really creative ads of Mac vs. PC (here and here), heard Job's Stanford 'Stay Hungry, Stay Foolish' commencement speech, got acquainted with antics of Jobs, and had even seen the entire Apple WWDC 1997 when Jobs announced Apple entering into partnership with Microsoft and Gates was towering above him from the projector screen.

Here are the YouTube links to the interview video (10 parts of 8 min. each):

http://www.youtube.com/watch?v=6G3Vcy7u8Gs

http://www.youtube.com/watch?v=RlnapkgH6bQ

http://www.youtube.com/watch?v=tEd6WzDczzE

http://www.youtube.com/watch?v=oZTQeqpdDYQ

http://www.youtube.com/watch?v=vwYxjgyPHNM

http://www.youtube.com/watch?v=4k8ZUxMSb3M

http://www.youtube.com/watch?v=tN3Y5_Yjkd8

http://www.youtube.com/watch?v=tWf0n2S-L3s

http://www.youtube.com/watch?v=TMxR-XDTeG4

http://www.youtube.com/watch?v=wqTDBArvHQE

http://www.youtube.com/watch?v=wqTDBArvHQE




Saturday, August 25, 2007

Hibernation

The last post from my side was made some 2 months ago. Mr. McNamara's few advices still need to be chronicled. Random discussions, which have been major source for the underlying themes of my posts, have dried out. The group with which I regularly rallied on such matters has ceased to exist for all practical purposes. These and such other reasons have put the blog into hibernation.

Paradoxical as it may seem, the number of ideas sharing my mind-space have, however, multiplied. It has been becoming increasingly difficult to prevent the mind from hopping from one thread of thoughts to another. The time-splice allocated to activities have become ridiculously small. Here, sum-of-parts cannot much a contiguous total.

Hesitation has also set in to pour out seemingly non-business thoughts in public domain. Authoring on some niche topic would have been probably easier and the blog could have mostly cruised in auto-pilot mode.

I met Morpheus on 11th June. We were meeting after nearly 2.5 years. Morpheus has been in his own thick of things. Generally our troughs and crests of blogging alternate. A steady flow of posts had been thus maintained. This time, however, we both have hit "sleep mode" on our individual blogger-pods at the same time. Come on Morpheus, show Neo the path, as you are supposed to. Free your mind (and time)! Lets see some posts here, friend.





Friday, June 22, 2007

Fog of War (Part II)

(continued from Part I)


4. Maximize efficiency


A significant wastage of efforts ensues when decisions are on live-wire and desperate moves seem to be the last resort out. Inefficient planning will not only delay the achievement of the objective but also put heavy drain on resources thereby significantly altering the strategic advantages. It s imperative to look at the efficacy with which success is being achieved. A brute force method is only good so long as micro-management is not required. Otherwise, somebody has to hard-sell an efficient solution, which defies established thumb rules, to his/her superiors.


During WW-II, the Allied forces were initially using China as the airbase for its Japan bombing operations. The B-29 bombers were being flown in from Kansas, USA to Arunachal Pradesh, India. They would then be loaded with fuel and fly across the Himalayas to China airbases. The fuel would be off-loaded for creating reserves for mainland Japan bombing operations. The Chinese air-field were constructed by manual labor. The whole operation was insanely inefficient. It was only when the action arena was transferred to Pacific (and Mariana) theater that a swift progress was made by US against Japan. The decision of transferring entire war-machinery from one theater to another would have required great conviction as well as convincing.


5. Proportionality should be guideline in war


Every war has its own magnitude of what is acceptable as "collateral damage". However, both parties should adhere to the limits of this number. A mindless action by one party (maybe another manifestation of "brute force") could blow apart this unwritten rule of war. Killing of civilians, women and children has always been deplored when the winner tramples over the vanquished. But as human race builds better and better weapons of mass destruction, the idea of proportionality of destruction has been buried by the desire to win (and experiment) in the minds of military leaderships.


US dropped two atomics bombs on Japan after they had destroyed some 67 Japanese cities to the tune of 50% to 90%. On a single night of fire bombing (using "incendiary bombs") on Tokyo, more than hundred thousand people were annihilated. Tokyo was then primarily a wooden city and fire bombs wreaked havoc. Dropping two atomic bombs after causing so much destruction was an act completely out of proportion to whatever had been the scale of US-Japan war , unarguably the most brutal war in the history of mankind.


6. Get the data


The most obvious deductions don't require geniuses to figure them out. But, even the not obvious ones need not wait for geniuses to unearth them. Relevant data can be the crucial differentiating factor between circuitous, futile analysis of problems as opposed to hitting the bull's eye. Data can put into perspective the subjective judgments and give a replicable framework to arrive at insightful conclusions. In the wake of missing data, a successful decision will appear a lucky guess in retrospect. However, a word of caution - data without proper tools and methodology to analyze is no good than junk.

Fog of War

Robert McNamara is former US Secretary of Defense. He has served under both Kennedy as well as Johnson administration. In essence, this makes him a key player in two very important events in the Cold War era - the Cuban Missile Crisis and the Vietnam War. BBC produced a documentary "Fog of War" (2004) in which Robert McNamara narrates "11 lessons" he has learnt through his experiences by living the Cold War 24 X 7 for 7 years (1961 - 68) of his life. McNamara is attributed by some to be a "war-monger" responsible for causing heavy losses by not reducing US involvement in Vietnam. However, his these insights should be taken from viewpoint of a skilled manager rather than a war hero. Here is my own interpretation of these "11 lessons" coupled with the facts narrated in the documentary.


1. Empathize with your enemy


One must understand the mental state of the enemy. Every person, especially if he is leading others, wants to walk away from a conflict feeling vindicated. If the situation is clearly understood, one may actually afford to let the enemy "feel" victorious (or at least vindicated) to have more fruitful outcomes in one's own favor. In the Cuban Missile Crisis, Kennedy let Khrushchev tell Russians that the Commies were successful in "preventing" an American invasion on Cuba; while at the other hand, Americans were able to get the nuclear warheads dismantled from Cuba without having to shed a single drop of blood. Khrushchev got something to give back to his countrymen out of the conflict he had chosen to escalate and Americans were happy to let the Commies believe that they had bullied USA while achieving the real purpose of diffusing the impending nuclear war.


2. Rationality will not save us


The belief in Game Theory that all actors are "rational" does not work in when human beings are under pressure. One cannot trust "enemy's rationality" to plan out his/her moves. The following snippet of conversation proves this by revealing how scaringly close the world had reached the brink of a nuclear war because of "unexpected irrational" behavior.


When Fidel Castro was asked by McNamara almost 20 years after the Cuban Missile Crisis:

  1. Did he know the nuclear warheads were already fitted into the Russian missiles (i.e. missiles were "launch ready")?
  2. If you knew that, would you have recommended to Khrushchev to use them in face of an US attack?
  3. If he had used them, what would have happened to Cuba?


Castro replied:

  1. I knew they were there.
  2. I would not *have* recommended it to Khrushchev, I *did* recommend that to Khrushchev.
  3. We would have been totally destroyed.


3. There's something beyond one's self


One has to observe and adhere to the values which are extrinsic to the conflict situation. The war may tend to make one weak, immoral or deceitful; but how much one succumbs is a matter of strength of personal will-power as well as the gravity of situation. Also, beyond the high adrenaline action, one should be (in an ideal situation) able to love his family and cherish the happy moments spent with them.



(to be contd..)

Sunday, June 10, 2007

Better than salsa

Stupid as it may sound, the forces that be have made me formally answer why I am fit to be part of a computer gaming community. An excerpt from same:

Q - What are your expectations from the community?
A - To allow to prove that a left arrow tap (“dodge” move) can be as scintillating as a salsa step.

Q - Any prior experience in gaming?
A - Extract from my 'last working day' mail to gamer’s club at workplace:

I bow to the gallery and take farewell from the arena. It was an honor to fight the warriors. As they said in Troy, 'I walked with the giants'. So long, till our IP addresses ping the same server for another round of gore."

Wednesday, June 06, 2007

This Summers

I was alive and kicking for the past 2 months. Summer Internship time. It was great to be back in actual work atmosphere, to tackle the ambiguities and organization hierarchies, to hear middle management tell "this is how business is done", to know that its a bad world out there and there are no pretenses to portray the contrary.

My project was making a business case for a project to be taken up by my organization. It involved aspects right from demand estimation to evaluating business models to making breakeven analysis to chalk-out implementation details. Here are some of my personal learnings from the Summer Internship. They may be particular to the nature of project and may not be relevant in entirety for all MBA Summer Internships.

  1. Identify the organization hierarchy
  2. Know the operational touch point in each deptt.
  3. Understand the business
  • Nature of business
  • Market
    • Competitors
    • Pricing - Landed cost at each point in supply chain, nature and reasons for margins in each case
    • Customer segments
    • Customer expectations
    • Ground situation where the product is used (perceived quality and utility)
    • Recent changes in the market - arrival of new competitors, changes in market of primary product if the product under study is a derived product
    • Expected trends in near future and in long term
    • Macroeconomic, social and political factors which have implications on business regulations, consumer behavior, supply chain relationships and logistics.

  1. Company's history - past lows, success/failures of high risk projects/ turnarounds
  2. Changes in organization structure, new management changes in recent past, effects of this on policies and business
  3. Stakeholders in the project
  • Whom is the report intended for?
  • Is it a "recommendation" or a "validation"? A "recommendation" is used by middle management to get buy-in from senior management. A "validation" is commissioned by senior management to make middle management work and prove that the senior's vision or gut feeling is quantitatively correct
  • Are there opposing views in the organization on the final decision? If yes, why? Which side are you on? How do you defend your recommendation in weak/grey areas of analysis.
  • Which party is stronger? You are working under which party?

  1. Gathering information
  • Generate contacts - they will lead to top or middle management of other organizations (logistics provider, distributors, marketing agency etc.)
  • Get the details of field and/or operational person - the most important source of info which will shape the analysis
  • Open both the formal and informal channels of communication. Informal info comes only from people in field, who are closer to the customer than to the power dynamics in management
  • Keep making sense of the info and how it is helping in the final evaluation of the business idea. Don't pursue a line of thought if it seems academically sound but doesn't have data available or does not make business sense.
  • Data may not be readily available. Try to find secondary data if primary data is not available. Assume percentages where there is no data and ask the relevant people in field or middle management to approve the assumptions or correct it

  1. Analysis
  • Make a tree structure of different decision paths
  • Make a 2-3 level analysis by generating options, evaluating and recommending for the various implementation details of the business
  • Make a PPT which can navigate through these different paths - use hyperlinks, which can easily take one back at the parent node at any point
  • Use sensitivity analysis where assuming some numbers as input data to show that if the actual is off by 5% or 10% either ways, how much will it affect the final result
  • Use graphs judiciously so that the visual representation of data directly makes that impact ("moment of enlightenment") which you felt when the data started making sense to you. Each chart-style has its own nature of impact. Pie chart - best represents share/contribution. Scatter plot - best represents trade-off analysis
  • Put charts on PPT and use hyperlinks to invoke the Excel files which have calculation. People assume that the numbers have been worked and don’t want to see Excel sheets. They want to see them only when the final result or trend reported by you does not fit the perception they had been carrying about that matter. Then you will need to convince them with the data and calculations
  • Insert extra worksheet in each Excel file which contains data sources - Name of the person, Actual data file. This gives credibility to input data
  • Show incremental recommendations after analyzing each sub-area of decision to show that you are slowly building up the solution to the bigger problem

  1. Validation
  • Try to validate and "stress-test" your recommendation
  • If possible, try to run some simulation by inputting live/actual data to show what will be the performance of your proposed solution. This analysis may throw surprises and suggest area which need to be explored apart from the problem in question. Maybe the root-cause may come out to be somewhere else.

  1. Winding up
  • Even after the appraisal, get a feel of what is the opinion of various stakeholders on the both the analysis and results. People will open up earlier withheld information and/or personal opinions in order to either support or invalidate your recommendation. This will let you know what to watch out for when doing a similar analysis.
  • Write thank-you mails to all who have helped with their insights and data collection. Don't divulge actual recommendations to parties outside the organization.

  1. Organization skills
  • Understand your official level in the organization
  • Try to maintain the hierarchy structure if its strictly followed in the organization
  • Socialize with the peer or immediate junior level employees of the organization. The informal info on both the boss as well as the project is much helpful
  • Get to know the HR systems, various job profiles, satisfaction levels, possible career growth etc. so that it helps to make a decision in case you are offered a PPO.

Monday, May 28, 2007

An Unusual Birthday

In my all recallable memory, this birthday would be the most unusual one. Here I am, not too far away from where I was born, but in a different country. Dubai, UAE. Not a truly exciting name for people (and a month ago I was like them) who have little knowledge of Middle East cultural diversity and openness.


Celebrating an International birthday raised its own peculiar issues. Family and near ones called up and the wishes were racing against the international call tariffs. Some friends reported online that they are finding my number unreachable. It was then that I told them of my journey across borders and hopefully abated their anger against my telecom service provider. A friend started conversing with me at 23:00 IST only to realize later that I am behind by 1:30 hrs. After hearing a couple of yawns from her, I accepted the wishes at 00:30 IST (23:00 local time for me) and requested her to go to sleep. I guess, my birthday would have be crossing over Afghanistan at that moment.

[ smiles :) ]


A significant change (or drop) in the number of wishes I would have accumulated came from a very simple and single act - I had removed my Birthday date from my Orkut profile almost a week ago. With all due credits to the hugely successful birthday reminder services out there, it proves beyond doubt that Orkut has become an indispensible tool for sustaining the friendships and medium of contact for lot of young people in India (and Brazil).

Disclaimer: The above conclusion is under the assumption that many 'friends' would have scrapped me birthday wishes had my Birthday reminder been visible on their homepages. As I am in a good mood, I will want to keep that assumption.

[ smiles :), again! ]


And the last candle on the cake (its my birthday and I don't want to use the phrase "last nail in the coffin") was that today is Sunday and many people generally stay away from online presence. This is however another revealing insight, if I have read it right. People go to work and prefer online socializing during office hours but do not indulge in it on weekends which should ideally be their "free time"! I am happy today. So my assumption is that many people were doing lot of fun outdoor activities this particular weekend and thus shunned online socializing for one day.

[ smiles :) ….duh!! ]


Now a brief round up of this so-uneventful-that-it-became-eventful day.


UAE has Friday and Saturday off. So while Sunday is off in India, it was a working day here. My birthday dress today was a white starched crisp shirt, formal trousers and a matching dark-grey chequered tie (no, not like the F1 flag). It couldn't have been more exciting.

[ smiles :)…. stop it now !@$#$%^!@].


The office has only 4 people staffed in it and all carry a copy of the key to main door. Summer Interns don't have that luxury. I reached early to office, all bright and shiny (remember the "white starched crisp shirt"?) But everybody else was on an 'extended weekend mood'. So, I was outside office, without key and without luck. Pantry area beckoned me and I waited there for an hour or so before one divine figure arrived. 'The gates of heaven' opened for me. The person had failed his driving test and was not exactly in what would comprise a jubilant mood. I preferred to steer clear from him (wish he had steered clear from his driving test obstacles). After staring at my empty inbox, non-descript scrapbook and un-ringing (both for SMS as well as calls) mobile phone for some time; I decided to read about how Nazis never lost the World War II and are hiding in secret bases in Antarctica. Wonder how they celebrate birthdays there?

[ :)… ok, have it your way!]


Gracefully, there was another Summer Intern from IIMK who kept me company during the day. He was receiving and making more phone calls than me. He had to go to Saudi Arabia and his travel plans and Visa were in disarray. He seemed to be having a more exciting time than me, at least in some sense. After lot of yawning and stretching, I made it evident to him that I am thoroughly bored and want to go out some place. With his Saudi dreams taking off from the Dubai airport tarmac, we visited a shopping mall to look at randomly beautiful European ladies. (the "randomly" adjective can go both with "beautiful" as well as "European"). We came across a multiplex and ended up watching "Shoot out at Lokhandwaala". Lots of blood, abuses, high-adrenalin action sequences, and pumping music - a perfect setting for a birthday evening.

[gotchya, you were going to smile :).. right? No?]


Now I am back in hotel room. The Dubai skyline is visible from the 5th floor wall-size windows. Its 00:20 AM, 28th May local time. Somewhere in Africa, it will still be 27th May. Happy B'day to me, with love, from Africa.

[smiles :).... genuinely]

Monday, May 21, 2007

The Annual Cat Festival

The actual content of this post is a two-liner. Hence, I will build up the crescendo to it by giving random analogies. Searching a thesaurus for such activity will turn up the following result(s): "faff", "globe", "gyan".

Pushkar (Rajasthan, India) has a unique distinction of holding an annual camel festival. A look towards the horizon encompasses scores of brightly-colored turbans bobbing up-and-down on what looks like a misty sea (but is actually dust). The bovine animals are inspected and then selected by buyers. After finding the right fit of profile, the man and the beast walk away into the setting sun. Sigh!

A similar and immensely popular annual festival is also organized in much more urban settings. The annual CAT festival. Its a booming business and every year sees a healthy growth in number of participants. Some are regulars, some are novices. Its a happy mix. The run-up to the actual event is well rehearsed and 'Mock'ed out to such a precision that it would make a trapeze artist wish for wearing eye-pieces fitted with LCD displays showing real-time calculation of projectile motions. Olympics motto says "Cittius, Altius, Fortius" (faster, higher, stronger). CAT festival motto says "faster, accurate-r, easier and guess intelligent-lier".

{Cut to a different thought process}

Some years ago the Tier II cities in India gave way a social phenomenon which can truly be accredited to technological uplift of our nation. The proud mother, whose daughter is of marriageable age, would wear the most cordial smile and answer this when asked what her daughter is currently doing with her time - "She is doing a Computer Course". Guys were generally exempted from this Q&A session. However, the going has now become tough for the Tier-II-city-hometown-engineers-working-as-software-professionals-in-Tier-I-cities guys. What is the answer of their Moms to the above question? It is, "He is participating in the CAT festival".

{Why this random post?}

The CAT 2006 results were announced on 29th April, 2007 after loads of politics and delays. Anyways. I was going through the Orkut scrapbook of a friend who is an Electrical Engineer from IIT Madras with 3 years of work-ex (as of today). One of the scrap on 18th May, 2007 reads, "Tu is baar CAT de raha hai kya?" (Are you writing CAT this time?)

"... is baar..."!!!???? Hardly 3 weeks have passed to the results declaration and the conversation is centered around planning for next CAT. Is there any thought process at all which goes in the heads of the majority of people who write CAT every year? Again and again? Or is there actually a similarity with the bovine existence and walking into the setting sun which makes me muse about the annual CAT festival?




Wednesday, May 16, 2007

Analyze(*this);

For more than 2 and a half years, this blog had been using webstats service to track the incoming user activity. Its high time now to move on.

The template has been adorned with a neat javascript tag enabling Google Analytics (Thanks to this post by Andy Wibbles for a step-by-step guide). Will dabble into this toy and babble back here.