Saturday, April 16, 2011
Humble Bits
Tuesday, September 14, 2010
Batman and Robin
Why do tech companies have delegators?
It’s weird, isn’t it? I wish I had a clue.
First of all, who is a delegator? To understand it, one has to read this classical joke -
A pig and a chicken are walking down a road. The chicken looks at the pig and says, “Hey, why don’t we open a restaurant?” The pig looks back at the chicken and says, “Good idea, what do you want to call it?” The chicken thinks about it and says, “Why don’t we call it ‘Ham and Eggs’?” “I don’t think so,” says the pig, “I’d be committed, but you’d only be involved.”
Get it? I’m sure you do.
Delegators are the kind of people whose only job is to be involved from the sidelines. They are not the ones who do design, development, testing or manage projects. Well, may be, sometimes they manage projects but all they do is just check the tasks from the list and report status off of it. I’ve been part of companies where even the task list was created by the developers themselves and all they did was ask whether it was done or not.
So, what the hell is my problem?
Well, my only problem is that I see an increasing trend in the software industry(especially India) to have delegators take prominent positions, big offices and sometimes be the drivers of the tech. strategy - All when they have little clue about how to really go about building good software. How can one really build a good strategy when they are divorced from software eco system? Why should they get quiet working conditions(read: offices) when they are not the ones getting actual work done? Why should engineers report to people who don’t have many technical bones in their body?
Tech companies where techies are not part of the core group. Huh! Yeah, beats me too.
But, I get it as well. They are generally the people who can be good with processes, can manage P&L, can drive resourcing and recruiting for large scale projects. Thus, a genuine need for software companies to recruit such kind of people. And, to be honest, one can’t run a successful tech business especially software services business without them. Thus, the right kind of people add tremendous value in running a good software organization.
But, why the hell have them be at the driver seat? Shouldn’t they be just guiding the experienced technologists about the patterns of financial success for running software business? I just wish tech companies had the “two in a box” approach – Technologists as the drivers and the business aides as their side kicks like Batman and Robin.
Yeah, we just like to wear better suits and drive fancy cars :)
Monday, September 13, 2010
Saying Sorry
You are cognizant of it.
So, what’s the problem saying sorry? Simple, plain old fashioned Sorry.
“I’m really sorry that I screwed up. I will do my best to fix it.”
Some of the engineers, managers and business leaders I’ve come across hardly know this word. They shy away from it. It’s either not there in their vernacular or it is a tongue twister for them.
Aah, I exaggerate. We know that’s not the case.
Actually, most of the people either genuinely don’t realize that they have screwed up or feel bit awkward saying that. They think they might look weak and vulnerable if they were to apologize or it could be that a honest admission of mistake would somehow cast a shadow on their superiority/path to success.
In almost negligible cases, some people are probably built not to ever accept their mistakes. They always have an excuse, someone or some situation to be blamed – somehow they can never make a mistake. Period. In my experience, there is a high correlation between these kind of individuals and them taking undue credit of someone else’s hard work/ideas. They would always make themselves look good no matter if someone else has done the hard work.
On the contrary, I believe it speaks volumes about the maturity and emotional fortitude of a person who is not afraid to admit the mistake and apologize. Saying sorry from the heart gives you another chance to rectify the mistake and helps re-build the trust. It just goes to show that you are cognizant that you let someone down, even inadvertently, but are ready to be given another chance to fix your mistake i.e. you are an objective person - well aware of capabilities, what is expected of you and how are you doing against those expectations?
My question to those who can’t say sorry is “how does one even grow if one doesn’t admit mistakes and is willing to learn from them?”
Photo By: ExtraLife
Saturday, September 11, 2010
What to expect in a startup?
I’ve been extremely fortunate to work with few startups through out my career and have seen this question surface in many a discussions with experienced engineers/managers in India who are passionate to build something ground up but are not sure what to expect.
This kind of question would never ever surface in States but the product development culture is still at nascent stages in India. The product scene has become hot only in the last few years with more India focus product companies entering the market and it is only going to get better from here. So, here are my 2 cents or 90 paisa, whatever your favorite currency is -
1. Expect to work around highly talented and passionate people. You would generally find most startups filled with extraordinary talented people expert in their fields and completely committed to realizing the dream. If they are not experts, they would definitely have the innate ability to work hard and get better every day. These are the kind of people who are great at what they do, want to do great work with other like minded people and are not there for paychecks. Well, they may be there for the big payouts :)
2. Agility. A startup is not a place of perfunctory processes and boring, good-for-nothing, mind-numbing, why-don’t-you-please-kill-me-now meetings. The idea is doing, not discussing about doing. Don’t even think about joining a startup if you are a kind of a person who loves to rope in everyone before doing anything or are in the habit of cross team collaboration. Also, to enable quick decision making, the organization would be extremely flat and one wouldn’t be 100 levels below in the organization hierarchy to the C level executives.
3. Work, Work, Work. It is a place where you would probably achieve what one would typically achieve in a week’s time in a big corporate setup. It is generally a far more productive workplace as there are lesser number of distractions like meetings. Also, more or less every startup has a Big Hairy Audacious Goal and one has to work smartly and diligently to realize it. I’m not trying to say that one would get buried under the work load but expect to work close to 10-12 hours a day, some days even more. I’m sure there are startups out there which honor the work life balance but they are few and far between.
4. Fun. And, the point is? Okay, I contradict, so? I know I mentioned that it would be lot of hard work but there would be an intense amount of fun as well. The thing is that startups are more like tight knit groups or families thus the environment lend itself to doing fun things like having Friday evening beer fest, watching Avatar in 3D together, to having impromptu Rock concerts within the office. Contrary to the popular belief, these kind of activities help in creating long lasting bonds and building the team camaraderie, which is the bed rock of building great software and companies.
5. Donning Multiple Personas. Everyone in the startup play multiple roles. A software engineer in a startup would generally play the role of an analyst, manager, designer and a tester. These are traditionally played by different people in big organizations but a startup would generally demand all of this be rolled into one. You would be asked to own up the requirements, understand them clearly, work with the UX designer, point out flaws in the design, unit test your code completely(please, shoot for 100% code coverage, will you?). On the other side, if you are joining as a top level employee expect to do HR, hiring, legal, operations, run the coffee machine, be slave to the engineers. The point I’m making is that you would have to own your domain area completely and run it like you were running your own company in that space.
6. A big fat payout i.e. stock options. Stock Options, Check. Big fat payout, ahem, may be not. The fact of the matter is they won’t be worth that much if you are not one of the early employees or joining at the top level. All the startups sell the options hard but the fact of the matter is the options are loaded towards founding employees and top level executives. Moreover, only 1 out of 10 startups are ever successful thus what are the chances that you would end up making boat load of money at exit? Thus, make sure you get paid adequately to help realize the dream, work with like minded people and enjoy the ride.
7. Frugality. I’m not sure if it is true for every startup but for the majority that I know. As they generally have to stretch their financial runway or build good cash base, you would find most of them spend money where it is really needed. Thus, the most pragmatic startups won’t have swanky offices, jaw dropping Infosys like campus, ten different kind of coffee blends, yoga sessions, massage therapy etc. Not to say we are stingy, I’m just saying we would spend where it is absolutely important like hiring the best talent in the market.
Startup Photo By: William
Thursday, September 9, 2010
On Hiring People
He walked.
I sold our startup’s value proposition honestly but unfortunately it didn’t work. He agreed and was excited at first at first but I guess got scared away by my honest admission of risks involved in joining a startup. I guess I sold the risks far more than the merits. But, what was I really supposed to do?
It is tough to hire smart talented people for startups and keep them motivated but the situation becomes far more involved when one is hiring from one’s own network. How do you bring in an engineer whom you have worked with for years without telling them the risks in detail? Isn’t it imperative that they know both the sides and take an informed decision? How does one really show the bright side while sharing these kind of risks in detail?
I failed.
I wish I knew the answers. I wish I knew the magical words so that everyone was ready to take a chance to build what we aspire. I wish I had read Tarun Upadhyay’s advise. On the other hand, I also wish if everyone could see that huge success or colossal failure is just a game of probability and the actual fun is really in building a company itself. I’m not trying to evangelize that reward is in taking a risk itself but sometimes one has to take chances, unleash the adventurer and see if the rainbow actually exists on the other side.
Monday, August 30, 2010
I followed my own advice
I was trying to find myself at work when I read First, Break all the rules and blogged about it. I took the questionnaire and found out that it was time for me to move on as well. So, I did.
I’ve been through a roller coaster ride since then. To be honest, more lows than highs but I don’t regret taking that decision. I joined a past colleague of mine to build an education and family events based web platform, only to disband it after few quarters. We got the rude awakening when we realized there was hardly any money in the bank, business model was not good-enough, we weren’t nimble enough and we lacked good strategic vision. I learned a lot in the process about product development, fund raising, running a startup and how not to do things. I just wish had learned more of how to do things as success is a great teacher but I would do with failure as a teacher right now.
Since then, I’ve been a solopreneur. Well, more like an accidental solopreneur. I didn’t ask for it, I didn’t design it to be that way, it was a mere serendipity. I just wish I could claim that I always wanted to start a company and worked towards my vision but the reality is that it just happened. I started my own software services company with focus on designing and building products using Microsoft technologies. It was a natural choice for me as I was involved in building software products for good number of years at GlobalLogic. The experience at GlobalLogic taught me how to bring business ideas to life in a pragmatic and an agile way. I just thought of leveraging that experience in trying to collaborate with as many version 1.0 companies as possible. Thus, Quovantis was incubated.
Life has been good since then. There is not that much revenue, hardly any profits to speak of but the road ahead looks bright and sunny. I’ve been getting tremendous amount of support and help from past colleagues and friends. I consciously want Quovantis to be a small company and help other small and mid size companies to build better software. I’m not sure if I would succeed in realizing my vision but I’m we’re working hard towards it.
Sunday, March 29, 2009
Should you move on?
In the current economic gloom, it's probably preposterous to even broach the subject of leaving a job but I was wondering if there was a methodical system to decide if the time had come to switch jobs.
All of us have an inbuilt compass that decides whether the time has come to look for opportunities outside the realm of the current company. It could be for various reasons - lack of role definition, lack of challenging opportunities, unsatisfactory work conditions/compensation or a manager that we just don't get along with etc.
Apart from the "gut system", is there an objective way to decide to look outside? It turns out there is. One can figure out the answer if was one was to earnestly answer the below 12 questions -
- Do I know what is expected of me at work?
- Do I have the materials and equipment I need to do my work right?
- At work, do I have the opportunity to do what I do best everyday?
- In the last seven days, have I received recognition or praise for good work?
- Does my supervisor, or someone at work, seem to care about me as a person?
- Is there someone at work who encourages my development?
- At work, do my opinions seem to count?
- Does the mission/purpose of my company make me feel like my work is important?
- Are my co-workers committed to doing quality work?
- Do I have a best friend at work?
- In the last six months, have I talked with someone about my progress?
- At work, have I had opportunities to learn and grow?
I wish I had come up with these questions but I just happen to stumble upon them while reading "First, break all the rules" by Marcus Buckingham and Curt Coffman.
The questionnaire is put in such an articulate and simple manner that it helps you bring out the truth out of the closet regarding whether you belong in a specific place, are in a position to contribute and grow professionally. You immediately know the path you have to take if the answers are predominantly towards "Disagree" or "Strongly Disagree". By the way, they suggest that all the questions should be answered on the scale of "Strongly Disagree", "Disagree", "Neutral", "Agree" and "Strongly Agree".
To digress a little, the book was about the fact that individuals leave managers and not organizations. I'm sure you can clearly see that all the areas in the questionnaire can be directly addressed by an individual's manager thus I'm not surprised about their findings. After reading the book, I'm thoroughly convinced that individuals leave because of their managers. I hate to admit but I've had some smart individuals leave when they were reporting to me and now I can clearly see their reasons. I could pass the buck on to the organizational operative context but at the end of day I didn't do enough to realize their potential.
I hope this questionnaire helps everyone who have started to feel iffy about their current position but don't know what should they really do.
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
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
Wednesday, March 18, 2009
The 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
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.
In 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
Sunset at Kirkland
I've been to Kirkland many a times and the sunset at this point never ceases to stupefy me. I always experience tranquility while sitting on the pier, hearing the waves crash at the beach and watching the sun rays disappear over the horizon. The opulent hues in the sky over the lake paint the world in such a surreal manner that it dwarfs any of the prolific works of painters of our times.
Related Post -
Wednesday, February 25, 2009
The Most Important Management Skill
Listening. Period. It has to be by far the most important trait that any manager needs to have. By the way, I'm not only talking about listening as in hearing but also interpreting their vernacular through their expression of speech and body language. We sometimes forget that verbal expressing is just one miniscule part of the overall communication and a major part has to do with the body language, posture, and facial expressions through which a person expresses their thought process.
I'm not sure why some of us are not good at it but the reality is we most of the times are caught up in our web of thoughts or already have preconceived notions about the individual conveying the message. Thus, we tune out somewhere in the middle of the message and don't give a fair chance to that specific message. It could be in a hurry to end the conversation because of some prejudice against that person/topic or our mind has already come up with some smart retort.
I wonder how one could manage effectively with a listening impediment. My sense is that one can't. A manager's job is, well, to manage the team. In my field, the success of the project is also governed by the cohesiveness of the team i.e. the social engineering aspect of it. Also, how motivated and aligned every team member is towards the success of the project?
Wouldn't someone with listening impediment miss the core issues team members are grappling with? As a manager, one has to weed out all the team issues to make sure the team is aligned with one thing only - success of the project. And, one can only really do it if someone can listen, understand, judge and respond effectively.
Related Post
Tuesday, February 24, 2009
The Matrix Runs on Windows
Yes, for real :) Don't believe me? See it for yourself.
Wednesday, March 12, 2008
ASP.NET MVC vs. WCSF
I've been thinking about the best way of building enterprise web applications after creating few sample applications with both ASP.NET MVC framework and WCSF and if I was to look at from a holistic perspective, both the frameworks provide excellent separation of concerns thus enhancing the modularity and testability of the application yet there are differences in their approaches.
ASP.NET MVC provides a new ground-up framework for building web applications that doesn't uses the core ASP.NET framework concepts like PostBacks, ViewState, Code Behind etc. It really enforces the discipline of creating simiplistic views, which are dependent on a controller to handle user events and pass the model to it. It forces one to think of Views as a pure rendering mechanism and doesn't allow the developer to pollute the .aspx files with all the gobbledygook of interactions with services to build a page. It provides a very clean way of handling all the HTTP verbs and provides a pluggable architecture to inject components to handle those requests. All the HTTP calls are routed to a controller which decides the action i.e. method to invoke, gets the right model and passes it to View to render the data. One can build very clean REST based solutions by using ASP.NET MVC framework. To learn more about the framework, I would recommend reading Scott Guthrie's blog and viewing these videos.
WCSF on the other hand builds uses the existing ASP.NET Forms based framework and provides a pattern based approach of building applications. It has guidance bundles which provides the right solution and project structure, code generation recipes, out of the box integration with various application blocks like Security, Exception Handling and Logging. It also provides good separation of concerns by following the MVP design pattern. Thus, a developer doesn't have to learn new patterns of building web applications and can utilize all the core concepts of PostBack,ViewState etc. and on top of it is given pre-configured access to the Logging, Exception Handling and Authorization features.
IMHO, WCSF is a better option if one was looking at capitalizing on ASP.NET strengths and, standardizing web development practices. ASP.NET MVC framework provides utmost flexbiity in creating web solutions but it's a 180 degree change in the way we have been building ASP.NET web applications and I'm not even sure how would it pan out while building enteprise applications. In the coming days, I would publish a detailed comparison of both the technologies.
Monday, March 10, 2008
Starting out with Web Client Software Factory a.k.a WCSF
Lately, I've been completely submerged in Software Factories - WCSF and WSSF(Web Service Software Factory) and have come to like one of them, WCSF. I'm bit surprised about the fact that it hasn't caught on to lot of people's imagination albeit having lots of features to create ASP.NET web applications in a standardized way.
What it is?
It is designed to help one quickly and consistently create web applications that adhere to well known architecture and design principles and patterns. It is an integrated collection of VS.NET solution and project templates, various code recipes, design patterns and prescriptive guidance about creating large scale modular web sites. It synthesizes ASP.NET, ASP.NET AJAX, MVP Design Pattern, Application Blocks of Enterprise Library, Windows Workflow Foundation and VS.NET Solution templates and wizards to create these modular web sites.
Why should one care about it?
There are various reasons why one should care about the Client Software Factory but there are few that stand out -
- It provides a sound baseline for creating web applications which provides a mature web solution structure, out of the box integration with various application blocks like Security, Exception Handling and Logging and, good separation of concerns between layers(through Dependency Injection) thus improving the testability of the application.
- The Factory allows an organization to customize and extend the code recipes and templates to suit their architectural style.
What is the best way to get started?
The best way to get started on WCSF is to install it and go through the hands-on lab on codeplex. One needs the following before installing the client factory -
- Guidance Automation Extensions - This would enable the custom recipes of WCSF. Please install this before the GAT.
- Guidance Automation Toolkit (for VS 2005) - This would facilitate customizations. Please follow this link if you have VS 2008 installed
- Finally, install WCSF from here
Though there are lot of how-to articles and help on codeplex for WCSF but I've found David Hayden's Screencasts an invaluable resource in understanding WCSF. He has brief presentations covering various aspects of WCSF and I would highly recommend viewing all his screencasts before starting out.
Tuesday, February 12, 2008
Life is an Experiment
In the last few days, I've been doing lot of reading around how to blog effectively and have come across lot of interesting articles. Umm..., wouldn't it have been little better if I was doing more writing than reading? Anyways, I've read articles about blogging, making blogging a habit, how to attract visitors on your blog etc but I don't know how I landed on this J.D. Meier's article about Life. But, I'm thankful I did.
I had heard lot of interesting sayings like that "Life is a journey", "Life is a circle" etc. but never that "Life is an Experiment". What a profound statement! It truly defines us and accurately depicts the frailty of human nature. It lets us take our mistakes and shortcomings in our stride, allows us to be fallible and fills hope that someday we would be much closer to the person we want to be.