Improving your efficiency - Plan, Refocus, Review

The last geek session had an interesting talk by Sachin Thombre about the thought process involved in managing one self at the workplace. A little bit of attention and awareness can greatly transform the way you see and do things.

To a lot many at workplace, these problems are quite common

  • Get overloaded with work
  • Things doesnot seem to go as planned
  • Work gets carried over to the next day
These 3 simple steps will help you manage "you" in your work place. These few quickies would be a huge help to make things a lot simpler for you at your workplace.

Plan (5 Min)

Before getting started with work, plan out and decide how you can make this day highly successful.

Plan each task for the day.
  • Set realistic targets that can be achieved during the day.
  • Prioritize and allot time slot for each of the key items in your daily calendar.
  • Reschedule the items and re plan in case your list does not fit into your calendar
There is a tremendous power in deciding what, when and where you are going to do something.

Refocus (1 Min Every Hour)

Set your watch, phone, or computer to ring every hour. When it rings, take a deep breath, look at your list and ask yourself if you spent your last hour productively. Then look at your calendar and deliberately recommit to how you are going to use the next hour.

Manage your day hour by hour. Don't let the hours manage you.

This can easily help you ensure that you have been productive and successful for the day.

Review (5 Min EOD):

“ Compare not , Compete your Self”

When you shut down your PC for the day, ask these questions to yourself :
  • What worked out of your plans?
  • Where did you focus?
  • Where did you get distracted?
  • What did you learn that will help you be more productive tomorrow?
You can see tremendous growth in yourself if you can sincerely answer these questions by the end of the day, every day.

Sachin Thombre heads the Application development team at Sumeru Software Solutions .

Mantras For Being A Successful Manager

Last week, I had a post on "Mind Management". In this post, I'll share my thoughts on few more subtle behavior aspects related to managing a team.

"Practice makes a man perfect". No one is born as a manager. It is only his perseverance, focus in the right direction along with a flair of management that makes him equipped every day. One of the golden rules to follow is
"Be assertive and be like a rock if you know you are righteous in what you say; at the same time accept any mistake immediately and be humble if a mistake has happened from you"
It is not easy to cultivate this in you unless this is natural to your behavior and hence need sincere effort. This balance in behavior will help earn the respect as a matured human being and as a matured manager.

It is when you are natural and consistent in your behavior that people will start relating their thoughts to yours. This will bring out a lot of openness in the system and all personal issues in the team will start coming to you as a first resort of resolution.

And that is the first level of indication that you are a successful manager. I.e, when you become accessible, the days when people start approaching you for any thing and every thing with out hesitation.

There are 3 things that comes to me as a basis for good management. These are few mantras a manager should cultivate in him as a habit, if possible before even he steps in to the shoes of managing a team or in all practical sense at least in the early stages f his management career.

1. Managing team's aspirations

  • Managing team's aspirations properly will bring out the best in them and will be the biggest contributor in successful delivery.
  • Managing team doesn’t necessarily mean agreeing to all requests of the team.
  • Prioritize based on the impact of a request and in the best interest of client, organization, project, team and the concerned person.
  • Make the team/person understand the positive and negative consequences of the decision
  • Educate them and equip them for future to take a call themselves before they even approaching you
  • Take the decision which will do the best for both team/person and client.

2. No people related issue originates overnight.

  • Hence the time taken to resolve a people related issue is some times directly proportional to its ageing.
  • The quality of your management ability can be measured by the extent to which you are able to reduce the ageing of a people related issue.
  • This means the earlier you are able to understand the possibility of an issue, better you can manage it proactively

3. Avoid quick fixes for issues as much as possible.
  • In unavoidable situations quick fixes are welcome, but prepare for the long term solution at the same time

Thoughts are welcome

This post briefs a minimal thought process required for analyzing a system, to identify entities, design problems etc - to reach a conclusion regarding how the design problems should be addressed using common patterns.

Assume this scenario - You are working with a popular computer game developing company, and they made you the Solution Architect of one of their major projects - a Soccer (Football) Game Engine (Nice, huh?). Now, you are leading the process of designing the entire Football game engine, and suddenly you have a lot of design considerations, straight away. There are at least three steps.
  • How you identify the entities in your game system,
  • How you identify the design problems, and
  • How you apply patterns to address your design specifications.

Identifying Entities

First of all, you need to identify the objects you use in your game engine. For this, you should visualize how the end user is going to use the system. Let us assume that the end user is going to operate the game in the following sequence (let us keep things simple).

  • Start the game
  • Select two teams
  • Add or remove players to/from a team
  • Pick a play ground
  • Start the game
Your system may have a number of PlayGrounds in it, a number of Teams etc. To list a few real world objects in the system, you have
  • Player who play the soccer
  • Team with various players in it
  • Ball which is handled by various players.
  • PlayGround where the match takes place.
  • Referee in the ground to control the game.
Also, you may need some logical objects in your game engine, like
  • Game which defines a football game, which constitutes teams, ball, referee, playground etc
  • GameEngine to simulate a number of games at a time.
  • TeamStrategy to decide a team's strategy while playing
So, here is a very abstract view of the system. The boxes represent classes in your system, and the connectors depicts 'has' relationships and their multiplicity. The arrow head represents the direction of reading. I.e, a GameEngine has (can simulate) Games. A Game has (consists of) three referees, one ball, two teams, and one ground. A team can have multiple players, and one strategy at a time.

Fig 1 - High level view

Identifying Design Problems

Now, you should decide
  • How these objects are structured
  • How they are created
  • Their behavior when they interact each other, to formulate the design specifications.
First of all, you have to write down a minimum description of your soccer engine, to identify the design problems. For example, here are few design problems related to some of the objects we identified earlier.

  • Ball - When the position of a ball changes, all the players and the referee should be notified straight away.
  • Team and TeamStrategy - When the game is in progress, the end user can change the strategy of his team (E.g., From Attack to Defend)
  • Player - A player in a team should have additional responsibilities, like Forward, Defender etc, that can be assigned during the runtime.
  • PlayGround - Each ground constitutes of gallery, ground surface, audience, etc - and each ground has a different appearance.
So now, let us see how to identify the patterns, to address these design problems.

Identifying Patterns To Use

Have a look at the design problems you identified above (yes, do it once more). Now, let us see how to address these problems using design patterns.

1: Addressing the design problems related with the 'Ball'

First of all, take the specifications related to the ball. You need to design a framework such that when the state (position) of the ball is changed, all the players and the referee are notified regarding the new state (position) of the ball. Now, let us generalize the problem

Specific Design Problem: "When the position of a ball changes, all the players and the referee should be notified straight away."

Problem Generalized: "When a subject (in this case, the ball) changes, all its dependents (in this case, the players) are notified and updated automatically."

Once you have such a design problem, you refer a couple of common patterns (let us start with GOF) - and suddenly you may find out that you can apply the 'Observer' pattern to solve the problem.
Observer Pattern: Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.
In this case, we used this pattern because we need to notify all the players, when the position of the ball is changed.

2: Addressing the design problems related with 'Team' And 'TeamStrategy'

Next, we have to address the specifications related to the team and team strategy. As we discussed earlier, when the game is in progress, the end user can change the strategy of his team (E.g., From Attack to Defend). This clearly means that we need to separate the Team's Strategy from the Team that uses it.

Specific Design Problem: "When the game is in progress, the end user can change the strategy of his team (E.g., From Attack to Defend)"

Problem Generalized: "We need to let the algorithm (TeamStrategy) vary independently from clients (in this case, the Team) that use it."

Then, you can chose the 'Strategy' pattern to address the above design problem.
Strategy Pattern: Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it.

3: Addressing the design problems related with 'Player'

Now, let us address the design specifications related to the player. From our problem definition, it is clear that we need to assign responsibilities (like forward, defender etc) to each player during run time. At this point, you can think about sub classing (i.e, inheritance) - by creating a player class, and then inheriting classes like Forward, Defender etc from the base class. But the disadvantage is that, when you do sub classing, you cannot separate the responsibility of an object from its implementation.

I.e, In our case, sub classing is not the suitable method, because we need to separate the responsibilities like 'Forward', 'Midfielder', 'Defender' etc from the Player implementation. Because, a player can be a 'Forward' one time, and some other time, the same player can be a 'Midfielder'.

Specific Design Problem: "A player in a team should have additional responsibilities, like Forward, Defender etc, that can be assigned during the runtime."

Problem Generalized: "We need to attach additional responsibilities (like Forward, Midfielder etc) to the object (In this case, the Player) dynamically, with out using sub classing"

Then, you can chose the 'Decorator' pattern to address the above design problem.
Decorator Pattern: Attach additional responsibilities to an object dynamically. Decorators provide a flexible alternative to sub classing for extending functionality

4: Addressing the design problems related with 'PlayGround'

If you take a look at the specifications of Ground, we see that a ground's appearance is decided by various sub units like gallery, surface of the ground, audience etc. The appearance of the ground may vary, according to these sub units. Hence, we need to construct the ground in such a way that, the construction of the ground can create different representations of the ground. I.e, a ground in Italy may have different gallery structure and surface when compared to a ground in England. But, the game engine may create both these grounds by calling the same set of functions.

Specific Design Problem: "Each ground constitutes of gallery, ground surface, audience, etc - and each ground has a different appearance."

Problem Generalized: "We need to separate the construction of an object (ground) from its representation (the appearance of the ground) and we need to use the same construction process to create different representations."
Builder Pattern: Separate the construction of a complex object from its representation so that the same construction process can create different representations.
Now, you can chose the 'Builder' pattern to address the above design problem.

In real scenarios, the thought process is a bit more sophisticated, and the experience is the silver bullet.

This post is an excerpt from Anoop's E-Book published over Scribd - Applying Design Patterns

Effectiveness and efficiency

There is a quote of Peter Drucker that always remains fresh to me
"Effectiveness is doing the right things, and efficiency is doing things right".
Being efficient without being effective is a quantum waste of time and energy.

There is an interplay here between the organization and the individual. The organization's objectives percolating down to the individual's objectives determines effectiveness. The individual attaining these objectives in the best possible way is efficiency. The individual being efficient and effective cascades into the organization being efficient and effective. Individual goals and their achievement, therefore become key to driving organizational effectiveness and efficiency.

For purposes of the next couple of paragraphs, I assume that the individual is aware of his/her objectives. Given this, how does an individual become efficient? In the course of my work, I have met a few incredibly efficient people. My study of their methods tells me a few things

  1. Extremely structured in their work styles.
  2. High levels of adherence to time commitments.
  3. Deliberate and continuous practice of certain disciplines.
  4. Limited set of tools they have mastery over instead of using multiple tools and changing them from time to time.
  5. Time spent on a top-down thought process of achieving an objective. And then clear attention to detail in executing each step.
  6. Clear identification of who, when and how. Their tasks are always very well defined and not vague intentions.

Perhaps there are more. This looks to me to be a good starting point.

This week, the geek club had a very exciting session with Kurshed Batliwala, the founder director of WAYE (World Alliance For Youth Empowerment), and a Corporate Trainer of the Art Of Living Foundation.

The topics ranged from passion and career to mind . But he in his own unique style of intelligence topped with the scoops of wit and humour made the smiles broader on the audience face.

Passion, Hobby & Career

Ever thought of the subtle difference in these three words? A simple understanding and awareness on this can make a huge impact on your daily life. One can be passionate about their hobby and career both together but, Passion is the undying enthusiasm and charm that is not lost out in the short span of time..

As from the horse’s mouth "what is required to turn a girl friend into wife is PASSION!"

Career is something that puts money into the bank. You cannot afford to come to office and say ”I don’t feel like doing this”. That option is not there at all.
Hobby is something that draws out the money from your account. An individual can walk with a "drop in whenever you FEEL like it" attitude in case of your hobby and NOT career.

The luxury of a hobby is that you have the freedom to chose to do it or not but that is not the case with your job, career or business.

Balancing the work and family life

Certain things that has to be done, has to be done. There are no two ways about it.
You cannot plan your time - split it out hour-wise, and decide how many hours to spend doing what because it simply is not going to work.

To be able to do what you are supposed to do at that particular point without thinking of other things that may have to do is intelligence. Take for example the typical scenario at a workplace,
You are required to write a programme now, but you want to play Frisbee. So while your coding your mind continuously reminds you of the Frisbee then the coding actually is going to take so much more time.

It works other way round also, Now while you are out with a girlfriend and you think about the coding & work, then your time with your girlfriend is going to be pretty short

Our inability to be 100% with what we are doing with the here and now is the reason that one cannot bring balance in their life.

While eating you are thinking something, while walking you are thinking something….
When you are doing something you do that, then it is not necessary to work 23 hours a day.
So by the regular practice of Sudharshan kriya, (a breathing technique taught as a part of the AOL course) there is a high chance that you learn the art of balancing the professional and family life.

Building up competency

There needs to be a certain type of competency that is required. Competency will come by focus. The simplest and easiest way for that is regular daily practice of Sudharshan Kriya. Just knowing things cannot make a transformation happen in your life. Implementing those things, doing those things is what will bring the difference.

The general category of people always fall into the category of “Oh I want to do so many things” .
But many a times their words do not get translated into actions or ‘the enthusiasm factor’ runs out of battery mid-way.

When you follow the principles of AOL you will head a life that you want to lead and not a life that you have to live.

Intelligent are those who know and practice the technique, thus adding in the beauty to their daily chores, rather than limiting themselves to the joy and fun for only the days of the AOL course.

Defining Success

What is success considering the that an individual wears hat of many different roles in our lives?
The best one option to a happy living is to succeed in all of them. When the luxury is available to succeed, do it. There is the opportunity available for all of us to succeed in the all the multifaceted roles that we play in life…. The key simple factor is to move out of the tyranny of ”OR” and move into the luxurious ”AND”

It is not that you can either be a good employee or a great husband!! Be both!

Grab the opportunity HERE and NOW!

It is quite important to have an optimistic approach to life to handle the daily challenges that can easily crop up in work place, or as of that matter anywhere. Eg. You are on a shopping trip and have spotted 3 things you really dreamed of having. This could lead to generally two types of reactions…

  • First group – I can only afford to buy one of these or none of these.. and consider this as an excuse to get into depression.
  • Second Group - See this as an opportunity and find solutions and ways to see how you can afford to buy them.

The doors are open wide for the optimistic viewers….

I want to introduce this thought series by stating the obvious and getting certain known facts out of our way here.
The Edge Thought Series

It is more than obvious that we are in a highly competitive market, faced with stiff competition from players around the globe, each having their own USP.

I remember reading about Competitive strategies in Phillip Kotler many years ago in B-school. The idea of offering something different is as important as the idea of the offering itself. Unless there is something unique to me and/or my offering, why would I be driven to confidently compete in a market that is flooded with millions of other equally talented players? Moreover, why would I be the winner unless there is that special aspect that helps me supersede these millions of others?

Typically, the 4 broad categories of competitive strategies are:
  • Differentiation focus : small number of target market segments
  • Differentiation : extra value-added features provided for the client
  • Cost focus : lower cost advantage in a small number of target market segments
  • Cost leadership : large-scale business offering “standard” products

This is very interesting when applied in the IT service provider environment. Often companies or products stay in one of these 4 categories or swing between categories as they grow in scale.

Whatever the category, differentiation is a key to winning deals and profitable ideas, and showcasing this differentiation is equally critical. At a micro level, each project /project task can also be classified as an opportunity to allow one of the above strategies. And it is not just about 'window-dressing', or for sales purposes. Differentiation techniques can potentially result in specific benefits for us as service providers as well.

Aside of the zillion ideas that can come about in the realm of differentiation, the foundation in my opinion, is thought differentiation. At a time when IT service providers can no longer afford to remain plain-vanilla IT development teams, investing into thinking and acting as an advisory becomes a key value that IT providers/partners can bring to clients. Whether it is at the pre-sales phase or at the design phase of the project, it is critical to wear the glasses of the client in order to understand their business and IT environment and be able to understand and advise the client on what is best suited for them today and for the foreseeable future. Clients increasingly want IT providers to add the value that often comes with hiring a consulting company.

In this scenario, what can potentially create value is what I have called the ‘Edge’ framework. The Edge framework will encompass a series of thoughts that aim to empower teams to imbibe that something special, and potentially arm the Sales/pre-sales teams to show case the same to the world. Ultimately benefitting our clients and us.

My aim in this Edge thought series is to write about and share best practices that can help tackle our day-to-day issues and how we can work through them while ensuring cost, quality and schedules - and most importantly creating the much-needed Edge.

Keep an eye on this space for upcoming thoughts in the series. Any first comments and ideas are welcome !

The Art Of Mind Management

Management has various facets. At gross level as we all know, it is about managing deliveries – Time, cost and quality. Volumes of books are available off the shelf on this topic which I do not intend to even remotely refer to or repeat.

Mind Management!!

What I really want to share is my thoughts on management of something at much subtler level - Mind Management!! This is for all those ‘On the job Managers’ and ‘Aspiring managers'. The first thing that we need to learn to tackle is not the delivery, team or client, but our own mind, and the mind of the team.

Yes!, this might seem a little off the track but this is a fact. And before you even step in as a manager, these are the ground areas which need to be worked up on. This is as basic as learning the alphabets before you join them together to make sense for others. Let us check out the following few queries
  • Are you settled enough to hear your team’s grievance?
  • Are you equipped to combat those shooting queries from the client?
  • What you do if you are unnaturally upset due to some personal reason, but is required to get in to a new sales call urgently?
  • What if your team member approaches you to seeking a solution for his/her personal problem. Are you matured enough to suggest a solution?
And numerous other practical situations which you need to handle daily.
If you have started your home work on this, you are well off. Else, it is high time to invest quality time on this. Let’s start this session – ‘Mentoring self to be a better manager’ in the smallest possible way – through this blog! This obviously means to start from identifying the areas to be mentored.

Since the thought processes are ongoing in nature and since it is too less space to accommodate all; I would like to start off with a small topic.

In the series of blog posts succeeding this preface, I will be posting more of this nature . These thoughts are highly subjective to discussion and more than as a reader, your thoughts are much awaited to give it the colour and dimension it actually deserves. Let me start with the below.

Empower the team to empower yourself

Empower your subordinates as much as possible. Relate your thoughts to their thoughts, enable free thinking. Provide them a calculated space to experiment, make mistake, correct themselves there by to gain confidence and grow naturally. Empower your subordinate and equip them to take up your current responsibilities. This will free up your time to take greater responsibilities.

Elevate their career and hunt for the next higher opportunity. Basic thumb rule of Empowerment is “Until our hands are emptied, you cannot take up something else”.
Hence, empower others to empower yourselves.

Making good "Business" proposals or "Value" proposals

The business person's view of his/her business problem, and the solution provider's view of the business problem appear to me to be very different in the small/midsize company space. This leads to proposals, made to customers, being largely product focussed or service focussed rather than business focussed or value focussed.

This came out quite starkly during a discussion I had today with two members of my business development team. During the course of a long chat with them, the following is what emerged as the structure of what I consider to be a good business proposal.

Section 1: Problem - Solution - Benefits
  • "Inhibitors that are speedbumps for your business"
  • "Our Solution" - Talk about enabling technology, processes and people related solutions.
  • "What your business will look like when we are done"
Section 2 : Defining and measuring success
  • "Critical success factors"
  • "How will we measure success"
Section 3 : Enabling the solution
  • "What you need to do to enable it"
  • "What we need to do to enable it"
  • "What we need to do jointly to enable it"
Section 4 : Demonstrating capability to deliver
  • "Why you can trust what we say" (Here is what you talk about the company, reference customers, prior implementations in this industry etc)
  • "Risks of non-delivery or poor quality delivery"
  • "Capabilities of any other solution partners involved in delivering this solution"

Section 5: Defining deliverables and methodology
  • "Clear statement of software deliverables"
  • "Methodology"
Section 6: Costs and timelines
  • "What it will cost you"
  • "How long it will take"
Section 7: Realizing the benefits
  • "When will you start seeing the benefits of this"
  • "What do you need to do to see the full benefits"
    "Critical stumbling blocks to seeing full benefit"
  • "How we can help you realize the maximum benefit"

Section 8 - Way forward
  • "How long can you realistically use this solution"
  • "What role can we play over time while you use this solution"

I am sure, when more brains work on this subject, more thoughts will evolve. To me, this sounds like a good base to start off with.

Innovation in sales models for small to medium companies

While innovations in products and technology will continue to happen, I believe that companies particularly in the small and mid size categories must innovate in terms of the business models that we use to expand our sales and marketing presence.

One way of doing this is by exclusive marketing partners.

Going exclusive within certain geographies, and setting clear business targets expands geographic reach with minimal investments. When delivery of services happens from a (comparatively) lower cost geography like India, the strategy of building competency and go-to-market needs to be carefully analyzed. When the geographic spread increases, the ability to put resources into each market to sell all services offered is not a viable proposition. A key choice to make is "Which service offerings am I going to take to this geography?". This requires conscious exclusion of certain services from certain geographies to permit sales focus to happen.

Identifying synergies with companies that offer complementary services and taking our products and services to market in partnership, is increasingly going to be a business model for small-medium companies to grow by. Arriving at value propositions that create a win-win arrangement; arriving at mechanisms to jointly drive targets; Creating a space where the collaborating companies see the relevant parts of each other's companies as extensions of their own, while simultaneously preserving the interests of each other's businesses are all going to be critical success factors to make this model work.

While larger companies achieve synergy by doing 'compete and collaborate', I dont believe that model is sustainable for smaller and medium size companies. Identifying companies that offer synergistic services is going to be key, since the fear factor of losing market is always going to be higher in this segment. Successful partnership operates on trust, and a mutual desire to have a long-term relationship. Competing companies in the small to mid-size cannot have this, and other than in the rare situation, I doubt whether this model will see success in this sphere.

  • A Managed Services company partnering with a Security company is a good synergy
  • A development company in a high cost region partnering with a development company in a low cost region is a good synergy, so long as the low cost company believes that the high cost company does not have the scale or ambition to set up operations in a low cost country.

I am always looking for companies and business areas that have synergy with our operations. I see it as a quick accelerator for growth.

Comments welcome!

Rajesh Krishnamurthy is the Chief Operating Officer of Sumeru Software Solutions Pvt Ltd

Zeroing in on the Inbox

The past couple of weeks, I look at my mail inbox with a sense of delight when I go to sleep. It is a delight that only an empty inbox can create!
Here are a few things I am doing right these days

1) Inbox items that can be answered in less than 2 minutes get answered the moment I see the

2) If it cant get answered in 2 minutes, it gets flagged with a follow-up and moved to their appropriate folders at first reading. My Outlook has about 150 folders and subfolders defined, so it is not a weak folder mechanism that leaves it up to Outlook's search functionality. There may be arguments against this, but for now I am finding this deliberate classification very useful.

3) Every mail that is flagged is also categorized. I have defined a few categories that suit me. As on date, they are
  • Action
  • Approval
  • Call
  • Delegated
  • Discussion
  • Document Review
  • Escalation
  • Follow up
  • Initiate action
  • eMail
  • Read at leisure

This is an evolving set of categories, but keeping it focussed on actions that I need to take gives me a perspective of what actions I can take up as a bunch.

4) Appropriate flagging puts these mails into the tasks list automatically. My task window is sorted first by Due Date, and then by Category. It gives me a good view of time and context, and according to time available (and mood :) I decide what set of tasks to tackle.

5) My inbox contains nothing other than unread eMails. Once a mail is read, it goes through the above process and moves out of inbox. End of day, inbox is empty. Answered mails are deleted or moved into appropriate folders. Unanswered mails are moved into folders and flagged.

6) The tasks window becomes the main window for productivity and a single view of everything that needs to get done today.

7) There are a few folders that I have that I find exceedingly useful

  • Decisions/Discussions in progress - (this has about 63 subfolders as I write this blog.
  • Customers - This has one subfolder for each of the customers that we are working with
  • Sales - This has one subfolder for each of the opportunities we are currently pursuing.
No doubt this is my list, and it makes sense in the context of the work I do. But I am sure, there will be a list of such critical folders that will match each person's work profile.

Hope this helps!

Valuing the customer has multiple dimensions, and one key aspect is the relationship management with a clear focus on value adds. The more you build comfort and trust by delighting the customer, the better your business prospects will be.

One key aspect in relationship management should be a defined model for aligning new and lateral entrants with the customer's culture and vision - and to enable him/her step by step towards thinking in terms of value adds and pro-active solutions, to provide competitive advantages and to enhance business prospectus of the customer.

This module should include defined steps for (1) Introducing a new entrant to the ecosystem, (2) Connecting him/her to the customer's vision and domain and (3) Enabling him/her to think from the customer's perspective, to constantly think in terms of cutting down the cost, improving quality and delivering value adds

This framework will help to bring an awareness in the entire enterprise, to consistently focus of quality and innovation.

Step 1 - Introduction Phase

This phase focuses on introducing a new or lateral entrant to the vision, culture and philosophy of the customer - along with introduction to offshore and onsite teams, and key stake holders. This involves
  • Internal introduction to Customer's Culture and Philosophy
  • Internal Introduction to Project , Team, Methodology, Work Culture
  • Introduction to Offshore and onsite project leads
  • Introduction to key stake holders

Step 2 - Relationship Phase

In this phase, the new entrant will start working with the team, focus on deliveries, contribute ideas and gets involved in his tasks. He/she will establish a strong communication channel with stake holders, and over the time, he/she will be adept in understanding business requirements to transform them to solutions using the apt technology.

Few focus areas include
  • Connecting with stakeholders and team
  • Establishing a friendly Communication with stake holders
  • Exploring opportunities for Direct Communication – forums for domain knowledge sharing
  • Building capability to understand business requirements, and transform them to solutions

Step 3 - Value Add Phase

In this phase,the focus is on generating value adds, by discussing and understanding customer's domain, business systems and existing solutions - even if they are outside the scope of current assignments. The activities also include getting involved in innovation aspects through establishments like Innovation cubes and idea portals.

Focus is on
  • Understanding the customer's operations in a bigger perspective
  • Being a part of value add teams, constantly think about providing competitive advantages for customers
  • Show case the innovative ideas, with statistics on the impact on TCO and ROI
  • Proof of concept implementations
  • Establishing technology and communication tools like Idea portals, POC repository, Innovation cubes etc for better idea sharing
  • Being partners in success
As already pointed out, using proper technology and communication tools - for idea exchanges, knowledge sharing and collaboration - will definitely spark more innovation, and will enable the teams to provide better solutions.

Geographic Information Systems and related technologies may offer you access to a lot of untapped areas using your existing data - for finding out your hidden business potential, and for reducing your operation costs. This is the right time for enterprises to think about leveraging competitive advantages by combining demographic/location intelligence with decision making and strategization, as GIS can help you optimize your spending patterns.

GIS offerings from Microsoft and Google (Bing Maps and Google Maps), are already showing what kind of innovation is possible with location intelligence.

The market growth predictions indicate that a lot of organizations already realized the signifance and necessity of GIS. These observations on market growth point towards how enterprises may use GIS for finding out areas to reduce operational cost, to have a better Return On Investment.
Market Growth Observations

Here are few interesting observations related to GIS market growth.
“The size of the geographical information system (GIS) market in India is expected to be $10 billion in 5 years” - Source: India Times
“Worldwide GIS market revenues in 2007 as US$6.43 billion” - Source: Market Research Analyst Website
“Globally, the GIS market is expected to grow from an estimated $6 billion to $150 billion in the next decade” - Source: Geo Carta Website
How Enterprises Can Leverage GIS?

What kind of business intelligence, services and value adds enterprises can leverage, using GIS?
For example, GIS can be used by a company to site a new business location to take advantage of a previously undeserved market. Or GIS can help customers to find the right location, for opening the next store, distribution center, or service department. With GIS, it is also possible visualize customer survey results, market reach etc.
When markets change, exit strategy and asset hand over/relocation strategies can be planned using GIS .
In domains like retail and logistics, the opportunities are immense.

For enterprises interested in building strategies for more market share and customer value adds, GIS is a consequential domain. This is because
  • The possibility to give internal analysts and strategy experts a pro-active method to use location intelligence for market analysis and predication.
  • Use of GIS, combined with Business Intelligence and analytics will help to gain new insights into their business, using historical data - like the demographic distribution of customers, based on certain parameters like buying power.
  • Leveraging GIS for better co-ordination - in areas like market force distribution, reclamation management etc
Conclusion: As demographic analysis is the basis for any business function - including customer service, site and property analysis, and targeted marketing, GIS may help enterprises to understand their target market better - like purchasing behavior of customers - using their existing data. This in turn translates to making good business decisions and improved ROI.

Ensuring Quality And Customer Satisfaction - What Developers can do?

Yesterday we had a brainstorming session with Mr. Gupta on how developers can contribute significantly, to improve quality and customer satisfaction - through better collaboration and internal knowledge sharing.

Gupta is presently working with Sumeru Software Solutions Pvt Ltd, helping teams to constantly improve the focus on quality, value adds and customer satisfaction.

Here are the key take aways.

A bit of awareness, on subtle points, can significantly improve on the efficiency of a project, and can solve unto 80% of the problems that is faced during the design and development phase - To eventually ensure better quality and user acceptance.

Making the application User friendly

In each step, an effective developer may think from the end user's perspective, and will ensure that the application turns out to be user friendly. Attending on to minor details like the error message that pops on the users’ screen, user interface style and orientation etc can provide significant improvements in the user experience.

Meeting user expectations, beyond requirements

The customer would have an expectation ranging from A-Z but the requirement list wouldn’t be portraying all of it and hence, it is up to the developer to stretch a little more and go beyond the requirement list to ensure that the application is fine tuned to help the user achieve exactly what he need.

Quality + Value Adds = Customer Satisfaction

Developers need to constantly think about value adds they can provide. Quality and attention being given to details is the key.
"Much like any of us won't accept even a small scratch on a brand new car we buy, similarly, the client also wouldn’t like to report bugs or errors since he is being billed per hour"

Pro active communication with various roles in the team

Matters such as getting the correct details of the requirements play a crucial role in reeling out the time and effort spend in coding. For example, pro active communication of developers, with the Business analysts involved in the team is crucial. As the requirements are agile, often developers understand and get the clarity on the requirements a while after starting the development process. Making it a practice to set the requirement clarity before even starting the work can reduce a lot of issues that crop up and delay the effective delivery of the project.

Developing the habit of going and talking to people and getting their help if needed is important. It is a common scenario in most of the corporate offices that individuals sitting next to each other communicate via mails/chats, which ends up making most of the people inert and stuck within their “limited” space, also the space for quality knowledge discussion is also lost.

Self Competency Analysis and and a conscious effort for continuous improvement

If a developer works to find out where he/she is standing in terms of technical knowledge - and also adds in extra efforts from the individuals side to sincerely fill the gap between the communications involved prior to start the work, then the entire development cycle can really become lot less tedious.

Instead of taking a big round like posting out the problems on a technical forum (internally or externally) and waiting a day or two for an answer which you have no assurance that it would work or not, it is better that it is discussed among the colleagues and team members and the solution might come out within a shorter time too, you never know!

All the technical issues can be resolved on the floor itself!

When interactions and collaboration in better, then, there is a better team of people to handle the issues, better relationship build-ups and a good platform is set for knowledge sharing, thus paving way for individuals to gain a huge amount of learning from each of the projects. This would largely affect the quality of team that can be showcased for every new project that comes in.

Building a better team

A helpful and supporting team and the go-getter attitude among the team members can easily drive a project to successful completion .If these above mentioned factors are missing then even a team of highly knowledgeable people or an aggressive plan can’t drive it to success.

Share your thoughts.

Decision Parameters for choosing a technology platform

Recently I was asked to list down the decision parameters for choosing a technology platform. Here is a list I've quickly assembled. Comment on if you have more things to add.

-> Client Choice/Preference

Step 1- Client's choice/alignment with technology platform
Step 2- Existing infrastructure client has in place to support any of the suggested technology platform.

-> Cost/Budget

Step 1- Implications on hardware and software requirements (like hosting platform cost, infrastructure cost etc)
Step 2- implications on resource requirements (availability of resources, training cost etc)
Step 3- Cost comparison of inhouse development vs outsourcing for each technology

-> Existing Dependancies and code base

Step 1- Is this an end to end project, re-write, take over or a migration?
Step 2- If not end to end, do you have any existing dependancies and code base

-> Platform maturity

Step 1- Find out whether the suggested platform can cover all requirements and future requirements.
Step 2- Can satisfy interfacing requirements? (eg. RoR is not mature for handling web services)

-> Available frameworks

Step 1- Any existing frameworks/open source tools are already available? (Eg: OSCommerce/PHP for E-Com).
Step 2 - If Step 1, what is the investment for building expertise in this existing framework to reduce TCO?
Step 3- Do you have any existing frameworks/reusable components to reduce TCO?

-> Complexity and size (Estimated using FP or something)

Step 1 - Estimated size of the project
Step 2- What is the cost comparison between platforms? (based on finding out time to execute for each platform based on total FP)
Step 3- Do you have any existing practices successfully applied earlier to execute the project in a technology platform?

-> Project model (Time and expense/Fixed bid etc)

Step 1 - If Fixed Bid, which platform is suitable for quickest development and deployment?
Step 2- Do you have any existing practices successfully applied earlier to execute the project in a technology platform?

-> Project Type (Desktop/web App/Services etc)

Step 1 - Feasibility analysis of candidate technology platforms for this project (eg. RoR is not suited for a Windows Service application)
Step 2- Eliminate technologies that are not feasible

-> Interfaces to deal with

Step 1 - Feasibility analysis of candidate technology platforms for interface support (eg. If you are consuming REST services, RoR has a weightage)
Step 2- Identify platform specific interface requirements.

-> Expected Scalability And Performance

Step 1 - Identify support for OLAP/OLTP scenarios in the project.
Step 2- Identify minimum response time requirements.
Step 3- Weightage based on POCs constructed under various technologies or existing data or previous experience.

-> Internal expertise availability

Step 1 - Weightage based on the organization's internal expertise and resource availability
Step 2- Training costs incurred

Set Cloud Computing in motion

It is interesting to see how applications running from the "Cloud" offers competitive advantages for players in various domains. It might be interesting for you to know that India’s two leading telecom companies (BSNL and Airtel) are offering low priced PCs that never crash - because they run on ‘Cloud’.

If you are still wondering - ‘What is Cloud Computing?’ I'ld like to put forward the analogy given by Michael Miller in his book “Cloud Computing – Web based application that change the way you work and Collaborate online”. He compared Cloud with electricity. In his words
“Before the advent of electrical utilities, every farm and business produced its own electricity from freestanding generators. After the electrical grid was created, farms and businesses shut down their generators and bought electricity from the utilities, at a much lower price and with much greater reliability than they could produce on their own.”

Cloud is a large set of interconnected computers/servers (hundreds or even thousands of them, spanned across various data centers). All the software including OS, Development Platforms etc are installed on the server and not on the user’s machine.

Once a user connects to cloud through high speed Internet, he accesses software as if they are there on user’s own machine. Irrespective of the device that a user is using (Computers, Laptops and Mobile phones), he always sees the same instance from where he left last time he logged out.

The beauty of the concept lies in the ‘pay for use’ concept. One has to pay only for what he uses and cloud takes care of varying demands, fluctuations in the load etc.

With cloud computing a firm saves cost of infrastructure, development, maintenance and management. If you have come across the situation where you want to work from home on your latest document which was saved on your office machine and you forgot to take it on your thumb drive, then this very idea of accessing your document from any part of the world will give you greater sense of relief. Situations can be even horrible and that is where “Cloud” come to rescue.

Though the Internet is must for cloud and still in some places even dial up connection doesn’t work properly and ‘Cloud’ can’t be a successful concept there. However with the advancement of IT infrastructure soon everyone can be seen utilizing Clouds. Cloud computing is not in its complete mature stage but top IT giants (Amazon – having biggest cloud, Google, Microsoft, Yahoo, Salesforce, Zoho) are investing in that direction.

Microsoft has come up with “Azure” - an internet-scale cloud computing and services platform hosted in Microsoft data centers. Google has “Google Apps” which enables an organization to deploy Gmail, Google Docs, Google Calendar and other web apps to its employees. Zoho provides you almost everything from CRM to Database, Management tools to Email Solutions.

How to create a generic list of members of typeX, where typeX is unknown at the time of writing the code? In C#, it is pretty easy to use generic lists and collections. For example, we can declare a string list like

List<string> strList=new List<string>();

And later, we can invoke the methods in strList to add or remove elements. Pretty straight forward!! Now, here is another scenario

Generic List At Runtime

Now, what if you need to create a generic list at runtime? Precisely, we want to do something like this.

List<typeX> strList=new List<typeX>();

But the catch is, at the time of writing the code, we don't really know what type is typeX. For this, we need to create a generic list at run time, which can hold members of type typeX.

Here is a small method you can use to create a generic list at runtime, which can hold members of typeX

/// Creating a generic list at runtime
private Object CreateGenericList(Type typeX)
Type listType = typeof(List<>);
Type[] typeArgs = {typeX};   
Type genericType = listType.MakeGenericType(typeArgs);   
object o = Activator.CreateInstance(genericType);
return o;

Invoking methods of your list

You can use the above method to create a generic list during run time, which can hold the members of type typeX.

//Get your type from somewhere
Type typeX= yourObject.GetType();

//Create a generic list which can hold members of type typeX
object  objList =  CreateGenericList(typeX);

Now, how to invoke the methods in your list? You can use reflection to obtain the MethodInfo, and to invoke the methods dynamically.

//Obtain method info to the Add method of our generic list
MethodInfo mListAdd = objList.GetType().GetMethod("Add");

//Obtain method info to the ToArray method of our generic list
MethodInfo mListToArray = objList.GetType().GetMethod("ToArray"); 

You may obtain MethodInfos for other methods too. Now, if you want to add an item to the generic list you created, you can do something like

//Get the type
Type typeX=yourObject.GetType();

//Create an object of this type
object newItem = Activator.CreateInstance(typeX);

//Add it to the list objList
mListAdd.Invoke(objList, new object[] { newItem });

where 'newItem' is an object of typeX.

Similarly, if you want to create a typed array from the elements of your generic list, you can do something like
//Invoke the ToArray mothod of our generic List 'objList'
System.Array arr=(System.Array) mListToArray.Invoke(objList,null),null);

C# 4.0 Dynamic Extensions

If you havn't yet watched Ander's video on C# 4.0, watch it here, right now.

For me the most exciting part is the new dynamic dispatching features in C# 4.0. Dynamic dispatching provides a great way for resolving method calls at runtime. The new dynamic keyword can be used to create dynamic objects.

dynamic invoker=new DynamicInvoker();
dynamic result1=invoker.MyMethod1();
dynamic result2=invoker.MyMethod2();

Here I'm implementing a dynamic invoker.

public class DynamicInvoker : IDynamicObject
public MetaObject GetMetaObject
(System.Linq.Expressions.Expression parameter)
return new DynamicReaderDispatch (parameter);

public class DynamicDispatcher : MetaObject
public DynamicDispatcher (Expression parameter) 
: base(parameter, Restrictions.Empty){ }

public override MetaObject Call(CallAction action, MetaObject[] args)
//You'll get MyMethod1 and MyMethod2 here (and what ever you call)
Console.WriteLine("Logic to invoke Method '{0}'", action.Name);
return this; //Return a meta object

Watch out this space soon for a couple of practical examples. Dynamic dispatching has a lot of possibilities, so that you can have wrappers around anything to execute your calls!!

Ander's video also covers PLINQ and a heart warming demo of C# Read-Eval-Print loop using Managed C# Compiler.