Know your worthiness and dream BIG

Many times we look at Business icons like Narayana Murthy, Azim Premji, Ramadorai and likes just to wonder how they got to these highs in their career with out even wanting to think about the effort that they have made to be there.


No body is born with 100% skill. Naturally we may have some skills inherited in your genes. This I believe nature has given to us to help us make a beginning. In this challenging world, to expect any thing more than that would be little foolish in my view. Hence I like to believe our natural skill set is just 10%(figure for the sake of putting here :-)) of what in total we can build in our career and in our lifetime. The right perception about our career, focus and hard work pays when it comes to building the rest 90%.

The secret of your success lies in setting the right perception about your career. For this, knowing the below I think will help.

Know your own worthiness at two levels

a. For the current demands in organization
b. For future prospects in organization and your aspirations

Let me explain what I mean by above.
Knowing your worthiness is all about exploring yourself , identifying your core skills and the heights that you can scale in area where your skills and capability match. In other words, your ability to think where you need to be after 5 years, 10 years, 20 years, 30 years . If not, no better time than now to do it.

Simple examples of such a chart is
  • In 5 years - to be a Project manager, 8-10 years to head a Delivery unit, 15-20 years - business head/VP, 20- 30 years - CEO/COO, 30-40 years Chairman of a company, to be in board of directors etc and so on.
  • Or it can be - In 5 years - to be a tech lead, 10 years - to be a solution architect, 15 years - technical consultant and so on.
  • Or it can be - In 5 years - to be a Project manager, 8-15 years to be a Business development manager, 15-20 years to be a business development consultant, 20-30 years to be a CMO and so on
  • Or it can even to set up a company of your own, create job opportunities and much more

What this exercise does ?

This to me is exactly what we call as setting a vision for ourselves. This exercise quickly sets a structure to your career plan. Subconsciously this also sets correct measure and expectations (with yourselves)for your current worthiness in any role that you may aspire and also in your aspiration for the future roles that you would like to handle.

One of the greatest gifts God has given us is the power to dream. The beauty of a dream is that it doesn’t have any rules or limits. Hence you can dream just about any thing in this world - even things which doesn’t exist in this world.

Every great step starts with one single step.
Every step that you takes builds confidence and positive outlook in you and several such step takes you to higher roles and responsibilities. The small steps you have taken will be your investments for your future. I believe this is the only right way to shape your career. It should be gradual and steady and should align with your capabilities. That means … no short cuts!

However, There is one way you can regulate the speed at which you reach new heights.. by taking those small steps and learning from mistakes more frequently. Imagine you setting your goals on a daily basis and evaluating it at the end of the day there by setting new goals for the next day!.. There is no limit to the heights you can reach.

This means that the entire horoscope of your career path can be drafted by you.

Now the question is , what the first step should be. Simple! Start your first step by dreaming.Dreaming about you and your organization's future, its road map, success and glory.

  • If you want your company to grow in terms of number of employee base, start dreaming hundreds and thousands of people working around you along with you
  • If you want company to grow in size and spread, start dreaming a delivery centre in every part of the world
  • If it is for organization's social cause, start dreaming on how the villages in India are transforming and prospering due to our contribution.
  • If it is in terms of luxury, glory, comfort and so called 'status', then go ahead dream of huge glass mansions in your own IT park with Hi-Fi facilities.

Dream big, that’s the only first step to making it real. Lets start with this cash less investment.

P.s. Don’t forget to take the second step immediately.. Dreams with out subsequent effort is good to nothing. Keep performing .. Keep re-discovering yourselves.

SQL LIKE Operator for Pattern Matching

We will write on it later


Google Wave - Creating A Google Wave Bot To Answer Your Questions


Finally, a limited preview of Google Wave is available for a larger audience from Sept 30 onwards. As I see it, once released to public, Google wave will serve as a real time, programmable alternative platform for existing internet services like e-mail. It has high degree of customization, and provides the ability to host, share and collaboratively work on rich media content.
If you need to familiarize with Google wave concepts, and to understand why it is significant, Mashable has few good posts.

Google Wave is a real-time communication platform. It combines aspects of email, instant messaging, wikis, web chat, social networking, and project management to build one elegant, in-browser communication client. You can bring a group of friends or business partners together to discuss how your day has been or share files.
This post is more about a couple of things you can do with Google Wave API.




Google Wave exposes an excellent API to create extensions, and to embed Waves. Some time back, I had a quick look towards the Wave Robot API, and thought it'll be great if I've a .NET client API to work on. So, when I saw Jon Skeet tweeted about his C# Wave Bot API Port some time back, I found it interesting.

My First Google Bot

After spending my last weekend hack on the API, I've rolled together my first simple .NET bot, the Bingy Bot. You can try Bingy either in the Google Wave Sandbox (add bingybot@appspot.com to your wave), or in these public test waves.
See Bingy in action, in this youtube video.














Bingy bot answers user's questions, and even allows users to create FAQ waves collaboratively. See this Google WAVE FAQ here, built by asking questions to Bingy.

If you've wave sand box access, you can invite bingybot@appspot.com to your wave.


About Bingy

Sing in the tune "Twinkle Twinkle.."

"Bingy Bingy what you say, How I wonder what you say,
Up above the bots of Wave, Like a wavelet in the Web"

A little bit of Irony here - Bingy bot tries to find answer for your questions using Bing APIs, and post it back if it knows. Type a question, like "what is an elephant?" or just key in a flight number to get the status. Bingy will answer if it knows. Bingy interfaces with Bing using the XML APIs to do instant searches. I'll spend more time on Bingy to make it smarter, so that it can process tokens, and give better information other than flight status etc.

Though Jon has a well written tutorial (his code itself is simple enough to start hacking), I'll post a detailed example with my experiments with the wave bot api, specifically on the Bing interfacing. As I already mentioned, the best part of Bingy is that it is implemented in .NET.

Basically, a python proxy is hosted in google app engine that routes all calls to your custom domain. These steps are already mentioned in Jon's wiki post. I'll upload the code soon so that this can be a reference point for a first cut implementation.

Resources For You To Start With

Here are a couple of references

By the time you start exploring the wave model, I'll write another detailed post about the implementation of Bingy, with source code.

Here is the code for embedding the wave if you like. But no guarantee that I'll continue to host it for another 10 years!!
 <head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>Bingy Bot Wave Test</title>
<script src="http://wave-api.appspot.com/public/embed.js" type="text/javascript"></script>
<script type="text/javascript">
function initialize() {
var wavePanel = new WavePanel('http://wave.google.com/a/wavesandbox.com/');
wavePanel.loadWave('wavesandbox.com!w+4T_YGl-u%BH');
wavePanel.init(document.getElementById('waveframe'));
}
</script>
</head>
<body onload="initialize()" style="background:white">
<font face="arial">
<h1>bingybot@appspot.com</h1>
<div id="waveframe" style="width: 100%; height: 90%;background:white"></div>
</body>
</font>
</html>

What it means to take initiative



Taking initiative is Courage to take challenges beyond the purview of our day to day work. Doing day to day work is business as usual.Every individual has his own unique strong points. Taking initiative is giving the best to what you are good at both outside and as a part of your day to day work. For example, if you are a good musician, you can take initiative to build a music band in the organization. It is as sstraighht forward as that.

I believe every new heights made by an organization is a result of initiatives taken by one or other employee in the organization. Extrapolating this theory, if everyone takes conscious decision to take initiative to explore best in self and there by contribute to the organization, the power of organization to scale new heights will be enormous.

The following are some thumb rules/basic lessons I learned from various initiatives I could take.

  1. Once started, under no circumstance, one should drop the initiative
  2. No reason for backing out can stand before us, if you are strong like a rock. Instead only our discipline will make others feel that the initiative is longstanding.
  3. Our commitment to the initiative will be time tested.
  4. Our commitment will also be tested by others first before they welcome the same.
  5. Keep adding value to your initiative.
  6. Take it for granted that there will be criticism. Combat it with the belief that you know the best on what you are doing.
  7. Welcome criticism with an open heart, weed out the emotions and understand the core message, analyze if there is any key takeaway for you, do the mitigation.
  8. Believe that your initiative will be a huge success.
  9. Believe that likeminded people will slowly start accepting you as a leader and will start following you.

Once you have initiated an activity, it is no more an initiative, it is a live program. Hence to keep it alive on an ongoing basis, you need to instigate life in to it by way of introducing new strategies and new people centric sub initiatives.

An initiative has to be nourished and re invented through multiple other small initiatives until the initial objective is met. It is also quite possible that you find larger purpose/benefit out of a small initiative that you have started off. If you ever find it that way, redefine the objective of the initiative there by taking it to new levels.

Last but not the least, an initiative calls for a lot of perseverance from the initiators and support from the beneficiaries. The result of all the hard work will be directly proportional to the gravity of the above 2 factors. It is imperative that one cannot live without the other.

Now step back and we can see that at any point we are always a part of an initiative – either as an initiator or as a beneficiary. Choice on to what extent we should contribute is always with us. But doing the same with awareness is highly important and is mandatory.

Doing Business Analysis Better - By Prototyping Screens And Workflows

Any software or technology, in it's final form, is expected to solve a business problem for an end user. And hence, it makes perfect sense to enable the end user to validate the system before the actual construction - to ensure that there are no surprises in the end.

Yes, this sounds so obvious, but it is often amazing to see how teams neglect such a powerful technique like prototyping. Prototyping the user interfaces and workflows early enough will ensure
  • There are no release time surprises
  • Requirements are captured properly
  • There is clarity in functional scope (in scope and out of scope)
  • Analysis is good enough to start the construction phase.
Why you need Prototyping?

Let us take an example. You are a business analyst. Assume that you have a whole-sale carrot distributor as your customer, who is owning the company "Thick Red Carrots" and he is having a requirement.

"I need a simple program to manage the distribution of carrots I purchase from my suppliers. I also need to view and track the location of all my sales guys in the field; to know the number of shops they are covering a day, and to track the number of carrots they are selling in each shop. I also need the software to give my tax statement from my sales data"

When you dissect the requirements for this 'simple' software - obviously you can see the scope is increasing. And after several rounds of discussions with your carrot whole seller, you understood the actual requirements - still on a high level.

Briefly, the system should include
  • A user management and payroll module to enter and manage sales staff details.
  • An allocation module to allocate a geographical boundary for each of his sales guys on a daily or weekly basis.
  • A module for interfacing with sales guys - the sales guys will use their mobile device to enter the collection data back to the system, from the field.
  • A supplier management module
  • A stock management module to track the in house stock, allocated stock etc to foresee and report possible stock deficits
  • Admin module to enter master data - including employees, stocks, suppliers, shops (customers) etc
  • Reports for reporting all this
You also found that you need to address specific conditions, like overlapping of sales regions, back-collection of damaged carrots etc. Gasp. Gasp. Gulp, Gulp.


Prototyping To Help

You have several challenges. To mention a few, you need to
  • Make sure your carrot seller understands the features required for the final system, so that he won't cry about the scope creep.
  • Ensure your design and development teams are understanding the requirements, so that they won't miss out any functionality, and at the same time they won't over engineer.
  • Ensure all workflows and specific business cases are documented
  • Ensure all customer expectations are clearly identified and captured (remember, the tax calculation part)
You turn to a white board, and start visualizing the screens and user actions. (For an illustration, I'm using http://www.balsamiq.com/ for some quick drawings). You decided that the main screen should allow easy navigation to all modules, and hence should be having a tabbed interface. The entry screen will display a summary of statistics, and will may have few quick links as shown.


You go further, and sketch up few individual screens as well, based on each requirement. To enable the end user to define sales regions, you might create a user interface with a map - so that the end user may draw a sales region with in the map, to specify the allocated stock for the sales guy to sell in that region, and the date of allocation.


With these sketches, you might goto your end customer, and take him through these screens. You might get straight forward comments like "The dashboard screen looks awesome, but I need to view my current stock there in numbers". Few comments might definitely alter the scope, like "I need to import my employee contacts from outlook".

And once the end customer agrees on the screen protoypes and how he may switch back and forth between them, you are good to pass it to your design and dev guys, to take it to the next step.

Another key point to have in the back of your mind - When you present the prototypes, make it clear that it is just a wire frame to demonstrate the functionality. And if possible, present a real life snapshot of atleast one of your screens, to clarify your point.

Tools for doing prototyping

There are various online and offline tools for doing prototyping. You can google around to find a few. I use Balsamiq for quick and static UI prototyping, http://www.balsamiq.com/ - and Microsoft Expression Sketchflow for some serious prototyping.

The good thing about Sketchflow is that it supports workflow prototyping and behaviour prototyping to some extent. What's catchy about Expression Sketchflow is its ability to provide a dynamic, 'clickable' interface for the user - so that the user can get a some what realistic experience.

Significance of Emotional Quotient In Communication And Decision Making


There is only a fine line between flipping from a balanced emotional state in to either getting rude or emotional break down. The so called professional behavior is highly backed by a good emotional stability of a person.

The emotional stability to be able to tackle an issue(particularly people related) very much require a person to rise above the entanglements of feelings and see even his own feelings from a third person's point of view.

One of the techniques I use to take a fair decision is as follows.

When a person approaches me with a people related issue, I approach the same the following way.
  • First job for me is to set my mind clear from other issues that I might be handling. This helps me to stabilize myself in the highly responsible role of a good advisor and conscious keeper.
  • I start with the assumption is that this person has never tried to see things from the other person's point of view. With this assumption in mind, I take up the devils advocate role during discussion. This helps me to test the person's own conviction towards his view points on the issue that he is facing.
  • During the discussion, I verify if the person has already shared his issue with some one in pursuit of some relief. If yes, I do an additional task of delinking the issue from possibly accumulated notions and incorrect resolutions he might have already resorted to.
  • I assume that the issue is going to be presented before me with lot of attached feelings; simply because we naturally have a tendency to justify our doings. And the easiest way to justify things is by attaching feelings with it :-). This helps me to unlock the person from his emotions and think wisely and strategically. I believe that a person will clinch on to is feelings only until he gets an avenue to release it. Once it is released, generally people feel very light and free. I try to be the person who can facilitate the same.
  • It requires an extreme level of integrity from my side to keep the discussion points to myself.
  • After listening to the issue, I give my perspective on how it can be resolved.
  • Even though, people seem to react very positively to discussions like this, I still believe, one discussion is too less a time for any one to take some solid decisions. Enough time is given to the person to do his home work to resolve the issue. Hence irrespective of whether person was open to the suggestions or not, I just end the discussion by putting my views and giving him enough time to think over and assimilate and act.
  • I do not believe any one can be judged with one conversation and hence I too need time to study the case. While the person goes back to his desk taking his own time to work up on the issue, I also utilize that time to study the case and look out for any better resolution.
  • Depending on how the issue resolution progresses over next couple of hours/days, I gear up for the next level of discussion.
  • This exercise finally ends where the person has resolved the issue in the best possible way.

Last but not the least, inviting a person to discussion and suggesting solution is not a kids job for me. It is as serious as taking an important decision in my own life. This is because I do not know how much my suggestions influence a person's decisions. Hence I keep a special attention to ensure my suggestion will do the best for the long term benefit of the person ,Team and the Organization.

Building Automation frameworks using WCF, WF and WPF


From the Geek Session Hosted By Sarvesh

NET 3.0 is primarily made up of WCF, WF and WPF.

The Windows Communication Foundation (or WCF), is an application programming interface in the .NET Framework for building connected, service-oriented applications.

Workflow Foundation(or WF) is a business Process automation framework.while Windows Presentation Foundation (or WPF) is a graphical subsystem for rendering user interfaces in Windows-based applications.

Together the three can be used to build very powerful automated mechanisms for a variety of scenarios.

Automating Deployments using WCF, WF and WPF

Let's take the case of deployment. Any deployment process is made up of several stepsor units of action.Like copying a set of files to a folder is an action.Creating a folderis another action.Deleting folder, stopping services, starting services, configuring app.config files, starting IIS are more examples of actions.

Each such unit of action can be coded into an independent block known as an "Activity" in WF.A set of activities arranged in a particular order or fashionis represented by a Workflow.WF supports both sequential as well as state machine workflows.Thus every deployment process can be represented essentially by a Workflow.

Normally deployments take place on a remote server.It would be very convenientfor us if we could automate or take control of the entire deployment process sittingonto our local machine rather than remote logging or remote desktoping into the remote server.Such a process is facilitated by using WCF.

Every Workflow in WF can be exposed as a WCF Service.Thus by exposing our deploymentprocess first as a workflow and then as a WCF Service we can control our deploymentor other actions on the remote server sitting on our local box.

Finally we would like to have a user friendly interface via which we can controlthe remote deployment and such a interface can be created using WPF(You could alwaysuse a console app or windows forms but WPF is the next generation UI framework and youmay as well go for it).WPF has features such as 3D objects, support of video/media, great features like the ability to mould your buttons, UI Controls into various shapesanimation and more.

Automating Testing using WF and the MouseKeyboardLibrary

Normally testing also is made up of individual repeated chunks of action which againcan be made into custom activites using the workflow foundation.Now every workflow has an XAML(a form of XML) representation.Thus every Activityis in turn represented by an XML Element.By using another .NET Program which can interchange these XML Blocks one would land up with a different testing scenario.Thus testing use cases and testing can be automated.

Of course one would ideally want the testing mouse clicks, keyboard inputs and otheractions also to be automated and this can be done using the MouseKeyboardLibrary(a freeopen source .NET library offered by Codeproject).This library gives us the abilityto hook into mouse/keyboard events and also to simulate mouse/keyboard events.
Thus a WF custom activity made up of calls to the MouseKeyboard library wouldact like a virtual automatic tester.

Using WF Designer to build an Automated deployment or testing framework


One of the less known features of WF is the WF Designer.The WF Designer classprovided by Microsoft gives us the ability to host the Workflow Designer intoenvironments other than Visual Studio.Thus one can have an independentWPF application or Windows Forms application hosting the WF Designer.Such an application would provide us with the ability to design our own workflowsin an environment different from visual studio.

So first by designing our custom activities or units of deployment and secondlymaking these accesible from a WF Desinger Application one has succesfully builta construct-it-yourself deployment framework.Such an app would allow teams having no knowledge of WF, WCF or WPF to build their own deployment/testing or other workflows.

Testing and Deployment are just examples wherein one sees the extent to which WCF and WF can be used for automation. Most of the processes in our organizations can beactually simulated using WF Workflows, most of our interactions with Remote machinesand servers can be replaced by WCF Service calls and our own interaction with ourdesktop can be done using a friendly WPF User interface. Thus the combination of theseframeworks provided by Microsoft gives us a great means to build a wide variety of veryinteresting and useful applications.




Winning BRDs

Before you read this article, please read the introductory post on "The Edge Thought Series".



This post has been compiled from best practices, my experience and thoughts collected over a period of 8 years of involvement on various projects (spanning enterprise-wide ERPs to small shopping cart applications across business domains and technologies) and learning gained from co-workers all along.

The need for 'Winning BRDs'
  • Design and development effort estimates are often based on this phase.
  • Testing (test planning, scripting and quality assurance) is based on the BRD.
  • Disputes during UAT phase (regarding bugs or change requests) often take the team back to the BRD.
  • Business Analysts who create BRDs are often expensive resources and the output needs to be in line with their cost.
  • User manuals/trainings are often structured based on the BRD.

Therefore, Winning BRDs contribute significantly to successful projects.

7 Success Factors - for a winning BRD/Requirement gathering phase
  1. Pick up the scope of work from the signed off proposal document. At any point of time if there is any scope creep at the requirements gathering phase, it needs to be raised immediately to the project manager/account manager, who may want to pitch for it as an enhancement.
  2. Consider the BA phase as the 'only' available opportunity for requirements discussions.Discussing requirements at a later stage indicates either a not-so-good job done in this phase (for whatever reasons), or changing client requirements.
  3. Identify key stakeholders in the client project team. The ARMI (a model commonly used in the Six sigma methodology) works well here. Create the ARMI matrix early on during the requirements gathering phase and get it approved from the client project manger.
  4. Schedule time with all stakeholders in advance and regular milestone reviews with approvers to ensure the progress is tracked.
  5. Think business and not technology solutions while gathering requirements.
  6. It is valuable to have a technical designer/architect on board as a consultant during the Requirements phase. Regular reviews of the BRD with the technical lead can be useful in eliminating delays and rework during the design and development phases.
  7. Know the effort estimated and cost threshold for the BA exercise and constantly monitor the overall effort required and your current status until the BRD is finally signed off by client and internal stakeholders.
Winning BRD attributes
  • First create the broad BRD structure keeping the scope in mind. Then consider each module/section at a time and break it up until no further levels of granularity remain.
  • Pictorial Representations - Work flow diagrams convey much easily and better than pages of words.
  • Concise - Avoid rambling verbose document. Use bullet points wherever possible.
  • Traceability - It should be amenable to track developed code units from the BRD.
  • Output should be useful for Testing-teams and it should help them to build Test cases form it.
  • Indicate clearly the open questions that may have been put into the 'parking lot' during requirements gathering discussions.
  • Capture as many implicit requirements as possible.
  • Research best practises of business processes and technology solutions in case multiple options need to be proposed.
  • Prototyping - Identifying if there is any need for prototyping. Prototyping can be non-functional mock-ups or semi-functional screens in HTML or other such tools.
  • In case the client stakeholders are not clear on what they need, research and question them on any competitive products/systems that can be referred to and build the discussions based on these.
Churning out Winning BRDs takes good jugglery of knowledge and skill from the BA (Business Analyst).

Soft Skills required for a Business Analyst
  • Keen interest in exploring diverse business domains, even really new concepts. The work may vary from requirements gathering for a Supply chain management to a website of a DJ's club!
  • Very good listening skills, without imposing one's own thoughts/experience much while listening.
  • Be a consultant as much as required in suggesting, sharing, recommending or questioning without critiquing the current business environment.
  • High energy levels to facilitate multiple types of stakeholders, but without putting them into frenzy.
  • Ability to convert an out-of-scope i.e., new/changed requirement to change request or enhancement.
  • Fluency in English language and excellent verbal communication skills.
  • Exposure to diverse cultures.
  • Ask the right questions at the right time to avoid rework later.
  • Be an internal client to the Development and testing teams.
  • Need to have Twin orientation - client focused and developers focused.
  • Minute all meetings and seek sign-off from client stakeholders.
  • Finally, patience to work with all types of clients - from the technically savvy to the technology agnostic.You could even get a client who would say that "I love my current process, but I am talking to you because my boss asked me to!"
PS -For the last category, try answering the question WIIFM i.e., what's in it for me!


In my previous post and related codeproject article, I gave a quick introduction towards creating and using your own custom dynamic types, inheriting from the DynamicObject class.

From a business point of view, it might be interesting to examine areas where dynamic features in C# can add value.

I'm just listing down here a few points from the "New Features in C# 4.0" manual regarding scenarios where you may increasingly use it - [Get the complete doc here][^]:

"The major theme for C# 4.0 is dynamic programming. Increasingly, objects are “dynamic” in the sense that their structure and behavior is not captured by a static type, or at least not one that the compiler knows about when compiling your program. Some examples include:.

  • Objects from dynamic programming languages, such as Python or Ruby
  • COM objects accessed through IDispatch
  • Ordinary .NET types accessed through Reflection
  • Objects with changing structure, such as HTML DOM objects"
In this post, we'll dig in further more in to .NET and C# 4.0.

.NET framework 4.0 has a cool new ExpandoObject class, in System.Dynamic namespace. What makes this special is, it allows you to create an object with members that can be dynamically added and removed at run time. To clarify the point, have a look at this example.

   
dynamic obj = new ExpandoObject();
obj.Value = 10;
var action = new Action<string >((line) => Console.WriteLine(line));
obj.WriteNow = action;
obj.WriteNow(obj.Value.ToString());

And you'll get the expected 10 as output in your console. As you can see, the property 'Value' and method 'WriteNow' is attached at runtime, when the invocation happens.

The objective of this post is to examine how the ExpandoObject itself is implemented. To make this clear, let us create a MyExpando class, a minimal implementation of ExpandoObject.

We are inheriting MyExpando class from the DynamicObject, and these are the major methods we are overriding.

  • TrySetMember- Provides the implementation of setting a member.

  • TryGetMember-Provides the implementation of getting a member.

  • TryInvokeMember- Provides the implementation of calling a member.

  • GetDynamicMemberNames- Returns the enumeration of all dynamic member names.

And Here is our minimal MyExpando class, inherited from DynamicObject, and overrides the above methods.

  public class MyExpando : DynamicObject
{

private Dictionary < string, object > _members = new Dictionary < string, object > ();


///
/// When a new property is set, add the property name and value to the dictionary
///

public override bool TrySetMember(SetMemberBinder binder, object value)
{
if (!_members.ContainsKey(binder.Name))
_members.Add(binder.Name, value);
else
_members[binder.Name] = value;

return true;
}

///
/// When user accesses something, return the value if we have it
///

public override bool TryGetMember(GetMemberBinder binder, out object result)
{
if (_members.ContainsKey(binder.Name))
{
result = _members[binder.Name];
return true;
}
else
{
return base.TryGetMember(binder, out result);
}
}

///
/// If a property value is a delegate, invoke it
///

public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
{
if (_members.ContainsKey(binder.Name) && _members[binder.Name] is Delegate)
{
result = (_members[binder.Name] as Delegate).DynamicInvoke(args);
return true;
}
else
{
return base.TryInvokeMember(binder, args, out result);
}
}


///
/// Return all dynamic member names
///

///
public override IEnumerable&ltstring> GetDynamicMemberNames()
{
return _members.Keys;
}
}

When ever a property set operation happens, the runtime will invoke TrySetMember, and there, we are pushing the property name and value to a dictionary. Similarly, when ever a get operation happens (TryGetMember), we are simply returning the value object if available in the dictionary. Also, when a method call is made (TryInvokeMember), if the value type is a delegate, we just invoke the same by passing the arguments we received. Pretty simple, huh?


Well, that is it. Now, let us try the above scenario with our MyExpando object

          dynamic obj = new MyExpando();
obj.Value = 10;
var action = new Action((line) => Console.WriteLine(line));
obj.WriteNow = action;
obj.WriteNow(obj.Value.ToString());

Run the application, and you'll get the same output as above. Cool :)


Happy Coding

Dynamic Typing (Duck Typing) in C# 4.0


C# 4.0 introduced the dynamic keyword, to support dynamic typing. If you assign an object to a dynamic type variable (like dynamic myvar=new MyObj() ), all method calls, property invocations and operator invocations on myvar will be delayed till the run time, and the compiler won't perform any type checks for myvar at compile time. So, if you do something like myvar.SomethingInvalid(); it is valid at compile time, but invalid at runtime if the object you assigned to myvar doesn't have a SomethingInvalid() method.

The System.Dynamic namespace has various classes for supporting dynamic programming, mainly the DynamicObject class from which you can derive your own classes to do run time dispatching yourself.

A couple of points to note.

  1. The dynamic call will be slower for the first time, and your calls will be jited and cached if possible for subsequent calls. As a first step, the DLR checks the cache to see if the given action has already been bound wrt to the arguments. If not, the DLR checks to see if the receiver is an IDynamicObject, and if so, asks the receiver to bind the action. If the receiver is not an IDO, then DLR calls into the language binder (i.e, the C# runtime binder), and cache this.
  2. C#'s underlying type system has not changed in 4.0. As long as you are not using dynamic keyword, you are still statically typed (i.e, the types are known for the compiler at compile time).
  3. Error handling when you use dynamic features is a bit difficult and can't be very specific, as you don't know much about the foreign objects to which you dispatch the calls.
Recently, I published this article in Codeproject; Fun with Dynamic Objects and MEF in C# 4.0 - A dynamic File System Wrapper

This article demonstrates a couple of interesting techniques, including.
  • Creating a dynamic wrapper around the file system so that we can access Files and Directories as properties/members of a dynamic object
  • A way to attach custom Methods and operators to our dynamic wrapper class and dispatch them to a plug in sub system.

Think and act ‘Beyond The Obvious’



One of the finest qualities of a manager is his ability to 'Not to get emotionally dragged'. The ability of seeing things objectively will highly enhance the management quality in us.


Being in this stage, dealing with 100 different issues at the same time becomes so natural. You will never miss out on reading important mails, on mail reverts, and even attending an evening party while a crucial delivery is happening in parallel on the other end.

Keeping one or more focus in your career is extremely
important to attain this stage. You can decide the number of focus points depending on your multi tasking capability. But it is advised to start with minimum.

It can be things like;

  • Achieving you project/unit/company goal in terms of revenue, number of employs
  • Achieving client delivery excellence etc
  • Achieving your personal goals (But make sure your personal goals are aligned with company goals)
  • Achieving a high level of employee satisfaction in your team
Once you have this goal, you are all set to tackle many issues that you will come across on a day to day basis. Having set the background for the topic, let me come back to my topic - 'Think and act beyond the obvious'. Among the many of the issues that you may come across, I am interested in applying the above logic in ‘Team handling' and related issues'.

While handling the team all managers will come invariably deal with - appraisal sessions and related activities.

Going by the guidelines set by the organization without any deviation during appraisal sessions is one way of doing it. It doesn’t require much skill and can be done easily.

But being intelligent and applying logics along with the above will take it one step further and will really help the team perform in future.

At this point you should start 'Think and act beyond the obvious'. There are certain acts which falls in 'beyond the obvious' category - which I would categorize as 'Value adds' while managing. Which means, it doesnt necessarily fall in to the standard guidlines set by the organization.
To make it clear, please see the below chart.













The moment we add more dimensions to the obvious category tasks, the quality of thinking pattern in the team changes. This changes the dynamics of the team. And when team’s thinking pattern is focused and matured, it becomes collective consciousness.

Yes!.. This is the level at which a manager should operate.

It is your capability to make your team think beyond the call of their duty, that makes the difference, ultimately it will lead to a dynamic team.

As a Manager, you should know the depth of your teams capability. If you don’t know where you stand at the moment, you can’t take your ship to the next required port. This is a world that moves on theory of relativity.

The team is as good as the team's manager.


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

top