Over the past 20 years or so the concept of Design Patterns has emerged as a way to classify and define solutions to Information Technology challenges. In the software engineering community, patterns typically relate to technical topics and fill an important need to classify best practices and make them easily communicated.
After reading the book, “The Seven Habits of Highly Effective People”, by the late Steven Covey, it occurred to me that patterns are evident not just in how we implement solutions to technical problems but also in how we approach problems as well. Further, the seven habits have resonated so strongly as a framework for personal and business management that I believe it can be viewed as a meta-pattern to how Solutions Engineers approach and deliver IT solutions. To that end, it is useful to map the concepts of Stephen Covey’s wildly popular book into a more domain-specific, “The Seven Habits of Highly Effective Solutions Engineers”.
Habit 1 – Be Proactive
In the course of daily work, engineers interact with many Computer Systems and People Systems. It is a guarantee that any of those systems could be improved on or that for any given project, something about it is not optimal. Highly effective engineers send the clarifying email, refactor the offending code, offer potential solutions to identified problems, or fix the error in a comment before they become a problem. If there is a reason to complain, there is an opportunity for proactivity.
Habit 2 – Begin With the End in Mind
It is critical that every member of a team from the VP project sponsor to the junior developer know exactly what is being built. It is a misconception about agile software development that agile means lack of a plan. This is not true. Agile development means the plan can change. But even if specific details are not defined there is always a clearly defined set of user stories that will be met. Adherence to proven extensible software and system architectures such as loose coupling, high cohesion, service orientation, and dynamic scalability, ensure that changes in requirements can be accommodated without significant rework.
Habit 3 – Put First Things First
Effective Engineers know that violating this law could cause serious delays in product delivery and quality. What is not intuitive is that with agile development this habit is turned on its head. With waterfall design it was not uncommon to hear the metaphor of the importance of building the foundation of a house before building the roof. With agile, putting first things first, means putting the customer first. To continue with the metaphor, this means letting the customer walk in the entryway, step into the kitchen and check out the bedrooms. Then and only then is it appropriate to lay the foundation and install plumbing and ventilation systems. Effective engineers build interface designs complete enough to allow stakeholders to validate the interface and confirm that the design meets their needs. The most effective way to communicate design is not through documentation, but through a fully functioning usable interface. Only after full agreement of all stakeholders on what it should do can the effective engineer build how it is done. As odd as it may sound, putting first things first means building the placement of the walls before building the foundation!
Habit 4 – Think Win / Win
Often times when a stakeholder requests new features, a developer will say, “that’s too hard”, or “that can’t be done”. Many times the effective engineer is able to offer similar alternatives that can be done more efficiently even if in a slightly different way. The effective engineer says, “I see what you mean. Doing as you describe may cause deadline creep, would it meet the requirement if we did it this way…”
Habit 5 – Seek First to Understand, Then to be Understood
We have all had the annoying experience of someone attempting to finish our sentences before we have had a chance to express ourselves, or the experience of someone saying, “I know just how you feel.” Only to find out that they have no idea how we feel. Similarly, the effective engineer understands that what they have done in the past or what they have done for a previous client may not work in the current situation. Effective engineers see patterns but they also understand the uniqueness of each solution. Before offering a solution seek to understand not only what is being asked for, but also why it is being asked for. Effective engineers understand the business before they offer a technical solution.
Habit 6 – Synergize
Effective engineers understand that for a solution to be successful all stakeholders need to be involved and be active contributors. The quality and timeliness of a project are greatly enhanced when executive sponsors, users, user advocates, QA teams, systems engineers and developers inside the organization are engaged early and often with solution architects and designers inside and outside the organization.
Habit 7 – Sharpen the Saw
It is an understatement to say that the Information Technology landscape changes frequently. Effective engineers understand the importance of constantly monitoring the solutions landscape for alternate or more efficient means of accomplishing a goal. Particularly in the case of open source software, what required a complete custom implementation 6 months ago may very well have an open source alternative that is of higher quality and more open and functional. Effective engineers collaborate and learn frequently from their peers and are constantly on the lookout for new and better ways of solving problems.
These seven habits have resonated with business people as a powerful framework for approaching and solving problems. By incorporating these tried and true habits, IT workers can realize similar benefits by delivering higher quality solutions more quickly.