Category Archives: $h!nYz $p0t…

Internet News! Gmail Goofs up! Facebook with new feature…

Mad Day!

am sure at midnights, when you see a broken star! that day counts to be unusual day of your life…

Same way! internet had an unusual scene today!…

Gmail going down for a while, like real while and every thing goofed by that time… I saw a post that when you search Gmail in google, it brings up a link which has an EMAIL in it…  I couldn’t believe it as it’s one of the most secured service provides from internet world and goofing up with such mistake is not expected by Gmail.

but this is what I saw, when I myself search “Gmail” on

Gmail Down, goofed up with security


the email that you see in the image is a WORKING email of god know’s who from this website.

the best part was! (worst actually) that each refresh I did on google with Gmail as a keyword, it poped up a random email…(I was thinking if i could see my email there) 







From gizmodo’s blog post :

After connecting the dots, TechCrunch found out it belongs to one David S. Peck: the internet’s most popular inbox owner. He’s confirmed that he is indeed receiving thousands of emails, the majority of which are blank. According to TechCrunch:


I am sure this guy in my screenshot must have received the same…


But! let’s talk about the new buzz in Facebook!.

Facebook recently came with this new feature to which Facebook thinks that it’s the newest feature in the internet world!.. but actually they are walking way behind with this feature…

the feature is “trending” which originally is from Twitter! to which, facebook announced it’s release a week ago!

Trending feature in facebook

new feature in


This was actually announced in sept 2013 and since then was thinking of why are they taking so much of time to come up with this feature!

as the matter of fact, they had this HASHTAG feature out already! but was not at all in use as people who were talking in that TAG were just talking in that TAG and no one else was aware of the conversations going in there if they never knew it’s trending!


but now am sure! this TRENDING feature of facebook would at-least pull people to facebook to see what’s trending!…

yet! the filter option is not there! where you can filter the trends from specific area.. lot’s of updates on the way Facebook!…

I am once in a while writer! let’s see what’s next to post!..









Ways to get EXCITEMENT at WORK!

Before we get in to the ways of being EXCITED about our work or at work, let’s get in to a real case study from
childhood… YOUR CHILDHOOD.

I am sure you loved going school daily, no matter if you were a topper, a failure, a looser, a dumb/bimbo
or wat ever. But you LOVED GOING DAILY….

I remember my school days when i use to LOVE meeting my friends at school rather than getting excited
about my studies….

I was a failure and am sure MAXIMUM of my school friends would agree to it… (few won’t as they were
failures too :D)

however, the excitement of meeting friends did help me to stick to school and classes on daily basis.

So, let’s go to top 6 Reasons on why I loved going school DAILY???

  1. Get NOTICED :- Yes! I ain’t good looking, not that handsome, am DARK and ROWDY…. but I got noticed in school by many students and the reason behind that was my daily activities which helped me become a center of attraction. I was too notorious but good in co curriculum activities held in school. So the bottom line is, I was a performer.
  2. Co-Curriculum Activities :- One thing is so sure that pulled me to wake up early in mornings was the Co-Curriculum Activities held at school. It gave me excitement to perform, to become a part of team and give my best to get noticed.
  3. Students and Friends :- It’s quite important that you have mature and flexible nature team members so who can meet your chemistry. More important is, YOU HAVE TO MEET their requirements, their nature and their maturity to be one of them. Trust me this gives you 2 things; 1> you come to meet different personality people, 2> when you accept their nature and their personality; it makes you their close and most wanted friend.
  4. Teacher’s Threat:- I know, I know; students usually run away from those threats to be in their comfort zone; but trust me, facing them is altogether a different feeling and experience and also makes you scheduled and disciplined enough to be on time and on task and thus, it makes you get the end results.
  5. Stupid Games and Gigs :- I am damn sure you guys must have played pen fight, truth and dare, antakshari and lot many games in your class room, well even that was a spark to attract you towards being with your friends in school….
  6. Exams and Tests :- it was obvious, if you don’t attend your exams or tests, you fail in subjects, or fail in your final exams etc….. this gave you a fear of being out of your group if you fail in class or it gave you a fear of being 3rd or 5th or being a social outcast :D. Important is, you had a fear of failure which helped you upgrade your self … get end results.

Now remember one main thing out of all above, it was an indirect force which pulled me to school on daily.. Helped me gain knowledge.. helped me study in an environment. And of-course, upgraded me a lot…..

Okay!!! So, let’s get back to work….

Now, learning from your school, below are the things you can do to make your self excited @ work….. (trust me this will help you)

  1. Get NOTICED :- Let me tell you something, when people start talking about your performance is the time when you start getting NOTICED…  all you need to do is, be on your task, be on your toes, be the best to achieve it,,, and then; you are the HERO!! this keeps you excited about your work and your workstation…
  2. Company Activities :- usually companies do have some activities to get involved in, some of them don’t BUT…. it’s never to late; if their is no initiative for any happening activities at your company then you can always take a stance to initiate something that is happening and which can help you and others to be excited about the workstation….. 
  3. Team mates and Friends :- to jell up with your colleagues around is most important as because, if you are not casual and easy with your team members and your friends at work; you feel lonely which makes you a boar and an out caste member of a team…. Give you self a Go to understand people around, learn from them and be comfortable with them…. this will help you to learn and unlearn things, would give you a homely environment at workstation and would help you gain more relations around…. 
  4. Be Creative :- Once you have read above, do one thing, make a note in your mind that you have to do something new TODAY and make sure you LOVE IT…. no matter what is it,,,, but it has to be at your work station… for example, a note, a drawing, a song, a painting, something crazy or whatever… but get something NEW…this will help you brain storm a bit and would help your sleepy brains to do something new…
  5. Stupid Games and Gigs :- Never feel old, get on your desk, play pen fight, truth and dare, antakshari, dumb charades or wat ever makes you feel happy….. make sure you don’t hamper your work and play em all in your break timings… but… gaming daily is enjoying daily… 🙂 
  6. Exams and Tests :- It actually sounds boring when you have to test your self for all your capabilities and skills and etc… remember, Examination and test has no age to pass… even big bolly heroes do that,,, they watch their hit films and flop films to analyse what went wrong and what was so right about their movies… trust me if you analyse yourself, you are helping yourself to upgrade, to carry more skills, to be with time and trend….. 

So! guys…. these are my funds…. hope it helps you to gain excitement at your workstation….

Be Excited,,, Be Creative,,, Be Working….

Quotes by Steve Jobs…

  • “Sometimes when you innovate, you make mistakes. It is best to admit them quickly, and get on with improving your other innovations.”
  • “Being the richest man in the cemetery doesn’t matter to me … Going to bed at night saying we’ve done something wonderful… that’s what matters to me.”
  • “We’ve gone through the operating system and looked at everything and asked how can we simplify this and make it more powerful at the same time.”
  • “Be a yardstick of quality. Some people aren’t used to an environment where excellence is expected.”
  • “I want to put a ding in the universe.”
  • “I was worth over $1,000,000 when I was 23, and over $10,000,000 when I was 24, and over $100,000,000 when I was 25, and it wasn’t that important because I never did it for the money.”
  • “The Japanese have hit the shores like dead fish. They’re just like dead fish washing up on the shores.”
  • “Unfortunately, people are not rebelling against Microsoft. They don’t know any better.”
  • “Bill Gates‘d be a broader guy if he had dropped acid once or gone off to an ashram when he was younger.”
  • “The only problem with Microsoft is they just have no taste. They have absolutely no taste. And I don’t mean that in a small way, I mean that in a big way, in the sense that they don’t think of original ideas, and they don’t bring much culture into their products.”
  • “My job is to not be easy on people. My job is to make them better.”
  • “We made the buttons on the screen look so good you’ll want to lick them.”
  • “Click. Boom. Amazing!”
  • “You can’t just ask customers what they want and then try to give that to them. By the time you get it built, they’ll want something new.”
  • “Design is not just what it looks like and feels like. Design is how it works.”
  • “Why join the navy if you can be a pirate?”
  • “A lot of companies have chosen to downsize, and maybe that was the right thing for them. We chose a different path. Our belief was that if we kept putting great products in front of customers, they would continue to open their wallets.”
  • “Innovation distinguishes between a leader and a follower.”
  • “Recruiting is hard. It’s just finding the needles in the haystack. You can’t know enough in a one-hour interview.
  • So, in the end, it’s ultimately based on your gut. How do I feel about this person? What are they like when they’re challenged? I ask everybody that: ‘Why are you here?’ The answers themselves are not what you’re looking for. It’s the meta-data.”
  • “We’ve had one of these before, when the dot-com bubble burst. What I told our company was that we were just going to invest our way through the downturn, that we weren’t going to lay off people, that we’d taken a tremendous amount of effort to get them into Apple in the first place – the last thing we were going to do is lay them off.”
  • “I mean, some people say, ‘Oh, God, if [Jobs] got run over by a bus, Apple would be in trouble.’ And, you know, I think it wouldn’t be a party, but there are really capable people at Apple.
  • My job is to make the whole executive team good enough to be successors, so that’s what I try to do.”
  • “It’s not about pop culture, and it’s not about fooling people, and it’s not about convincing people that they want something they don’t. We figure out what we want. And I think we’re pretty good at having the right discipline to think through whether a lot of other people are going to want it, too. That’s what we get paid to do.
  • We just want to make great products. (I think he means “insanely great products!“)”
  • “So when a good idea comes, you know, part of my job is to move it around, just see what different people think, get people talking about it, argue with people about it, get ideas moving among that group of 100 people, get different people together to explore different aspects of it quietly, and, you know – just explore things.”
  • “When I hire somebody really senior, competence is the ante. They have to be really smart. But the real issue for me is, Are they going to fall in love with Apple? Because if they fall in love with Apple, everything else will take care of itself.
  • They’ll want to do what’s best for Apple, not what’s best for them, what’s best for Steve, or anybody else. (this actually reiterates my oft-repeated mantra of “ubiquitous evangelism” in companies)”
  • “People think focus means saying yes to the thing you’ve got to focus on. But that’s not what it means at all. It means saying no to the hundred other good ideas that there are. You have to pick carefully.”
  • “Our DNA is as a consumer company – for that inpidual customer who’s voting thumbs up or thumbs down. That’s who we think about. And we think that our job is to take responsibility for the complete user experience. And if it’s not up to par, it’s our fault, plain and simply.”
  • “That happens more than you think, because this is not just engineering and science. There is art, too. Sometimes when you’re in the middle of one of these crises, you’re not sure you’re going to make it to the other end. But we’ve always made it, and so we have a certain degree of confidence, although sometimes you wonder.
  • I think the key thing is that we’re not all terrified at the same time. I mean, we do put our heart and soul into these things.”
  • “We don’t get a chance to do that many things, and every one should be really excellent. Because this is our life.
  • Life is brief, and then you die, you know?
  • And we’ve all chosen to do this with our lives. So it better be damn good. It better be worth it.”
  • “Almost everything–all external expectations, all pride, all fear of embarrassment or failure–these things just fall away in the face of death, leaving only what is truly important. Remembering that you are going to die is the best way I know to avoid the trap of thinking you have something to lose. You are already naked. There is no reason not to follow your heart.”
  • “Here’s to the crazy ones, the misfits, the rebels, the troublemakers, the round pegs in the square holes… the ones who see things differently — they’re not fond of rules… You can quote them, disagree with them, glorify or vilify them, but the only thing you can’t do is ignore them because they change things… they push the human race forward, and while some may see them as the crazy ones, we see genius, because the ones who are crazy enough to think that they can change the world, are the ones who do.”
  • “In most people’s vocabularies, design means veneer. It’s interior decorating. It’s the fabric of the curtains of the sofa. But to me, nothing could be further from the meaning of design. Design is the fundamental soul of a human-made creation that ends up expressing itself in successive outer layers of the product or service.”
  • “So we went to Atari and said, ‘Hey, we’ve got this amazing thing, even built with some of your parts, and what do you think about funding us? Or we’ll give it to you. We just want to do it. Pay our salary, we’ll come work for you.’ And they said, ‘No.’ So then we went to Hewlett-Packard, and they said, ‘Hey, we don’t need you. You haven’t got through college yet.”
  • “The people who are doing the work are the moving force behind the Macintosh. My job is to create a space for them, to clear out the rest of the organization and keep it at bay.”
  • “Your time is limited, so don’t waste it living someone else’s life. Don’t be trapped by dogma – which is living with the results of other people’s thinking. Don’t let the noise of other’s opinions drown out your own inner voice. And most important, have the courage to follow your heart and intuition. They somehow already know what you truly want to become. Everything else is secondary.”
  • “I’m the only person I know that’s lost a quarter of a billion dollars in one year…. It’s very character-building.”
  • “I’m as proud of what we don’t do as I am of what we do.”
  • “Quality is more important than quantity. One home run is much better than two doubles.”
  • “I’ve always wanted to own and control the primary technology in everything we do.”
  • “It comes from saying no to 1,000 things to make sure we don’t get on the wrong track or try to do too much.”
  • “It’s really hard to design products by focus groups. A lot of times, people don’t know what they want until you show it to them.”
  • “Innovation has nothing to do with how many R&D dollars you have. When Apple came up with the Mac, IBM was spending at least 100 times more on R&D. It’s not about money. It’s about the people you have, how you’re led, and how much you get it.”
  • “Insanely Great!”
  • “I’m convinced that about half of what separates the successful entrepreneurs from the non-successful ones is pure perseverance.”
  • “It’s rare that you see an artist in his 30s or 40s able to really contribute something amazing.”
  • “I feel like somebody just punched me in the stomach and knocked all my wind out. I’m only 30 years old and I want to have a chance to continue creating things. I know I’ve got at least one more great computer in me. And Apple is not going to give me a chance to do that.”
  • “I didn’t see it then, but it turned out that getting fired from Apple was the best thing that could have ever happened to me. The heaviness of being successful was replaced by the lightness of being a beginner again, less sure about everything. It freed me to enter one of the most creative periods of my life.”
  • “Do you want to spend the rest of your life selling sugared water or do you want a chance to change the world?”
  • “The products suck! There’s no sex in them anymore!”
  • “The cure for Apple is not cost-cutting. The cure for Apple is to innovate its way out of its current predicament.”
  • “If I were running Apple, I would milk the Macintosh for all it’s worth — and get busy on the next great thing. The PC wars are over. Done. Microsoft won a long time ago.”
  • “You know, I’ve got a plan that could rescue Apple. I can’t say any more than that it’s the perfect product and the perfect strategy for Apple. But nobody there will listen to me.”
  • “Apple has some tremendous assets, but I believe without some attention, the company could, could, could — I’m searching for the right word — could, could die.”

How To Manage Multiple IT Projects

Hey Managers and “WANA BE” managers.. 🙂


Am up with something that every manage would look around for.. and that is HOW TO MANAGE MULTIPLE IT PROJECTS at the same time..

I look after sales, admin and also make sure that all my projects go well and deliver the actual quality my client looked for.. and at the end of the day; i leave myself exhausted as things do go well, but then i leave my place with lots of loose ends which makes me incomplete.

Thus, I thought to make formula which can make me feel better, reduces my workload and also helps me achieve all my company goals, client objectives and on time project completions.

We all know that most project managers are able to evaluate and scope a single project, plan the implementation, communicate with team members, and manage the risks. But the moment you start managing multiple projects simultaneously, the PM’s job takes on a new dimension. Problems arise because of an increase in responsibility, coordination, and additional teamwork needed.

So let’s look at some of the key challenges you face when managing multiple projects (this is what i faced and sure you people are facing the same).

Managing multiple IT projects within the enterprise can be a daunting task. In fact, many project managers say that they would gladly stay back to only one or two projects vs. managing multiple projects (THE LOOSERS). The reason is simple, Managing multiple projects is not suited for all. Experience do counts however, you even need to be choosy with equal speed of smartness! When looking at the single-project concept, the roles and responsibilities prove themselves substantially simpler than for larger projects. However, the larger the project, the more coordination and tracking are needed to ensure that project deliverables are met. You’ll undoubtedly have on average three to five team members on each project. If you have five projects going at once, you will have to manage 15–25 team members. This doesn’t even include the interaction between you and the client. The challenges here include:

  • Not enough visibility on the detail being performed by project teams (i.e., developers, testers, etc.).
  • Not enough time to attend to meetings and still track tasks and milestones (i.e., tight deadlines).
  • Managing multiple risks and resolving multiple issues.
  • Lack of experience in juggling multiple tasks and meetings (e.g., gets too crazy).
  • Limited resources within the resource pool.
  • Conflicting priorities among projects. (trust me when your objective oriented, you want all the projects to be in priority :D.. it happens with me all the time :D)
  • Integration of all projects and their target dates not always clear.
  • Communications among too many people affecting performance.

So for now, let’s look at the best techniques we can use to manage all our projects:


  • Managing time effectively

Mostly when manager are tied with multiple projects, they want to give their best quality output in every project and also they want to get the project done by the time given; however, they fail achieving it; reason behind the failure is the time management.

It’s an smart necessity for managers to delegate their time and plot it between the projects. but the question raises here is HOW to do that?

here is a simple formula we need to focus on:

    • To manage your time, you need to manage all your tasks accordingly. remember, it’s the only key to achieve a project completion with excellence.
    • it’s complex when you are not choosing the right resource for the right project (I know managers are chosen only when they know how to delegate the resources, but it’s a fact; they always fail in deligation). however, if you choose a right resource for a right task? it will always help you lower your burden, get a quality output with masters hands on the project.
    • Leveraging group skills or dynamics
  • Checklist for managing multiple projects: You should create a portfolio checklist for managing multiple projects. You could use a life-cycle checklist to help (e.g., Have I received all the specs? Have I involved QA on each project team?).
  • Prioritization of projects: You need to determine which projects are more important than the others. When faced with multiple projects, it’s important to decide what to do and in which order it gets done. It’s no use simply selecting any project you like and paying attention to that project alone. Careful analysis is needed to ensure that each project meets your company’s strategic objectives and that you are aware of target dates.
  • Categorize your work: This strategy reduces complexity. You have to make progress on all fronts when managing multiple projects. Don’t leave one until next week and expect results. Check the progress of each project on a daily basis.
  • Sequence work tasks: Ensure that for every project the tasks have been properly sequenced and that they make sense. I have seen managers run from project to project, grabbing at straws. It’s imperative that each project be clearly broken down into manageable tasks and that they be correctly sequenced.
  • Create a dashboard: ah. this is something that really helped me to workout with all my projects and also has given me the exact detail i needed quickly.

A recommended process
If you really want to make an impact when managing a portfolio of projects, you’ll need a method of prioritizing and categorizing all projects. Project Management Dashboard illustrates a process for managing multiple projects, and I’ve found that it works rather well. Based upon your available time and your current workload, prioritize each new project handed to you. This prioritization allows you to determine exactly when to start the project and how it affects your other project timelines. Assuming all is okay, you proceed to categorize the project tasks into categories (A, B, and C), which assist you in figuring out which tasks are more important than the others. Please note that other valuable techniques such as network diagrams or PERT charts could also be used, but I’ve found that a simpler way is most effective when managing multiple projects. These tasks are then captured into a centralized enterprise project tool such as these:

  • Kidasa Milestones Professional
  • Pacific Edge
  • PMOffice
  • Project Arena
  • WorkLenz

These are a few of the great tools to use for to use for tracking and coordination. After all, if a task does slip, you want it to be visible so you can inform the client about its impact to the project.


Project Management Dashboard

You should also:

  • Prioritize your projects according to the client’s business and IT strategies.
  • Rank all project tasks into A, B, and C categories.
  • Spend enough time and effort on tasks A for each project, and then proceed to categories B and C as deemed necessary (e.g., technical meetings or workshops).
  • Notify the client if you cannot meet a deadline or complete a task.
  • Capture all issues and risks into a centralized project database for efficient reporting.


It does not end here, there is lot more for me to explore in project management and if you have any valuable input to enhance the system followed, please send me a detailed email at, I would really appreciate it 🙂



Hellllooooo people..

It’s the time to provide tons of power and energy to rural children’s growth and to empower the nation to be a part of the cause which can give a better future to our INDIA.

The Vidya Mandir has taken a step ahead to envisage the citizens and raise funds for rural children.

The Event is organized by Pinakin Sages, one of the leading Event & Entertainment Companies in Ahmedabad and it will cover the following areas of Ahmedabad (Image Given Below)

My Dear Aamdavadi friends, your heartily invited to participate in the Marathon which is on 26th of January 2011.  For more information on enrollment, please call Vaibhav Sharma at +91 9601502221.

Chalo toh Amdavadi mitro.. malye marathon maaa. 🙂 😀 😎

WARNING :- Don’t Miss it…

Setting Up Smart Objectives.

Nothing happens until we plan and good plans have goals and objectives.  Setting goals and objectives correctly provides the necessary support and aids in there achievement. Before we dive into how to go about setting SMART objectives, it’s important to understand that there is a world of difference between goals and objectives.

  • Goals relate to our aspirations, purpose and vision. For example, I have a goal of becoming financially independent.
  • Objectives are the battle plan, the stepping stones on the path towards the achievement of my goal.

A goal may have one or many objectives that would need to fulfilled to achieve the goal. For example, to become financially independent I would need to

1) get out of debt,

2) improve my saving and

3) start a business.

The most well known method for setting objectives is the S.M.A.R.T. way, the SMART approach is well understood amongst managers, but is poorly practiced. S.M.A.R.T refers to the acronym that describes the key characteristics of meaningful objectives, which are Specific (concrete, detailed, well defined), Measureable (numbers, quantity, comparison), Achievable (feasible, actionable), Realistic (considering resources) and Time-Bound (a defined time line). Lets look at these characteristics in more detail.

SMART objective are the stepping stones towards the achievement of our goals……


Specific means that the objective is concrete, detailed, focused and well defined. That is the objective is straightforward, emphasizes action and the required outcome. Objectives need to communicate what you would like to see happen. To help set specific objectives it helps to ask the following questions:

  • WHAT am I going to do? This are best written using strong, action verbs such as conduct, develop, build, plan, execute, etc. This helps your objective to be action-orientated and focuses on what’s most important.
  • WHY is this important for me to do?
  • WHO is going to do what? Who else need to be involved?
  • WHEN do I want this to be completed?
  • HOW am I going to do this?

“The successful man is the average man, focused.” – Unknown

Diagnostic Questions

  • What exactly are we going to do, with or for whom?
  • What strategies will be used?
  • Is the objective well understood?
  • Is the objective described with action verbs?
  • Is it clear who is involved?
  • Is it clear where this will happen?
  • Is it clear what needs to happen?
  • Is the outcome clear?
  • Will this objective lead to the desired results?


Objectives need to be achievable, if the objective is too far in the future, you’ll find it difficult to keep motivated and to strive towards it’s attainment. Objectives, unlike your aspirations and visions, need to be achievable to keep you motivated. Whilst being obtainable, objectives still need to stretch you, but not so far that you become frustrated and lose motivation.

Diagnostic Questions

  • Can we get it done in the proposed timeframe?
  • Do I understand the limitations and constraints?
  • Can we do this with the resources we have?
  • Has anyone else done this successfully?
  • Is this possible?


Objectives that are achievable, may not be realistic….. however, realistic does not mean easy. Realistic means that you have the resources to get it done. The achievement of an objective requires resources, such as, skills, money, equipment, etc. to support the tasks required to achieve the objective. Most objectives are achievable but, may require a change in your priorities to make them happen.

Diagnostic Questions

  • Do you have the resources available to achieve this objective?
  • Do I need to revisit priorities in my life to make this happen?
  • Is it possible to achieve this objective?


If the objective is measurable, it means that the measurement source is identified and we are able to track the results of our actions, as we progress towards achieving the objective. Measurement is the standard used for comparison. For example, what financial independence means to me, may be totally different compared to what is means for you. As is so often quoted, if you can’t measure it, you can’t manage it! Importantly, measurement help us to know when we have achieved our objective.

Diagnostic Questions

  • How will I know that the change has occurred?
  • Can these measurements be obtained?


Time-bound means setting deadlines for the achievement of the objective. Deadlines create the all important sense of urgency. If you don’t set a deadline, you will reduce the motivation and urgency required to execute the tasks. Deadlines create the necessary urgency and prompts action.

Diagnostic Questions

  • When will this objective be accomplished?
  • Is there a stated deadline?

“There’s a difference between interest and commitment. When you’re interested in doing something, you do it only when circumstance permit. When you’re committed to something, you accept no excuses, only results.”

If you are an entrepreneur, what are your new year resolutions?

New Year Resolution for an Entrepreneur

the below lines inspired me when i was reading Inside Steve’s Brain…

“Your time is limited, so don’t waste it living someone else’s life. Don’t be trapped by dogma – which is living with the results of other people’s thinking. Don’t let the noise of other’s opinions drown out your own inner voice. And most important, have the courage to follow your heart and intuition. They somehow already know what you truly want to become. Everything else is secondary – Steve Jobs”

Bring Discipline.

I have always failed in being disciplined, it’s tough and it makes you feel tied with something that you wana be free from… when you are building a business, it’s tough as you need to take the responsibilities for many things around and when you are a boss, one of the challenges for you is the lack of a boss. If you have nobody to report to, you are free to define your working hours, holiday seasons etc. Unless you are building a lifestyle business, this is a no-no for the high impact entrepreneur.

Discipline is the key and define 2011 to be the year when you will chose to get disciplined.

[Collaboration] Stand for We.

Collaboration is the key and even earlier, Given the limited resource you will have (unless extravagantly funded), share your technology with others. Leverage other’s channel/technology, if you can.

[Lean] Release Early – Release Often

it’s important though tough to define the balance between perfection and speed. Do not wait till eternity to release the perfect product, yet do not launch a half-baked product. Even if you have earlier committed the crime of launching a half-baked product earlier, start afresh and focus on the core.

[ Funding] A Milestone or End of the Journey?

For some reason, a lot of Indian entrepreneurs believe that funding is the first sign of success. Sometimes startups reach out to angel investors, even before they have a concrete idea.

Well, no gyaan here as even i think thought of the same stuff in my early entrepreneur’s day but raise funds only when you have to. But first, focus on building a great business – at least do a Proof of Concept (PoC), before you start fund raising activity (will take anywhere between 2 months to 8 months and might end up spending the entire of 2011 chasing the sun).

[Hypothesis] Try, Fail, Modify, (Re)Validate

As we enter a new era (plus a lot of hype) of lean startups/products, I’d recommend startups to validate their hypothesis with simple PoCs before they actually start building a mammoth product. And once you have identified the gap, don’t be lean for the sake of it. Get to the real meat when it comes to the feature sets and keep trying unless you attend product/market fit.

Read: Groupon Story – WordPress Blog to Billion Dollar Company

[Delivery] Be Awesome

Awesomeness is in the delivery. Awesomeness is in the user experience. As more startups continue to target niche gaps, quality of service/offering will be the key. An entrepreneur I know calls himself ‘Chief Awesomeness Officer’ – before every decision, he’d ask ‘Is this going to be an awesome thing to do?’,

[Metrics] What Matters

Doesn’t matter if you are a solo-preneur or have a 10 plus team, define metrics of your success.  What is important to measure? How do you measure that?

Define metrics for the team as well. How do you build a culture of individual performance that leads to the collective win?

Start Selling

If you are a geeky entrepreneur, stop coding. Stop waiting for the perfect product.
Start selling. Meet lots of sales guys. Meet marketing fellas. If you attend any event, do not get into your comfort zone (i.e. end up meeting the same old geeky friends), instead meet new guys.
And if you are an entrepreneur from marketing/sales background, get to know the engineering behind products. Get into the depth of ‘what does it take to build great products’. Helps in selling the product.

2011 is beginning of a new decade (which ends with the famous 2020) and unless you are a believer in Mayan prophecy, this is the year to make awesomeness.

Again, we wish you a happy new year 2011 and will be your friend in the journey.

If you are an entrepreneur, what are your new year resolutions?

The Power Of Joint Ventures…

I mentioned previously that to be successful, we need to build social networks and partnerships that will provide mutual benefit. One such arrangement is a joint venture. This is specifically a partnership between two or more people, where the combination will result in benefit to both parties.

Usually the two (and sometimes more) businesses in the joint venture will have a similar target market. They will complement each other in the provision of services to the customers. The common ground of customers that they attract means referrals either way resulting in more sales. This is a very powerful tool which should be utilised in marketing.

What are the benefits of setting up a joint venture? This can be illustrated in examples of joint ventures which we commonly see in our malls and shopping complexes.

A one stop shop for home appliances could work with a supermarket and occupy neighbouring areas in a mall. This arrangement within shopping complexes is quite common. Those buying kitchen appliances could buy groceries at the same time, and those who buy foodstuffs could buy kitchen appliances.

They share rent, and any promotions such as cooking shows will help both businesses with the sales. They share costs of these common sales pitches. This would encourage mutual help between both companies. The tag team of sales and promotions will boost each other’s morale. Cost of advertising is also reduced.

This can be taken a step further. They could help each other in promotions of products. The supermarket may have a special on meats and provide discount vouchers for roasting pans which can be purchased next door. And buy a barbecue set and you might be offered a supermarket voucher which is redeemable.

The partner is verifying by their actions that they recommend to their customers the other company, and vice versa. They could identify any referred sales and pay out a percentage as commission.

Another well known joint venture is cinemas (or any other showgrounds such as stadiums) and foodstalls. The food-stalls sell souvenirs and movie paraphernalia, while before each movie screening, advertisements of ice-creams and popcorn appear. Customers also benefit by having entertainment and food at their convenience.

I recently witnessed another joint venture in action at a shopping complex. The car park provider teamed up with a car washing company. While people parked their cars, they could have their car washed and waxed all in the time the customers go shopping. This would be a worthwhile partnership as customers would prefer to visit that particular car park to get their cars cleaned. The car washing company benefits with having a portion of the car park customers paying them for their services.

These examples illustrate the power of setting up joint ventures. There is minimal cost required when two companies which provide services complimenting each other become partners. The joint ventures possible are limitless, and this simple idea could generate multiple sales and significant profits.

Think about this concept which can make you rich. To your success.

Treasure BOOKMARKS for Entrepreneur

Hi Folks,,,
Got some important stuff for all upcoming business tycoons. this is real TREASURE for all of you.
Got some Bookmarks, treasure for me.. hope it ll help you all as well.
check them all below.

General Startup Advice

The Idea

Product Strategy

Running The Company

Startup Culture

Assembling Your Team

Sales & Marketing

Business Model & Monetization

Venture Capital, Funding & Equity




The Principles of Separation of Concerns

was going through one of the best articles on SOC (Separation of concerns) by Derek Greer which defined the finest way of separating the concerns to aid the software engineers to develop the maintainable system.

(Below is the copied version of article)

The Principle of Separation of Concerns

The Principle of Separation of Concerns states that system elements should have exclusivity and singularity of purpose. That is to say, no element should share in the responsibilities of another or encompass unrelated responsibilities.

Separation of concerns is achieved by the establishment of boundaries. A boundary is any logical or physical constraint which delineates a given set of responsibilities. Some examples of boundaries would include the use of methods, objects, components, and services to define core behavior within an application; projects, solutions, and folder hierarchies for source organization; application layers and tiers for processing organization; and versioned libraries and installers for product release organization.

Though the process of achieving separation of concerns often involves the division of a set of responsibilities, the goal is not to reduce a system into its indivisible parts, but to organize the system into elements of non-repeating sets of cohesive responsibilities. As Albert Einstein stated, “Make everything as simple as possible, but not simpler.”

At its essence, Separation of Concerns is about order. The overall goal of Separation of Concerns is to establish a well organized system where each part fulfills a meaningful and intuitive role while maximizing its ability to adapt to change.

The Value of Separation of Concerns

Applying the principle of separation of concerns to software design can result in a number of residual benefits. First, the lack of duplication and singularity of purpose of the individual components render the overall system easier to maintain. Second, the system as a whole becomes more stable as a byproduct of the increased maintainability. Third, the strategies required to ensure each component only concerns itself with a single set of cohesive responsibilities often result in natural extensibility points. Forth, the decoupling which results from requiring components to focus on a single purpose leads to components which are more easily reused in other systems, or different contexts within the same system. Fifth, the increase in maintainability and extensibility can have a major impact on the marketability and adoption rate of the system.

The principle of separation of concerns can also be of benefit when applied to business organizations. Within large companies, ensuring that groups and sub-organizations are assigned a unique set of cohesive responsibilities helps to facilitate overall business goals by minimizing the coordination necessary between teams and maximizing the potential of each team to focus on their collective responsibility and center of competency.

The principle of separation of concerns can also improve problem resolution in enterprise wide systems. When responsibilities are properly delineated, problem identification becomes easier, resolution becomes faster, and personal accountability is increased. Each of these areas in turn contributes to an improved quality control process.

Whether organizations of people or software systems are in view, applying the principle of separation of concerns can aid in the management of complexity by eliminating unnecessary duplication and proper responsibility allocation.

In the next sections, various techniques will be discussed for achieving separation of concerns within application design.

Horizontal Separation

Horizontal Separation of Concerns refers to the process of dividing an application into logical layers of functionally that fulfill the same role within the application.

One common division for graphical user interface applications is the separation of processes into the layers of Presentation, Business, and Resource Access. These categories encompass the main types of concerns for most application needs, and represent an organization of concerns which minimizes the level of dependencies within an application. Figure 1 depicts a typical three-layered application:

Figure 1

The Presentation Layer encompasses processes and components related to an application’s user interface. This includes components which define the visual display of an application, and may include advanced design concepts such as controllers, presenters, or a presentation model. The primary goal of the Presentation Layer is to encapsulate all user interface concerns in order to allow the application domain to be varied independently. The Presentation Layer should include all components and processes exclusively related to the visual display needs of an application, and should exclude all other components and processes. This allows other layers within the application to vary independently from its display concerns.

The Business Layer encompasses processes and components related to the application domain. This includes components which define the object model, govern business logic, and control the workflow of the system. The business layer may be represented through specialized components which represent the workflow, business processes, and entities used within the application, or through a traditional object-oriented domain model which encapsulates both data and behavior. The primary goal of the Business Layer is to encapsulate the core business concerns of an application exclusive of how data and behavior is exposed, or how data is specifically obtained. The Business Layer should include all components and processes exclusively related to the business domain of the application, and should exclude all other components and processes.

The Resource Access Layer encompasses processes and components related to the access of external information. This includes components which interface with a local data store or remote service. The
goal of the Resource Access Layer is to provide a layer of abstraction around the details specific to data access. This includes tasks such as the establishing of database and service connections, maintaining knowledge about database schemas or stored procedures, knowledge about service protocols, and the marshalling of data between service entities and business entities. The Resource Access Layer should include all components and processes exclusively related to accessing data external to the system, and should exclude all other components and processes.

Another common division used by Service Oriented Applications is the division of the application into the layers of Service Interface, Business, and Resource Access as depicted in Figure 2:

Figure 2

In this division, the Business and Resource Access layers serve the same purposes as previously discussed, with the service exposure concerns encapsulated into a Service Interface Layer. This layer encompasses service interface concerns such as the exposure of business processes through various protocols and the management of service specific contracts and data types. The primary goal of the Service Interface Layer is to encapsulate all service interface concerns in order to allow the application domain to be varied independently. The Service Interface Layer should include all components and processes exclusively related to the exposure of the application as a service, and should exclude all other components and processes.

By grouping processing concerns based on their role within the application, a number of benefits are gained which improve the overall system manageability. These benefits include ease of maintenance through consistent architecture and isolation of process, increased insulation from change impact, increased adaptability to change, and increased potential for reuse.

Vertical Separation

Vertical Separation of Concerns refers to the process of dividing an application into modules of functionality that relate to the same feature or sub-system within an application. Vertical separation divides the features of an application holistically, associating any interface, business, and resource access concerns within a single boundary. Figure 3 depicts an application separated into three modules:

Figure 3

Separating the features of an application into modules clarifies the responsibly and dependencies of each feature which can aid in testing and overall maintenance. Boundaries may be defined logically to aid in organization, or physically to enable independent development and maintenance.

Logical boundaries imply the existence of modularity, though the methods used to denote separation may have no bearing on the actual deployment or runtime behavior of an application. This can be useful for improving the maintainability of an application as well easing any future efforts for physically separating features. Figure 4 depicts an application containing logical boundaries:

Figure 4

Physical boundaries are generally used in the context of developing add-ins or composite applications, and can enable features to be managed by disparate development teams. Applications supporting add-in modules often employ techniques such as auto-discovery, or initializing modules based on an external configuration source. Figure 5 depicts a hosting framework containing modules developed by separate development teams:

Figure 5

While vertical separation groups a set of concerns based on their relevance to the total fulfillment of a specific feature within an application, this does not preclude the use of other separation of concerns strategies. For example, each module may itself be designed using layers to delineate the role of components within the module. Figure 6 depicts an application using both horizontal and vertical separation of concerns strategies:

Figure 6

Aspect Separation

Aspect Separation of Concerns, better known as Aspect-Oriented Programming, refers to the process of segregating an application’s cross-cutting concerns from its core concerns. Cross-cutting concerns, or aspects, are concerns which are interspersed across multiple boundaries within an application. Logging is one example of an activity performed across many system components.

Figure 7 depicts an application with several cross-cutting concerns:

Figure 7

Cross-cutting concerns can be difficult to maintain due to their widespread placement throughout an application. Their mixture with core concerns also adds complexity, rendering the application more difficult to maintain. By separating these concerns, both core concerns and cross-cutting concerns are made easier to manage.

Aspect separation differs from other separation techniques in that it relies on a pre-processing, compile time, or run-time fusion of cross-cutting concerns with the application. The process of fusing the two concerns back together is referred to as “weaving”. By using various strategies, cross-cutting concerns can be separated and woven back into the application for run time cohesion.  Aspect separation tools are available for a wide range of programming languages. For more information on this topic including a list of available tools for facilitating aspect separation see  Aspect-Oriented Programming.

Dependency Direction

One characteristic of good Separation of Concerns is the ideal establishment of dependency direction. An ideal dependency direction establishes the roles of consumer and dependency such that the role of dependency is occupied by the entity possessing the highest potential for reuse.

A simple example illustrating the concept of dependency direction is the common relationship between a business component and a utility component. Consider a system which provides an order inquiry process which requires that frequently requested data be cached for greater efficiency. To facilitate the caching of order inquiries, a caching utility component may be developed to separate the concerns of caching from the rest of the order inquiry process. Figure 8 depicts this system with its two components:

Figure 8

Because the function of caching is a more generic behavior than an order inquiry process, the caching component has the higher potential for reuse among the two. Therefore, the best dependency direction in this case would be from the business component to the utility component. This dependency is depicted in Figure 9:

Figure 9

Such a relationship allows the caching component to remain agnostic of the business inquiry process enabling it to be reused by future processes.

Data Concerns

Applying the principle of Separation of Concerns to data involves properly modeling information managed by a system. While the aspects of data modeling apply to both object-oriented and database design, this discussion focuses on object-oriented data concerns since the primary needs of a database often require form to follow function.

When organizing data within an object-model, the exposed information should be inherent to the entity being represented. For example, given a system which sells products to customers, an object which defines the product should not contain customer related information. This is because products are not inherently concerned with who may be purchasing the product. A better approach would be the creation of a conceptual order object which composes both customer and product information. This enables the product object to be reused by other processes in the future which may not be concerned with customer information.

In addition to considering the potential reuse of a data model within differing contexts, the
intuitive organization of data is also beneficial when maintaining highly complex systems. For example, if a new developer were tasked with accessing the serial number of a particular part composed by a product object already in memory, the developer would likely first attempt to locate the particular product part and then examine the part for a “SerialNumber” or similarly named property. The developer would probably not think to look for something such as a “product number to serial number” dictionary located on the product object because this would not be a natural representation of the data. This would be similar to considering a person to have a serial number by virtue of their wearing a wrist-watch that possessed a serial number.

There are times, however, when the natural organization of data does not present an efficient mechanism for information inquiry. For example, an exceptionally complex product object which needs to be inspected frequently to derive the total count of all copper elements may not be efficiently handled through the examination or cross-referencing of each of its composed elements. In cases where natural modeling is not itself sufficient, the integrity of an object-model can be maintained by supplementing conceptual types to satisfy the specialized need. For example, if the product’s composition remains static once assembled, a conceptual model representing the product’s precious metal information (e.g. “ProductPreciousMetalManifest”) might be composed at a peer level to the product information. If the product’s composition changes frequently and the composition processes are centralized then the precious metal information might be updated as part of this process. Otherwise, a specialized component could be conceived (e.g. “PreciousMetalDetector”) to dynamically return the product’s precious metal information. As with the first example, the benefits of separating conceptual needs from an otherwise natural model are that other processes may reuse the model without incurring the overhead of non-inherent characteristics, and the model is kept easily maintainable.

Behavior Concerns

Separating behavior involves the division of system processes into logical, manageable, and reusable units of code. This represents the most fundamental type of Separation of Concerns. Within object-oriented systems, fine-grained behavior is separated using methods while course-grained behavior is separated using objects, components, applications, and services.

As with the separation of data, encapsulated behavior should be inherent to its containing boundaries. For instance, a method named CreateCustomer() would be expected to only contain behavior relevant to the creation of a new customer. It wouldn’t be expected to, for example, place orders for a new customer. Similarly, a component named ProductAssembler would be expected to contain data and behavior relevant to the assembly of products. Similarly, it wouldn’t be expected to contain data or behavior related to customers.

Achieving good separation of behavior is often an iterative process. The primary behavior of a system is generally conceived during a design phase, but the specific implementation of a system design often requires several iterations of refactoring as fine-grained concerns become more apparent.

When organizing behavior, the following goals should be sought:

* Eliminate the duplication of functionality.
* Restrict the scope of work to a maintainable size.
* Restrict the scope of work to the description of the containing boundary.
* Restrict the scope of work to the inherent behavior of the containing boundary.
* Minimize external dependencies.
* Maximize the potential for reuse.

Extending Concerns

Extensions are a separation of concerns strategy which enables the addition of new behavior to an existing set of concerns. Extensions are used to enhance existing concerns where the desired behavior cannot be added to the targeted system, is not an inherent behavior of the system, or is otherwise impractical for inclusion as part of the system’s core set of features. Figure 10 depicts the dependency relationship of an extension to a target system:

Figure 10

Extensions interact with the target system in response to notifications of key events. Examples of behavior provided by extensions would include the display of new views or controls, the alteration of normal processing, or the alteration of data within the target system. Extensions generally take the form of a hosted add-in, and are typically registered through configuration or a dynamic discovery process.

When multiple client applications are maintained within an enterprise, it may be discovered that behavior provided by one client’s extension would be valuable to add to another client as well. If the extension is highly customized to the target application and provides a relatively simplistic behavior, the best course of action would be to reproduce the functionality in the new application. However, if the extension’s behavior is substantial in size and complexity then it may be more appropriate to provide the behavior generically through an enterprise service. If the behavior provided by the service is still inappropriate to include as a core dependency of the host system then a new extension can be developed to interact with the service on behalf of the application.

Delegating Concerns

Delegating concerns refers to the process of assigning the responsibility for fulfilling behavior to a subordinate component. This strategy separates the concerns of responsibility from execution, and is beneficial for designing components whose implementation details may vary depending on external conditions. Using this strategy, components proxy some or all data requests and method invocations to another component designed to fulfill the request in a specialized way. For example, a component designed to return a list of roles assigned to the current user may delegate the request to one or more subordinate components designed to retrieve roles from a local XML file, database, and/or a remote service. Figure 11 illustrates the delegation of authorization concerns to components specialized for differing data sources:

Figure 11

Delegation can be facilitated using the Strategy Pattern, the Plug-in Pattern, the Microsoft Provider Model, and other variant patterns which enable portions of a component’s behavior to be fulfilled externally.

Inverting Concerns

Inverting concerns, better known as Inversion of Control, refers to the process of moving a concern outside of an established boundary. Some uses for inversion of concerns include effecting aspect separation, minimizing non-essential processes, decoupling components from specific abstraction strategies, or relocating responsibilities to infrastructure components. Some specific applications would include alleviating responsibilities pertaining to hardware interaction, work-flow management, registration processes, or obtaining dependencies.

Figure 12 depicts an inversion of concerns process where both a presentation component and a domain component have had concerns moved to infrastructure level components:

Figure 12

One example where inversion of concerns can be seen is in the use of the Template Method pattern. This pattern is used to generalize the behavior of a process in order to allow variation through inheritance. When applying this pattern to an existing component, the steps performed by the desired process would be generalized and encapsulated in a base class. The existing component would then inherit from the new base class, maintaining only specialized behavior. Other types would then be free to inherit from the base class to provide variant implementations. This would be an example of inverting the concerns of an algorithm sequence.

Another example of inverting concerns can be observed when converting an interactive console application to a GUI application. A typical interactive console application provides a main loop which prompts the user for information and waits for data to be entered. When converted to a GUI application, the main control of the program is generally provided by infrastructure components, and notification of user interaction is accomplished using the Observer Pattern. This inverts the main control of the user interaction process by relying on the application infrastructure or hosting environment for these concerns.

Dependency Injection is a term applied to the inversion of concerns which relate to obtaining external dependencies. This term was conceived to more clearly describe the behavior of a class of frameworks concerned with this form of inversion. The goal of dependency injection is to separate the concerns of how a dependency is obtained from the core concerns of a boundary. This improves reusability by enabling components to be supplied with dependencies which may vary depending on context.

The process of dependency injection generally involves the roles of container, dependency, and recipient.

The role of container is occupied by a component responsible for assigning dependencies to a recipient component. Containers are generally implemented using the Factory Patternto allow creation of the recipient and dependency components.

The role of dependency is occupied by the resource being provided to the recipient. Containers are often implemented to allow existing objects to be registered for use as a dependency, or to create new instances when required.

The role of recipient is occupied by the component receiving a dependency from the container. Recipients are required to declare dependencies using a strategy supported by the container. Strategies for determining dependency information generally employ the use of reflection to examine one or more of the recipient’s member types, and may require the use of attributes/annotations to implicitly or explicitly specify dependencies. A sequence diagram representing these roles is presented in Figure 13.

Figure 13

One example use of dependency injection would be to abstract caching functionality from a business component in lieu of using the Factory or Factory Method patterns. By supplying a recipient with a caching component using dependency injection, the recipient remains loosely coupled to the caching component without the added coupling to a specific factory.

Another example would be the use of dependency injection to control the number of caching components created in lieu of using the Singleton Pattern. This enables the application to ensure that only a single instance is used throughout the lifetime of an application, or to control which recipients receive which instances of the component. This also increases the ability to test components in isolation of their dependencies by enabling mock dependencies to be supplied rather than requiring singletons to be tested along with their consumers.

Components using patterns such as FactoryFactory MethodAbstract FactorySingleton,Plug-inService Locator to abstract the concerns of object creation or dependency retrieval are good candidates to consider for supplementing or replacement with dependency injection. By using dependency injection in lieu of, or in cooperation with these and other such patterns, consuming components can be completely abstracted from the particular abstraction strategy.

The Exaggeration Exercise

It is often the case that the negative consequences of a design choice, particularly those relating to scalability and reuse, do not become apparent until long after a system has become established. Problems with scalability and reuse are usually rooted in a lack of adherence to the principle of Separation of Concerns. One process that can aid in optimizing concerns is considering the impact of a design when applied under exaggerated circumstances. Through this exercise, the use of a system is hypothetically exaggerated beyond the system’s known expectations in order to reveal potential weaknesses in a design approach. For example, when designing an object model to be used by two existing systems, one might consider what the consequences would be if the object model were shared by fifty systems. By exaggerating the use of a design, poorly organized responsibilities will often become easier to identify.

To demonstrate this exercise, consider the following example concerning the creation of a new composite customer relationship management system:

Within a corporation, an IT department has been requested to create a custom CRM application which will allow disparate development teams to contribute specialized modules of functionality. The main customer related segments within the corporation will be sales, billing, and technical support, though there may be multiple development teams assigned to support the functions of each segment. It has been requested that the application present a main screen allowing customers to be queried by a number of different criteria including name, address, phone number, order number, and any registered product serial numbers. However, the resulting views and workflows should depend upon which business function is being carried out at a given time. For example, upon submitting customer search criteria, sales users may be displayed with a view pertaining to past purchasing trends, credit rating scores, and suggested up-selling scripts; while a billing user may be presented with a view displaying customer payment history, billing dispute history, and outstanding balances. An initial analysis reveals that there will be a total of three workflow variations resulting from a total of five different search criteria fields, and that there will be three backend systems involved in obtaining the information needed by all segments. Because the variations are low, the choice is made to centralize the main view, customer search functionality, and workflow initiation within a search module. It is understood that the addition of new search criteria and workflow needs will require modifications by the search module development team, but it is believed that these needs will be infrequent.

Applying the exaggeration exercise to this design choice might entail considering what consequences might ensue if the number of business segments or number of backend systems were increased to fifty. As a result of centralizing the search functionality and workflow initiation, increasing the scope of these concerns will also increase the responsibility and workload of the search module development team. This would include the scoping, analysis, design, coding, and testing of all new features and change requests related to these concerns. In turn, this would likely result in the need to increase the number of development resources required for the search module team. It is also likely that the same initial assumptions that lead to the consolidation of these concerns also informed other design decisions made for the search module. This may have led to design choices that would not readily accommodate such an increase in responsibilities, requiring some level of internal redesign to handle new concerns.

An outstanding problem that can be observed through this exercise is that the amount of work required by the search team is proportionally related to the number of business segments or workflows supported by the system. The fact that the initial solution doesn’t scale as the need increases can be an indication that concerns may have been inappropriately distributed throughout the system. The decision for consolidating search functionality and the resulting workflow decisions within the search module was the result of recognizing similarities between each use case. What was not given equal consideration was the fact that each use case had to be treated in a specialized way, and the fact that the number of possibilities has no true boundaries. Because the search screen provides a central function for many modules, it can be said to possess inherent infrastructure concerns. It should, therefore, be expected to provide the behavior that is common to all modules. However, the details of each case are not common, and can be considered the inherent concerns of each respective module. Upon recognizing the inherent responsibilities, an alternate approach might include the development of a framework to consolidate the common concerns, but enabling the distribution of each domain specific concern. Such an approach could be accomplished by requiring each module to provide an add-in which registers available search criteria and provides handling capabilities to invoke the corresponding workflow. A framework would then be responsible for presenting a consolidated view of the search criteria, and providing a generic infrastructure for associating each search criteria to its corresponding workflow handler. By using this approach, the search module can be designed to accommodate an unlimited number of use cases.

While the exaggeration exercise can be useful in creating highly scalable designs, this is only a byproduct of its primary goal which is the achievement of optimal Separation of Concerns. The exaggeration exercise might be compared to the medical practice of taking a patient’s temperature to test for symptoms of a possible underlying problem. This exercise attempts to identify problems pertaining to separation of concerns by examining the scalability aspect of a potential design. This might be compared to using a magnifying glass to look at the details of a design as depicted in Figure 14.

Figure 14

It is through the exaggeration of a design’s actual scope that small problems are magnified for easier identification. Once identified, it may then be determined what course of action should be taken.

Separation Anxiety

Applying the principle of separation of concerns often involves advanced concepts and constructs which bring a certain level of complexity to the application beyond that of merely addressing the domain concerns of the application. For developers inexperienced in these programming techniques the reaction falls within the spectrum of enthusiastic excitement over the opportunity to add to one’s repertoire of design skills, and an adverse reaction to the additional amount of complexity involved in getting the job done in the most expedient way possible. These techniques often lead inexperienced or more tactical-minded developers to characterize such designs as “overly-complex” or “over-engineered” based upon their frustrations in first learning, and then maneuvering through such architectures on a day-to-day basis. Furthermore, there is often an ever-present pressure from project managers, product managers, upper level management, marketing, or end users for instant gratification which tends to encourage and reward expediency over thoughtful design. These conditions can present obstacles to developing good designs beyond merely solving the technical problems.

While designs which promote separation of concerns often add complexity to an application, it should be pointed out that they also remove the complexity that is generally associated with a lack of separation of concerns. For many applications, the trade-off is often between ordered complexity and disordered complexity. Applications which do not exhibit an appropriate amount of separation of concerns are often difficult to learn due to the need to understand the whole before understanding the part, and difficult to maintain and extend. Highly complex, yet poorly modularized applications also have the effect of causing high turnover in development staff (which tends to further compound design and implementation problems), or attracting individuals who have an aversion to change and seek to build their career by being the indispensible “master of the maze” within their organization. Development teams should certainly not seek complexity for complexity’s sake (unless entering an obfuscation contest), but the notion that avoiding advanced design concepts equates to avoiding complexity should be dispelled.


Put simply, the goal of the principle of separation of concerns is order. By ensuring elements within a system adhere to a single and unique purpose, complex systems can be designed which maximize productivity and maintainability.