Wednesday, March 25, 2009

Faux Pas

I didn't realize my blog was completely broken until late evening yesterday. I was using a borrowed blogger template from another site and the lazy me completely forgot to download the images, css and javascript from their site. The ignorant me didn't have a clue that they had bandwidth restrictions for their photobucket account where all the images were hosted.

It was awful to look at the blog and see all the nasty photobucket images asking to upgrade the account as the download bandwidth had been exceeded. Eeeww! I really apologize to all my readers(okay, sorry, I really meant 3 people who visit my blog everyday) who had to put up with this. With my credible intelligence level, I'm glad that on one thought that this was my new experiment in blog aesthetics. Hehee...

Thursday, March 19, 2009

Analysis Paralysis

 

analysis-paralysis

You know what is worse than taking a bad decision? Yes, you guessed it, not taking one. I've come across some very intelligent individuals who just couldn't make a decision and vacillated between alternatives, even when they did make a decision.

The thing which baffles me the most is that some of them are highly experienced, worldly wise and extremely intelligent individuals. I could spend hours with them talking about anything and everything under the sun and would come out of the discussion learning new things. But, I'm not sure what happens the moment they have to make a decision. They would either tend to consult lot of people before making a decision lest they might hurt someone's feelings/pride or would have their mental tectonic plates gyrate passionately on both the sides.

Something just takes over the cerebral faculties and clouds their judgement. Sometimes, these individuals take so much time that the issue becomes irrelevant. On second thoughts, it might not be such a bad thing at all as the issue does get solved :)  I'm not sure if it is the case of not feeling empowered enough, fear of failure, over cautiousness, or a mere passion for over analysis but they need to tell themselves that they are in a leadership position because someone thought they deserved it(most of the times, they truly are deserving) and they ought to get things going.

The thing that might work in these cases is constant follow up regarding the pending decision after a resolution deadline has been setup. I know it could be hard and there is a chance that you might offend your peer or senior by the regular follow-ups but I've seen it work sometimes.

What are some of the strategies/suggestions you would recommend to tackle this behaviour?

 

Related Post

In State Of Denial

Wednesday, March 18, 2009

The Future of Management

 

Future of Management Have you ever felt that modern management practices in mid to large size organizations sometimes fall short on fostering creativity? Do you feel that your organization is not doing enough to harness the talent of all its employees? Is innovation localized to a select group in your company and you think the management is not doing enough to make innovation systemic? Have you ever had a nagging feeling why HR practices try to bring consistency and homogeneity in a heterogeneous environment?  Do you think the employees are smart enough to manage themselves and organizations don’t need deep rooted hierarchies to watch over them? Do you think your organization is not nimble enough to adapt to the changing business environment?

Well, the book is for you if you answered in affirmative for any of the above. It is a very insightful book, which is divided in four sections - Why Management Innovation Matters, Management Innovation in Action, Imagining the Future of Management and Building the Future of Management.  

The book starts with outlining the reasons why should we adopt new set of management principles and how current management practices are not suitable enough for the new knowledge economy. The second section outlines examples of companies which have adopted the new innovative management styles and are extremely successful - Whole Foods, W.L. Gore and Google. The third section outlines the need to first understand why we believe what we believe and then embrace new principles that foster innovation within an organization. The last section shares certain lessons to become a management innovator.

It's a book which would inspire you to challenge certain norms within your organization. I really enjoyed reading the book.

Thursday, March 12, 2009

Social Search: AardVark

How do we naturally search for information without using google? No, the answer is not Yahoo. I mean to ask without getting help from a search engine. Unfathomable, isn't it? Well, may be not.

Wouldn't you rather rely on someone from your personal network to seek advice on  great places to see, the best restaurants to have dinner in, the most engaging movie to watch etc. than getting the information through google? Well, I generally get these kinds of information through like minded folks or "so-called" experts in my network and that's exactly the premise of AardVark.

AardVark is a social search engine designed to get your questions answered from your network though instant messaging products. I never thought there could be another way of searching after google but this definitely seems very promising.

Friday, March 6, 2009

Designing for Performance

 

bB-2StealthBomber Do you think performance is tuned after the code has been written or is it one of those obvious quality attributes that has to be considered as part of the functional requirements of the system? Considering performance as an afterthought and deciding to tune your software towards the end of the development can only help so much. You really need to consider performance at every stage of software development life cycle. The system's responsiveness needs to be measured and calibrated at every iteration of your product design and development.

One can definitely design systems with that performance as an afterthought notion but I'm not sure whether they would be widely used. Would Google or Amazon have been that popular if they had taken minutes to search for content or books? I bet not. Would Porsche, Ferrari or Stealth Bomber have been possible with the performance-as- afterthought process? I bet not. They were built ground up for performance and speed and they live up to those standards. Why should you believe me? I've driven every single one of them. In my dreams. Every night. Seriously.

So, how does one approach thinking about performance at the design phase? Does one need to employ different design principles for different delivery channels? Though there are specialized patterns which cater to a specific delivery channel like Web, Mobile or desktop based solution but there are some which are overarching and can be applied regardless the delivery channel. IMHO, one needs to consider the following -

  • Caching - Caching of data can dramatically increase the responsiveness of any application though certain considerations need to be made before finalizing the strategy. One could follow W3 of Caching - What, When and Where.
    • What to Cache - It really depends on the application context but anything that would take inordinate amount of time to retrieve and doesn't change that frequently is a good candidate for caching. I also always think about the memory footprint of the cache. I would look at the size of the every object that needs to be cached by enumerating over its properties and computing the actual memory it is going to consume. This helps in the Where part of the puzzle.
    • When to Cache - One really has two options around it - Proactive or Reactive. Proactive Caching is generally employed for datasets(Not the ADO.NET DataSet) that get used in the application in most of the scenarios. It is a technique by which one loads the dataset at the start of the application. Reactive Caching is used when one is not sure when a dataset would get used thus it gets cached it after its first retrieval.
    • Where to Cache - It depends upon how fast the cached dataset needs to be accessed and how big it is? If the cached data doesn't need to be loaded in fractions of milliseconds and is huge then it makes sense to use an Out of Process Cache. But, if the size of the dataset is not that big then one can think about caching the data in the same process. In-process caching gets a little tricky for the web delivery channel when one has a cluster of web servers. As the cache needs to be identical in all the webservers, one has to either develop something in house or use sophisticated products like NCache to replicate the cache state among the clusters.

 

  • Data Structures - Poor selection of data structures can lead to lot of memory wastage and denegenration of performance. Would you really use a LinkedList for storing all your Customers? Would you use an Array for dataset that is always changing? Probably not. I think one needs to decide early the data structures which would get used in the domain model of the product. 

 

  • Algorithms - One not only needs to use the right data structures to store the data but also use the right algorithms to insert/retrieve the data from them. They are tightly coupled and both of them have to be selected in tandem. If you were to sort your dataset, would you use BubbleSort or QuickSort? You wouldn't care if the dataset is too small but using BubbleSort in large datasets could be an extreme wastage of CPU cycles. The selection of the right algorithm plays a huge part in the responsiveness of your application and it makes sense to give a lot of thought to it.

 

  • Asynchronous Behavior - I'm not sure whether asynchronous behavior can  increase the response times of your application but they can tremendously increase the responsivess of your application. In the world of short attention spans and even smaller patience levels, responsiveness means performance. One can use variety of techniques to break the long running transactions and execute them in a step manner while engaging the user. Do you have order processing which runs through a myriad business instructions? Do you have your users see a fascinating marvel called rotating hourglass and twiddle their thumbs after they submit an order? Wouldn't it make sense to break the transaction, put it on a order processing queue and let users know they would be informed when their order is processed? One can easily use some sort of queuing mechanism like MSMQ to decouple the component that submits the order from the service that actually processes the order. In the web scenario, one could use AJAX rather than having the user reload the entire web page again.

 

  • Interface Design - It makes sense to design coarse grained interfaces a.k.a Chunky Interfaces to reduce the chatter among the software layers. It's best to have calls to retrieve and insert data in chunks rathen than invoking multiple method calls to achieve the same logical unit of work. For example, let's say you had an Order class, which had details about the Order, its LineItems and the details about the Customer. Would you have 3 separate calls to create Order, OrderLineItems and Customer or just have one call to create Order, which would execute a transaction to create the Customer if it doesn't exist and then save the Order and its LineItems. It would be prudent to have only one call rather than making 3 independent service calls to achieve this logical unit of work as it reduces the chatter between service layers and help boost performance.

 

  • Data Partitioning - As the slowest moving piece of any application is I/O, it makes sense to give a lot of thought to the database design and how the data would be partitioned in it, if needed.  There are times when certain datasets get used a lot, think of million of hits per day. In those scenarios, it makes sense to partition these datasets with the help of a partition key. The partition key decides how the data would be split physcially. For example, if you are building a social network and you get equal number of english, french and german speaking users then should you divide the users in different databases? It depends upon the context but one should think about the layout of the data persistence. MetaDatabaseIn MS SQL Server 2005, one could even partition a table without having the application ever to know about that the data is distributed in different filegroups. 

 

 

Are there any special design considerations that you know of, which can help boost the performance?

Wednesday, March 4, 2009

Why Technology Startups fail?

 

I was having coffee yesterday with one of the founders of my company and somehow the discussion came around to technology startups. Why do so many of them fail? He said they fail because most of them don't have a strategy for acquiring customers. The idea could be brilliant but it is bound to fail or struggle if the startup doesn't know the go-to market strategy, how would they have the customers buy their products, and the cost of acquisition of these customers. Simple. Insightful. Profound.

The thing which can kill a startup is the cost of customer acquisition. A startup could be raking in millions of dollars but not be making a single penny in profits because of the high cost of acquiring and servicing customers. In the formative months/years, the startups  don't mind paying more to acquire customers when compared to customers average spending on their site as it is all about growth and about getting the market to know of their product. But, it has to be backed up by a sound startegy of bringing these costs down over a period of years so that they can start making profits.

Thus, invest in creating a go-to market startegy so that you can understand the potential and limitations of your idea.

Thursday, February 26, 2009

In State Of Denial

I was ruminating over the perils for a business entity and figured the thing that can hurt an entity the most is having its management in the state of denial about its health. Heck, this could be true for everything around us - our projects, professional growth, personal relationships etc. Most of us run our businesses/groups with a perception that it is succeeding until we discover that we have landed over on the dark side. It's interesting to see that most of us make believe that it was an overnight phenomenon and it was never meant to happen whereas the reality is that tectonic plates of adversity had started gathering momentum long ago.

Have you ever driven in India? If not, well, first lie in the prostrate position and thank your stars that destiny has chosen you as the lucky one. Well, it's an absolute pandemonium! There are no rules on the road, people cut you off, they are always driving at your tail and the worst, they don't hesitate to unleash an honking avalanche and bury you under the cacophonic sound if you were not to give them way. Crazy, isn’t it? They say one can drive anywhere in the world if one has driven in India. Don't believe me? Wanna try it out? Yeah, I didn't think so :)

Now, the interesting part - One has to look at everyone's animated expression every time there is a fender bender (BTW, which happens every few seconds). People are ALWAYS shocked that they got into such an accident. Well, was it not expected in these driving conditions? One should be thanking the heavenly forces that it didn't happen few days back. But, they don't. Why? They are in the perpetual state of denial about the horrid driving conditions.

In both the above scenarios, there is a state of denial which leads to unpleasant ramifications. The logical choice is to look within and seek bold new initiatives which can challenge the status quo. But, the sad part is that sometimes we are too late in discovering the disconcerting facts about the health of our environment. By that time, the playing field has already changed and one has to work diligently to be part of the race again. Thus, the idea is to observe the business context intently and be nimble enough to make proactive changes.

Thus, always periodically review the progress against the plan, be inquisitive about the plans of your competitors, invest in innovation and nimble enough to adapt to the changing environments.

Related Post

The Most Important Management Skill