Total Pageviews
Thursday, February 14, 2013
Suggest a camera within a budget of Rs 30,000
Tuesday, June 7, 2011
17 Tips To Double Your Productivity In 14 Days
17 Tips To Double Your Productivity In 14 Days
1. Turn off all technology for 60 minutes a day and focus on doing your most important work.
2. Work in 90 minute cycles (tons of science is now confirming that this is the optimal work to rest ratio).
3. Start your day with at least 30 minutes of exercise.
4. Don’t check your email first thing in the morning.
5. Turn all your electronic notifications off.
6. Take one day a week as a complete recovery day, to refuel and regenerate (that means no email, no phone calls and zero work). You need full recovery one day a week otherwise you’ll start depleting your capabilities.
7. The data says workers are interrupted every 11 minutes. Distractions destroy productivity. Learn to protect your time and say no to interruptions.
8. Schedule every day of your week every Sunday morning. A plan relieves you of the torment of choice (said novelist Saul Bellow). It restores focus and provides energy.
9. Work in blocks of time. Creative geniuses all had 2 things in common: when they worked they were fully engaged and when they worked, they worked with this deep concentration for long periods of time. Rare in this world of entrepreneurs who can’t sit still.
10. Drink a liter of water early every morning. We wake up dehydrated. The most precious asset of an entrepreneur isn’t time – it’s energy. Water restores it.
11. Don’t answer your phone every time it rings.
12. Invest in your professional development so you bring more value to the hours you work.
13. Avoid gossip and time vampires.
14. Touch paper just once.
15. Keep a “Stop Doing List”.
16. Get up at 5 am.
17. Have meetings standing up.
Stay Productive and Make Your Work Matter!
Kindest regards,
P.S. If you really want to dive deep into how the best in business translate their big ideas into fast results (while they actually have a lot more fun), you really have to scoop up one of the few tickets left for The Remarkable Entrepreneur™ SuperConference in June. Don’t miss this game-changing event. Details here:
http://www.theremarkableentrepreneur.com
P.P.S. Watch this video on “The 11 Obsessions of Remarkable Entrepreneurs“
Wednesday, May 11, 2011
The Architecture Journal - We Don't Need No Architects - The role of an architect in software development
by Joseph Hofstader
Contents
Introduction
Who Are Those Guys?
Problem Space
Solution Space
Don't Build "The Homer"
To Make a Short Story Long...
Resources
Introduction
The role of an architect in software development has comeunder attack of late. On software projects, the title Architect is oftenambiguously defined and the value provided by architects is not easily quantifiable.The perception that architects live in an "ivory tower" disassociated from therealities of delivering a software solution contributes to some of theanimosity toward those of us with the title.
This article presents a defense of the practice ofarchitecture in software development. It defines the qualities of an effectivearchitect and describes the skills required to succeed in this profession. Thearticle examines widely held perceptions of architects and some of the mistakesthat architects make which contribute to negative perceptions. Ultimately, theintent is to show the value good architects bring to a software developmenteffort.
Who Are Those Guys?
In the field of information technology, no title conjures upmore raw emotion than Architect. I have witnessed and been involved in manydebates over the definition of the term. When I introduce myself at meetings,reactions range from "we're not worthy" to "we do not need an architect"—theformer, although friendly, reflecting the lofty image of architects, and thelatter implying that an architect's knowledge and skills are irrelevant. Bothresponses demonstrate a lack of understanding of what architects really do.
At the OOPSLA conference in 2005, I attended a "Birds of aFeather" (BOF) hosted by Grady Booch. The topic ofthe BOF was his then upcoming "Handbook of Software Architecture." One of theattendees related some negative experiences he had had with architects, both inIT and in construction. One story was about the architect who drew plans forhis house expansion. The attendee said that he viewed the drawings withengineering software and the plans were off by a few feet, and that the actualconstruction could not and did not follow the architect's specification. He wasmaking the point, which I have heard echoed by many qualified individuals, thatarchitects are detached from the reality of delivering tangible results andthat their responsibilities should be relegated to the engineers and builderswho are fully engaged in product development.
That meeting, and many subsequent conversations with others,led me to wonder what exactly the role of an architect is on a software productand what the characteristics of good architects are. The most concisedefinition I have come up with is: The role of the IT architect is to solvea problem by defining a system that can be implemented using technology. Goodarchitects define systems by applying abstract knowledge and proven methods toa set of technologies with the goal of creating an extendible and maintainablesolution.
From this concise definition, we can extrapolate that good architects draw upon a foundation of knowledge to besuccessful in their role. To "solve a problem," the architect must have a goodunderstanding of the problem domain. To "define a system using technology,"implies that the architect has technical acumen. "Abstract knowledge" requiresthe architect to be able to conceptualize the technical solution. "Provenmethods" assumes an understanding of the patterns used to solve similarproblems. Figure 1 depicts the key skills of an architect.

Figure 1. The key skillsof an architect
The key benefit an architect brings to a project is theability to apply those skills in the definition and development of a robustsoftware solution. An effective architect is part of the continuum of allphases of a software development project, with skills critical to defining theproblem space, such as domain knowledge and the ability to conceptualize asoftware solution, as well as the ability to define the solution space usingappropriate technologies and patterns. The risk of not having an architectactively involved in product development increases the likelihood that theproduct will take too long to develop or be developed incorrectly. Figure 2illustrates the phases of a development project where the skills of anarchitect are applied.

Figure 2. Architectskills in phases of software development
Describing the architectural skills required for asuccessful project is not as straightforward as it may seem. Many areas,especially technical acumen and patterns, are often debated regarding the levelof expertise necessary for an architect. The following sections, divided byproblem space and solution space, offer an explanation of each of these skillsets and a rationalization of how these skills make an architect invaluable toa software development effort.
Problem Space
Defining the problem space and ultimately setting the scopeof a software solution requires an understanding of what will be built, as wellas domain knowledge and a conceptualization of how information will flowthrough the solution. As the following sections detail, these skills areessential to understanding the purpose of a software solution and communicatingthe proposed solution to all stakeholders.
Domain Knowledge
The problem domain for a software solution can be horizontalor vertical. A horizontal domain is applicable across industries, like workflowautomation. Vertical domains are specific to a particular industry, liketelecommunications. Problem domains can be further decomposed into subdomains, or aggregated into larger domains. An exampleof a subdomain within a vertical domain is networkactivation in telecommunications. An example of the aggregation of a subdomain into a larger horizontal domain is workflow in anenterprise application integration product.
There are many standards organizations and vertical industrygroups that specify standards and protocols that need to be considered whendefining a software solution. These organizations can be specific to a verticalindustry domain or a horizontal industry domain. The TMForumis an example of a vertical organization that specifies management protocolsfor the telecommunications industry. The W3C specifies standards for thehorizontal World Wide Web domain including technologies like Web services.
The value of domain knowledge is sometimes underestimated byIT managers. I once worked for a telecommunications company whose IT leadershipwanted to change the organization from being structured around "centers ofexcellence" focused on a business domain to being structured with "pools" ofresources based on technical skills without regard to domain knowledge. Forsome of the resources assigned to horizontal domains, like Web development,this model worked well. Many products require Web interfaces and the skillswere applicable across verticals. Where the "resource pool" structure failedwas in industry specific subverticals, like networkactivation. Understanding how to provision and activate services requiresdetailed knowledge of the provisioning process as well as the interfaces,protocols and standards of all network devices that comprise thetelecommunications services.
Deep domain knowledge often involves a steep learning curve.If the staff on every project is required to learn the intricacies of thedomain for every release of the project, productivity is significantly reduced.Assuming features are sufficiently decomposed so that the amount of time todeliver the feature is constant, then productivity suffers proportional to theamount of time spent acquiring domain knowledge. Conversely, maintaining a"center of excellence" around each vertical domain supported by a business canalso be an expensive proposition. Development work is seldom evenly balancedthroughout a given timeframe and keeping a fixed number of resources assignedto a project that is not actively engaged in delivering solution features candrain productivity on other development efforts.
A balance that is common in technology companies is having anarchitect be a domain expert and a pool of resources available to differentprojects. This strategy increases productivity by minimizing the amount of timeobtaining domain knowledge within a vertical. It also allows some preliminaryresearch to be done prior to engaging development staff, helping to ensure thatthe development is consistently productive. This approach provides the companythe added benefit of a flexible staffing model, in that development staff canbe augmented with contractors without having valuable domain knowledge walk outthe door at the end of the contract.
Conceptual Thinking
One of the main responsibilities of an architect is tocommunicate the solution to technical and nontechnical stakeholders. Theability to conceptualize a software solution is essential to communicating asoftware solution to stakeholders who care about delivery of functionalrequirements, and may not know or care about technical details. Defining aconceptual architecture prior to commencing the development of a softwaresolution helps facilitate the feedback loop needed to define the scope of aproduct and can help determine an initial level of effort and cost estimate fora product.
A conceptual model is the artifact most associated withsoftware architecture. The conceptual model typically shows the components of asoftware system that will fulfill the functional requirements and where theyapply in a software solution (user interface, domain layer, and so forth). Theconceptual model is often accompanied by a number of diagrams showing the flowof information through the proposed solution. In the case where the softwaresystem consists of components from other products or solutions, the conceptualarchitecture often contains the protocols that will be used to access differentparts of the solution.
Applying the correct level of granularity is the mainchallenge in defining the conceptual model. The conceptual architecture shouldnot contain any references to a particular platform or technology, other thanprotocols used to access subsystems. I once took over as architect of a projectthat was stalled in "analysis paralysis" for over a year. As I was reviewingdocuments to get up to speed, I noticed that the conceptual architectureconsisted of a number of boxes containing the names of technologies with noreference to system functionality. After reviewing that document I understoodwhy the system could not be developed: There was no mention of the requiredfeatures, making it hard to understand what needed to be developed.
Solution Space
It is in the area of defining the solution space thatopposition to architecture is most obvious. Developers will usually accept thearchitect working in the problem space, but may be resistant to having thearchitect define the solution space. In many instances, developers have validarguments about architects meddling in the solution space, especially if thearchitects have not kept their technical knowledge up-to-date.
A colleague of mine illustrates the attitudes developers havetoward architects when he says "architects talk in bubbles and developers talkin code" (see Figure 3). The idea that code is the only artifact that matters in asoftware development project is so prevalent that it is one of the valueslisted in the Agile Manifesto: "We have come to value […] working software overcomprehensive documentation." A good architect understands that code isundeniably the most critical part of a software solution, and many of themodern development environments now produce code from "bubbles," includingtools that support Model Driven Architecture (MDA) and Domain SpecificLanguages (DSL).

Figure 3. An architectthinking in bubbles
That being said, a good architect also understands that asoftware solution consists of more than the functional requirements implementedin custom code (see Figure 4)—for example, development platforms, frameworks, andinfrastructure technologies. Consideration also needs to be given to thenonfunctional requirements of a software solution, like: deployment, security,scalability, and performance. Neglecting the nonfunctional requirementsincreases the likelihood that the system will fail.

Figure 4. A developerseeing part of the picture
Another critical piece of solution space knowledge is thepatterns used to implement a software solution. Patterns allow a softwaresolution to be developed with thought toward extendibility and reuse, which arecritical to reducing the total cost of ownership of a softwaresolution—especially in later phases of development or product maintenance.
Technical Acumen
Technology has been rapidly evolving for as long as anybodycan remember. I've implemented countless technologies over the last dozenyears, including technologies for process distribution, user experienceprogramming languages, enterprise application integration, object-relationalmapping, virtualization, and data persistence.
Understanding how a technology works is not enough todevelop a robust software solution—understanding where the technology isapplicable within a solution is essential to the development of a qualityproduct. On several occasions, I have reviewed architecture documentationconsisting of little more than a number of boxes on a Visio diagram eachrepresenting a technology, with no mention of how the technology was intendedto be used or any reference to the functional requirements to be fulfilled bythe technology. Such practices give architects a bad name.
It is impossible for anybody to understand every detail ofevery technology. But an architect should understand, at a minimum, the intentand applicability of any technology prior to requiring its usage in the contextof a software solution. The architect should also map the technology to thefunctional requirements, or to the applicable part of the conceptualarchitecture. Too often, I encounter the bad practice in which an architectmakes a technical edict without explaining the intended application of thetechnology. To be honest, I made the same mistake on occasion earlier in my owncareer.
Architects sometimes allow their passion for technology toovershadow the problems that they need to solve. The art of choosing technologyfor a software solution is finding the minimum amount of technology required tomeet the system requirements, both functional and nonfunctional. Delivering asoftware product that meets all quality standards, such as performance andscalability, will require a good amount of technical knowledge, and it is thejob of the architect to define the platform for development and deployment.
With all of the advances in technology, keeping abreast ofthe latest trends can be daunting, but it is critical for an architect. Onecompany that I worked with had a problem with the performance of aclient/server reporting application. The application had been extended foryears without a technology update. The architect responsible for the solutionwas adamant that building an object-layer over the relational model would solvethe problems with his application. The proposed solution would have been statusquo a decade ago, but database technologies have advanced greatly over the lastdecade and now contain optimized reporting services as part of the platform.The solution proposed by the architect would have increased the total cost ofownership of the solution (development, maintenance, licensing) and most likelywould have adversely affected performance. Luckily, the architect was open tolearning about the newer technologies and the product upgrade took advantage ofthe capabilities in the newer database platform.
Patterns
One critical skill possessed by all great architects is anunderstanding of how to leverage patterns in the definition of a softwaresolution. Patterns have been a mainstay of software development for over twodecades. Through the seminal Design Patterns by Gamma et al., the PatternOriented Software Architecture (POSA) series of books, various publicationsfrom industry luminaries, and the work of organizations like the HillsideGroup, patterns have become a key measure of how software is judged. Whenreading about a new technology or a framework, I often try to list thedifferent patterns that were used in the solution in order to assess the qualityof the design.
The mainstream usage of patterns in software development hasmade it a critical skill for architects. Learning how to leverage patternstakes time and effort. Some architects, like me, have had the good fortune ofworking with experts in patterns who provide mentoring in the discipline ofarchitecture and design; others are left to acquire these skills on their own.With or without mentors, developing a proficiency in patterns does not happenby accident and requires dedication. There is a large learning curve inacquiring the patterns vocabulary and an even larger learning curve inunderstanding where patterns can be applied in a software solution. The effortput into learning patterns is paid back tenfold, giving an architect the necessaryskills to intelligently discuss design with their peers and to createextendable software systems.
One of the main motivations to leveraging patterns in a softwaresolution is the ability to design frameworks that allow the solution to beeasily extended. A software solution uses frameworks to define the solution'sarchitecture in the context of the problem domain. Good software frameworks areusually defined using general-purpose patterns that are reusable over a numberof domains. One of the main drivers behind domain-specific languages is toincrease developer productivity by providing graphical tools to customizegeneral frameworks. As mentioned previously, patterns are an essential component ofdefining frameworks.
I can provide many examples in which understanding patternshas increased productivity, but the best example was in the project I mentionedearlier which I inherited after it was stalled for over a year. Having designedsimilar solutions in the past, I understood the patterns that were necessary tobuild an extendable domain model. While equipment was being ordered for the laband development staff was being interviewed, I was able to define the domainmodel and frameworks with patterns that I had used on similar efforts in thepast, accelerating the development phase. The initial frameworks I developedwere a key factor in being able to deliver the product in a short time frame.
Don't Build "The Homer"
With all of the skills possessed by good architects, it isoften challenging to narrow the numerous options to be used in a softwaresolution. Between the standards defined for specific domains, the alternativesfor conceptualizing a software system, the plethora of technological options,and the numerous patterns to promote extendibility and reuse, it is easy toover-architect a solution that bears a greater resemblance to alphabet soup thanto a robust software system (see Figure 5).

Figure 5. An architectmaking alphabet soup
The first step in simplifying a software system is tounderstand that no matter how fun it is to try out new techniques andtechnologies, they must be applied in the context of a system requirement. Itwas no coincidence that the first system I designed after reading DesignPatterns contained almost all of the patterns defined in that book.
Many years later, after a few painful experiences, I havelearned that a minimalist approach, using the least amount of technology tofulfill the requirements, always yields the best results.
There is an episode of The Simpsons I often think about whendefining a software solution. In the episode, Homer, the dim-witted father, wasasked to design a car for an auto manufacturer. The design for Homer's car wasfull of nonessentials like multiple horns, cup holders, and shagcarpeting—without thought to the overall cost or customer appeal of the car.The prototype, appropriately called "The Homer," was so costly and unappealingthat the product bankrupted the company. Whenever I design a solution, orreview the design of a solution, I frequently stop and ask myself if theresulting product is beginning to resemble "The Homer." If the answer is yes, Isharply refocus on the essential functionality and technology required todeliver the software system.
To Make a Short Story Long...
A couple of months ago, while waiting to make a presentationat a customer event, I was introduced to a developer attending the event as anarchitect from Microsoft. Expecting one of the usual greetings like "pleased tomeet you," I was surprised that the first thing he said was "I think that architects are obsolete." Not wanting to beroped into an argument before my presentation, I responded with a grin andsaid, "I hope not."
Upon reflection, I have wondered why he felt he needed tomake that statement from the outset: Was he having a bad day? Did he have a badexperience with an architect? Perhaps he is unaware of the contributions ofarchitects in software development. Maybe his solution was so well architectedthat the development staff only needed to consider coding and testingfunctional requirements without needing to understand the considerationsnecessary to create a robust software solution.
A poorly architected project languishes without results, oris delivered with poor results. On the other hand, a successful softwaresolution is well architected, by someone with domain knowledge, the ability tothink conceptually with technical acumen, and the ability to leverage patternsto solve problems. Industry titles for this role have come to includearchitect, technical lead, and a number of others, but the importance of therole is clear. We should stop wasting time arguing the virtues of the role andcontinue solving problems with technology.
Resources
The Agile Manifesto
Design Patterns: Elements of Reusable Object-OrientedSoftware, Erich Gamma et al. (Addison-Wesley Professional, November 10,1994, ISBN: 978-0201633610)
Handbook of Software Architecture
http://www.booch.com/architecture/index.jsp.
The Hillside Group
The Homer Wikipedia Entry
http://en.wikipedia.org/wiki/Oh_Brother,_Where_Art_Thou
"Using Patterns to Define aSoftware Solution," Joseph Hofstader, November, 2006.
http://msdn2.microsoft.com/en-us/library/bb190165.aspx
"Using Patterns for Rapid Development," Joseph Hofstader, February, 2007.
http://www.iasahome.org/c/portal/layout?p_l_id=PUB.1.366
About the author
Joseph Hofstader is anArchitect for Microsoft's Developer and Platform Evangelism organization. He isalso an adjunct professor in the Department of Information Technology and ElectronicCommerce at the University of Denver. Prior to joining Microsoft, he was aDistinguished Member of Technical Staff at Avaya. Joe has spent his careerarchitecting, designing, and developing solutions in the telecommunicationsindustry. He is happy to receive feedback at joe.architect@live.com.
This articlewas published in the Architecture Journal, a print and online publicationproduced by Microsoft. For more articles from this publication, please visitthe Architecture Journal Web site.
Sunday, April 24, 2011
Five skills that can help software engineers stand out from the pack
Career Management
Five skills that can help software engineers stand out from the pack
Takeaway: Here are five core skills that can help you build critical competencies as a software engineer and help you stand out from the pack.
Last week I blogged about a CareerCast report that said Software Engineer was the hottest job for 2011. Many readers chose to blast me and TR for associating this job with low stress and I’d just like to say that it’s not like CareerCast came to me and asked me about the stress level. I was merely reporting what they stated as the credentials for the determination. But if CareerCast ever DOES ask me, I’ll tell them that they’re wrong. Judging by the reaction that blog got, I’d have to say that software engineers are fairly overwrought.
But back to business. If you read that blog and would still like to pursue a career as a software engineer or if you’re a software engineer who would like to know how to stand out from the pack, here are some tips.
Bruce Douglass, Chief Evangelist from IBM Rational suggests these five core skills to help build critical
competencies:
Electric Vehicle Mechanics: According to SBI Energy and J.D. Power & Associates, the electric vehicle market in the U.S. will double by 2020. As automakers upgrade the features in electric, so will the amount of software code in each vehicle. Students with knowledge and fundamentals on electric vehicles will be in better position to create complex battery systems, electric drive units and cabin electronics.
Probability and Statistics: Collecting, processing, analyzing and interpreting numerical data is key. These skills can be used to calculate the average downtime of a computer, evaluating the effectiveness of commercial products, predicting the reliability of a rocket or studying the vibrations of airplane wings.
Environmental Engineering: The green movement will remain a hot button issue for future engineers. Finding new ways to improve the environment, provide healthy water, air, and land for human habitation, and to remediate polluted sites are all important areas of expertise for students.
Engineering Economics: This skill is for any student with aspirations of one day managing a project. It is used to answer many likely scenarios, like: Which engineering projects are worthwhile? Which engineering projects should have a higher priority? How should the engineering project be designed? Etc.
Ethics: This skill goes along with well established fields such as medical, business and legal ethics. Amid pressure from recent events like the levies failing in New Orleans during Hurricane Katrina, universities are putting a higher emphasis for students to have a better understanding of ethical and quantitative concepts, as opposed to solely focusing on data and numbers.
Thursday, April 7, 2011
How to use LinkedIn strategically
How to use LinkedIn strategically
Takeaway: LinkedIn is a great tool for getting your profile out in front of potential employers. And with the addition of some new apps, it just got better.
I think a lot of people think of LinkedIn as just a more staid version of social networking. And I think the gainfully employed often neglect their LinkedIn pages in favor of its more scintillating cousin, Facebook. After all, would you rather hear who a former colleague is now connected to or read trash-talking among your Facebook friends?
Okay, maybe that’s just me.
The fact is, LinkedIn is a great tool for what are perhaps the most important aspects of searching for a job-networking and online presence. And with the addition of some new LinkedIn apps, these have become tasks have become even easier to do.
First of all, you can put your work profile up there for the world to see. While you still should send targeted resumes for positions you want to apply for, LinkedIn gives everyone a snapshot of your capabilities. So if a potential employer is just looking around before he or she even posts an opening, you’re out there. Here are some tips for using LinkedIn to its greatest advantage:
Avoid overused keywords just as you would on a resume
LinkedIn late last year released its top 10 overused buzzwords used in U.S. member-profiles. Avoid:- extensive experience
- innovative
- motivated
- results-oriented
- dynamic
- proven track record
- team-player
- fast-paced
- problem-solver
- entrepreneurial
Take advantage of new LinkedIn apps
I found three apps that I think are invaluable:
This app will synch your WordPress blog posts automatically with your profile. It offers a filtering option if you don’t want to share every entry with your LinkedIn connections-you can just use a special LinkedIn tag.
The Events application adds a box to your profile that shows what events people in your network are attending. This helps you find events based on your industry and job function. You can sort by most popular events, search for events, and create new ones.
With this app, you can share presentations and documents with your LinkedIn network and upload portfolios, resume, conference talks, PDFs, marketing/sales presentations. If you’re really adventuresome, you can upload a video of yourself.
Wednesday, April 6, 2011
Data Structures and Algorithms with Object-Oriented Design Patterns in C#
Data Structures and Algorithms
with Object-Oriented Design Patterns in C#
http://www.brpreiss.com/books/opus6/

