Chapter 9. Know-how

“The future belongs to the curious.”

Unknown

“Develop a passion for learning. If you do, you will never cease to grow.”

Anthony J. D’Angelo

“You don’t learn to walk by following rules. You learn by doing, and by falling over.”

Richard Branson

“I am always doing that which I cannot do, in order that I may learn how to do it.”

Pablo Picasso

“Technical skill is mastery of complexity, while creativity is mastery of simplicity.”

Erik Christopher Zeeman

Have you ever seen a demo, read a blog, been at a conference and thought, “Wow—that looks and sounds amazing. We need that!”?

This is usually one of the first glimpses into the evolutionary needs of an architecture. Seeing what others are doing can serve as an inspiration to architects and other development staff about what the possibilities for the business may be. One of the best ways to figure out if this new area will apply to what you are doing is to work on incorporating it into your body of know-how.

This chapter unveils one of the essential skills needed by a software architect: developing and maintaining your body of know-how.

Know-how Defined

The concept of know-how is literally having the practical understanding of how to do things and the nuanced knowledge of when and where that knowledge should be applied. For the purposes of software architecture, there is a strong focus on technology and the business domain.

For architects, there is a career-long need to stay current and relevant within the technologies and the domains in which they work. This need drives a tension among the following (shown in Figure 9.1):

Figure 9.1. The key to know-how is balancing the competing forces of relevance, currency, and excellence.

Image

Relevance (the direct applicability of what you know compared to what is needed)

Currency (the minimal distance between your knowledge and the current wave of knowledge in your industry)

Excellence (the level of craftsmanship, mastery, and nuanced knowledge of an area)

Developing Know-how

As an architect, staying current and relevant on the latest technologies can help you to guide software projects, maintain your technical expertise, and give the business opportunities to stay competitive.

There are a variety of ways to increase your architectural know-how, some of which are shown in Figure 9.2.

Figure 9.2. Know-how development—it’s critical to your staying relevant as an architect.

Image

Developing Know-how Relevance

As you consider how to develop and maintain your know-how, one of the best ways to help determine where to focus your time is to consider how relevant the area that you are interested in is to the work you are currently doing or hope to be doing soon.

Applying Know-how to Your Domain

For architects, knowing what the currently available technologies are and what they are capable of doing is critical for making decisions on directions to head for projects.

Here are some key questions to ask about a technology:

• What types of applications is the technology being used for? Are other areas within your industry using it?

• What problems does it solve? Does the technology align with your product development needs? What percentage of the capabilities will you use? If it is a relatively low percentage, you need to question if the extra overhead is worth it, especially if you are paying any significant amount for the technology.

• What problems does it introduce? You need to understand the operational impacts this technology will have on your organization.

• Where are people struggling when they implement it?

• Is there good online support? Does it have an active community? Can you find information about it in Stack Overflow? You need to have a strong support community when real issues arise and you absolutely, positively need to resolve them fast.

• Is there active development around the technology? Is it a fad that has passed, or is there a growing level of interest in it?

• What are the alternatives? Which option best fits the problem that needs to be solved?

• Does it have a roadmap? Where is it going and does that align with where you anticipate your business going?

• Are there books written about it?

• What revision is it? Has is gone beyond a 1.0 release? Using a technology before a 1.0 release can be very tricky when things go wrong.

• What are the costs associated with it? Is it a one-time charge? Is it a charge per user, per some computation unit (server, CPU, etc.), per some usage unit? You need to know the costs associated with a technology before you begin “selling” it to your business. The costs could eat up all of your profit.

• What are the licensing implications? Do they affect your intellectual property, the ability to charge for your product, the ability for others to resell your product? You need to understand the licensing impacts on your business. If they impact your ability to generate revenue, you need to understand how this technology limits you.

The challenge is to balance your passion and enthusiasm for a new technology with the environment that already exists. For instance, are you trying to apply a big data solution to something that a single server can handle? This is not a great use of the limited time you have to investigate and bring in new technologies. The technology needs to be appropriate for the problem at hand.

Developing a Model

Can you model the new business challenge with a view toward how you would use it in your product portfolio? This could be a domain model, a physical hardware diagram, a logical architecture diagram—basically some visual representation. Ideally, each of these diagrams will fit on a single printed page.

The key is to give enough information to allow for an understanding of the domain without all of the detail.

Dealing with a Certain Level of Ambiguity When Determining Relevance

It is simply not possible for architects to dive into every last detail of every problem that is on their plate. This is primarily due to time constraints, which force assumptions to be made, and risks and issues to be identified but not necessarily resolved. In this environment, key decisions about relevance need to be made, ones that will have significant project impact. Learning how to deal with ambiguity is a necessity for architects to get their work done on a daily basis.

For me, getting to the point where I know of at least one way that a problem can be reasonably solved goes a long way toward easing my anxiety about the problem. I don’t have to know the exact solution now; I just need to know that the problem can be solved. This drives toward the need for determining a solution’s relevance to my product portfolio and specific problems at hand.

Vetting and Selling Know-how

Architects are constantly involved with selling many different aspects related to technology. They need to be able to sell management and development staff on the direction that a particular solution should take and what directions should be avoided. They need to be able to present an authentic view of where technology and the business are going and have confidence that what they are saying is achievable. Selling a solution means making it relevant by being able to

• Weave a coherent story about the solution (all of the things you are saying need to hold together—no inconsistencies)

• Clearly express the advantages of the direction being chosen

• Clearly express areas of concern

• Tell the same story repeatedly, but adjusting the details to the audience being addressed

• Anticipate different areas’ interests (what will engage them about the technology)

• Anticipate counterpoints

• Make management feel confident in your work by showing your passion, your management of risk, and your ability to pick great solutions that are appropriate to the problem at hand

Developing Know-how Currency

In the fast and ever-changing world of technology, architects need to ensure that their know-how is current within the industry and domain in which they operate. If as an architect you don’t maintain currency, you may quickly become irrelevant to the business.

Having a Broad Knowledge of Technology

For architects, having a broad-based knowlege of technology is essential for making decisions on where to guide projects. There are a variety of ways to accomplish this:

• Attending a conference can give you a sense of what other companies are doing, what vendors are promoting, and what is trending within the industry. You won’t necessarily find out all of the details, but you will get a good sense of areas to focus on. You will also get a sense of what technologies may be starting to transition from bleeding edge to leading edge.

• Attend a local user group; local user groups can give you access to real experience within the industry. These are the technologists who are truly passionate about the technology. They are willing to share the details of what they are working on, where they are struggling with the technology, and where they are having successes.

• Read blogs and magazines, or watch online training videos (through sites like Pluralsight) that are in the general areas of interest that you have. They can give you a small snippet of code to enable you to do some quick prototyping and allow you to kick the tires of the technology. They can also make you aware of some of the pitfalls of the technology.

• Network with other technologists in your area and your community. Technologists naturally love to talk about technology. Establishing a broad network of individuals who are passionate about technology will give you access to an amazing wealth of information. Contractors are also a great source of information about what is currently happening in your area. They are hired to work on areas where other companies are having challenges staffing. The fact that they move around and see what other companies are doing gives them a tremendous level of knowledge about what works and does not work (at least not currently). Follow topical experts on Twitter.

Learning Technologies Quickly

Architects usually have very limited amounts of time to jump into a particular area in depth. The challenge is that it takes time to formulate a sense of where a technology is best applied (what purpose it serves best and where it doesn’t fit).

Doing small prototypes or having someone on one of your teams do some prototyping with respect to a particular technology can help you begin to establish the validity of the tool for the set of problems you are attempting to solve.

The challenge is that new tools, no matter how seasoned they may be, are likely to have operational issues that you are unaware of when first introducing them into a new area.

These types of challenges are easier to manage earlier on in the life of a project. Later, once the cadence of a project is established and the expectations about delivery time frames are real, introducing new technologies into the project is usually a risky proposition. The amount of time you have to recover from a misstep is very limited.

Look for ways to learn the new technologies by leveraging the teams you work with. You cannot be an expert in everything. Knowing how much to learn is critical so you can manage your overall time commitments, and allowing the teams to work on fun new technologies will raise their engagement level. Take the time to pair program with developers.

Learning New Programming Languages, Frameworks, and Methodologies

One of the best ways to keep up on the ever-changing world of technology is to spike solutions with new technologies and do proofs of concept (POCs). These may never be used in active development projects, but the spikes and POCs will give you a sense of

• The features and direction where the current version of a technology is heading

• The problems that technologies are attempting to address and how they are attempting to address them

• The rough edges related to a technology, giving you a sense of whether the technology is ready for prime time or is more experimental in nature

• Any new technical language surrounding a new technology (this will allow you to be aware of subtle references related to the technology when talking to others or when reading online or a hard copy)

• A sense of the operational nature of a technology

Attending a Conference

Attending a conference related to your primary area of work can be an excellent way to get a sense of

• Where the industry is heading

• What trends are emerging

• What other companies are doing, what technologies they are adopting or have recently adopted, and what kinds of experiences (positive or negative) they have had in trying to bring the technology in-house

• What is coming into favor, what is falling out of favor, what is capturing the attention of other developers, and where the money is

If travel budgets are tight, you can often find local conferences to attend. There has also been a trend toward smaller free conferences hosted by interest groups with a set of local sponsors where you can see local talent give presentations on interesting topics. This may take the form of a meet-up or an un-conference. Another option is to consider a virtual conference. Some conferences put selected session videos online.

Attending conferences will give you a chance to network, learn about new technologies, discover interesting projects that are in development in your geographic area, and add to your current know-how.

Attending/Hosting a Hack-a-thon

If your business has a particular problem to solve, one great way to generate ideas and potential solutions is to host a hack-a-thon. This can give the business a great sense of what some of the technical challenges of a particular problem are. It can also provide some new insights into what the real problem is and a variety of ways to consider for solving it. This type of hack-a-thon is usually more internally than externally facing.

If you are looking for an exciting way to demonstrate or hone your technical skills, attending a hack-a-thon can give you a chance to look at a problem you may not have considered before and force you to think differently from the way you have in the past. It may also lead to new employment opportunities that you were previously unaware of.

One area that needs to be addressed with a hack-a-thon is who owns the intellectual property of the solutions that are generated. This needs to be clear before the event occurs.

A similar idea to a hack-a-thon is an innovation contest under the broader umbrella of open innovation.

Leveraging Online Resources

In today’s world, there are many different ways to learn new technologies. There are often tutorials, free online courses, and endless sample code just waiting for you to dive in and train yourself.

Taking the time to train yourself through online research is an excellent way to learn what is available on the web and to find the top sites for the areas you are interested in. One way to make this more efficient is to use tools like Google Alerts that will bring relevant information to you instead of your needing to search for it.

Developing Know-how Excellence

Architects need to gain a deep level of knowledge with respect to the technologies that they are using or about to use. They need an understanding of the many nuances related to the technology and what the impacts of those nuances are on the solutions they are developing.

Technical know-how also adds to your credibility as an architect. You want to avoid being a PowerPoint architect.

Developing a Proof of Concept

One of the best ways for architects to maintain their software development skills is to do POCs when technology decisions need to be made. POCs have many benefits:

• Architects can maintain and enhance their coding skills. This enables them to remember just how long some “easy” tasks can take to develop.

• They can experience firsthand some of the challenges and some of the benefits of a new technology or development approach.

• They enable better communication with the business when the architect has firsthand knowledge and is able to personally demo the work.

• They relieve the primary development staff from balancing forward-looking research with the immediacy of the hot fix that needs to get to production or the looming deadline that is quickly approaching.

To help maintain my development skills and keep current with the latest technologies, I try to focus on a single area each month with the goal of producing a prototype in that area. This lets me investigate 12 things per year. I try to spend on average an hour a day focusing on this, perhaps more or less depending on my other commitments.

My focus varies depending on what I am interested in or if I am trying to prepare for an upcoming project where I may not be familiar with some aspect of the technology stack that we would like to adopt. It gives me a chance to do coding without creating dependencies within a project on which the team is waiting for me to get code completed. I will focus on areas such as big data, mobile, semantic search, user interface, analytics, or whatever area seems important to get up to speed on.

Creating or Joining a Local User Group

If you are extremely passionate about a particular area, find a local user group that meets on regular basis where a wide range of topics with respect to your area of interest are discussed.

If a local user group doesn’t exist, you may be able to create one if you can attract a set of similarly interested parties. This may be an offshoot of another user group or something that was kicked off from a local conference.

The key to a successful user group is to have passionate members and enough time to support and manage the organization to keep it fresh, interesting, and in depth for those involved. Make sure that everyone who attends feels welcome. The local user group can be a great way for local enthusiasts to get together and share ideas about how solve their current problems. It is usually surprising just how many others are facing similar problems or have solutions to the problems you are encountering.

Giving a Presentation at a Local Conference

One great way to learn a topic in more detail is to give a presentation at a local conference. There is nothing like the fear of public speaking to drive you to know the subject matter in extreme detail.

Ideally, you can pick a topic or area that aligns with the work you are already doing and is in an area that you want to learn more about.

Public speaking will help you become more effective at work, allow you to be more confident in dealing with crowds, and help you to think on your feet.

For technology-related presentations, live demos will help keep the audience’s interest. The key is to pick small representative examples that can be shown in a relatively short amount of time. If you show multiple alternatives for how to use a technology, giving recommendations (the pros and cons) for which alternative is the best in certain situations can help the audience walk away with valuable information to use in case they run into a similar problem.

On the odd chance that everything goes south for the demos, have slides prepared that show the same set of live experiences you wanted to demo and the results of the demo. This will give you a fallback in case everything else goes up in flames.

For most people in technology, seeing is believing; and if something is easy enough to use in a live demo, it may actually be possible to use it in a real project. If nothing else, live demos nearly always keep the audience’s attention and help draw out questions and observations for the presentation, making it more fun for everyone involved.

If possible, make the coding examples available after the presentation. They will give the attendees a great starting point from which to learn the technology in more detail after the conference.

Speaking at conferences is an invaluable experience. It will help build your résumé and help you make new professional connections.

Teaching a Class

“To teach is to learn twice.”

Joseph Joubert

Teaching a class is one of the best ways to learn a subject even when you think you are an expert in an area. The questions you get from class attendees will give you a perspective on what is obvious and what is not easily comprehended. It is a great way to learn the nuances of a particular technology and brand it on your mind.

The class could be something that is internal to your organization, it could be taught through a local community college, or it could be offered through some other technical organization.

A class that includes lots of examples and where attendees actively participate will keep the discussions lively. PowerPoints are great for guiding a conversation, but doing is the best way for students to learn. Developing hands-on exercises will invariably cause you to discover new tricks, bugs, and gotchas.

If the topic is challenging enough or the class is large enough, you may need to have helpers to field the questions and to help students overcome any technical issues they have with implementing the solution or variants of the solution they are attempting to create.

Sometimes meeting together physically in a room for teaching is not possible or practical. A class taught virtually online through a webinar or other online format can potentially reach a broader audience. The challenges of virtual teaching are to make sure you have thought through how you will present the class and handle questions from students, whether you will have a camera aimed at you (in a context that is easy to watch), how you will administer polling, and how you will give tests or quizzes (if needed).

Teaching a class is a good way to help build your résumé and also is an opportunity to provide community service. It can often give you a chance to mentor some of the students in an ongoing manner.

Writing a Book

If you are feeling really motivated, try writing a book. Writing a book is a great way to get your name out in the industry and establish your expertise in a certain area.

One way to test out an idea for a book is to give a presentation at a conference. It will help formulate the ideas in your head more clearly. The feedback from attendees at the conference can indicate the interest level in the topic and enable you to make any adjustments that may be needed to improve the concept. The fact that a conference was willing to accept your proposal can help you persuade a publisher that there is a market for your book.

One challenge in writing a book is to pick a topic with a long enough shelf life that by the time you have completed the book and gone through a few revisions, the topic will still be relevant. Another challenge is making a significant time commitment to complete the project, and to complete it on time.

Writing a Blog

If writing a book seems a bit overwhelming, a good alternative is writing a blog even if it’s just internal to the company you work for. This allows you to publish your ideas in smaller segments and to stay current with topics that may have a relatively short shelf life. It also let you focus on areas that you are passionate about and to get live feedback from those who read your blog.

Becoming an Active Participant in an Open-Source Project or Online Community

Participating in open-source software is another great way to expose yourself to new technology. Find an area that you are passionate about and see if there is an active open-source project that is focused on a particular problem in that space. If none exists, consider starting an open-source project to solve the problem you are interested in. At a minimum, have an account and follow projects.

Participating in open source is also a great way to get involved in a community and be recognized for the work you do. Open-source software can have a higher level of quality than what a normal business may be interested in investing in. As issues arise and get resolved, there is a sense of accomplishment and a sense of fulfillment for helping out the community.

Open-source projects can also be hosted internally within a business as a means of promoting code and knowledge sharing.

One advantage to contributing software to the open-source community is that there is broader support for the software, including new and innovative ideas. Another advantage is that open source usually allows you to more consistently take a strategic approach to solving problems.

Become an active member of an online community by asking and answering questions on sites like Stack Overflow.

Knowing How to Instrument

The only real way to know what is going on within a system is to have it provide the information you need. This usually requires some form of system instrumentation.

One of the best ways to display information from instrumentation is to create a dashboard (see Figure 9.3). The dashboard can give both a real-time and a historical perspective on how things are working. It also allows anomalies to be displayed visually.

Figure 9.3. Dashboard

Image

The challenge is that if you instrument everything, your system will spend all of its time logging information and never really get around to servicing the requests for which it was built.

One way to minimize this problem is to focus on the edges of the system, what is going in and what is going out. If you have the basic inputs and outputs, your ability to reproduce problems is significantly higher.

Focus on counting activities that the system is performing; this will give you a sense of where the system is being heavily used and what the normal daily trends in activity are. This data can help inform when system maintenance is best performed. It can also give you a sense of when abnormal things are occurring by logging error rates and other activities that may require someone’s attention.

Acting on the basis of knowledge is critical to making good decisions.

Knowing How to Scale and Performance Tune

Before a system ever has a single line of code written, having a sense of how you might approach scaling is important. Are you going to scale out? Are you going to scale up? Once you have a basic idea of how you are going to approach scaling, you are in a position to start thinking about how you might provision the hardware and middleware that are needed for your system and begin the process of defining capital solutions.

Once the system is being built and you have the appropriate instrumentation to measure what is happening within it, you can begin dealing with the areas that are blocking you from getting the performance you are looking for. This may be solved by

• Providing more hardware in a scale-out solution

• Providing a caching solution for common requests to be serviced at the edge of the system

• Providing intelligent locking mechanisms to prevent blocking

• Isolating certain functions or users from one another to prevent overconsuming resources

• Rewriting algorithms to be more efficient

• Ensuring that all of the proper indexing is available for data retrieval

• Minimizing the amount of data transfer through the system

• Moving the code to where the data is, instead of the other way around

• Being more event driven than request driven

• Parallelizing portions of a request

There are usually many alternative routes to improving scale and performance; the challenge is to be cost-effective and still meet the business needs and timelines. If possible, you want to identify and deal with these architectural issues early in a project so their impact on cost can be managed effectively. Another key element of this is to defer any irreversible or costly decisions until the last (or most) responsible moment.

Knowing Where Money Can Be Saved without Compromising the System

Every project seems to run short of money at some point, and the inevitable question is asked: “Can we do some things differently to save money?” The project that has been a poster child for strategic development suddenly turns tactical.

There are an endless number of ways that a system can be hacked to achieve the desired goal. For example, you can

• Skimp on testing

• Just add in the code without refactoring (the begging of a god object)

• Just shove some data into the database in a field that is not being used

• Create yet another tie to a legacy system that is scheduled to go out of commission

All these things are achievable and will deliver the functionality that is desired, but you are adding technical debt to the solution.

Software is like a garden; you need to keep the weeds out. If you don’t do the right things most of the time, your system will begin to develop entropy and eventually need to be replaced.

If you have to hack the system, have a clear plan to fix it and implement it in an isolated manner. This will enable a refactoring of that area to occur without impacting other areas of the system. Document it for what it is—a hack.

Having a deep sense of the nuances related to a technology can help inform what the best solution will be.

Having a Basic Knowledge of Project Management

Project management is something that most architects are more than happy to let someone else on the project take care of. For most large projects, the architect has the best view of the project dependencies and the approximate amount of time needed to complete tasks. The architect is also one of the first technology people involved with a project, often before the project ever comes into existence.

It is important for an architect to be able to

• Lay out a high-level schedule (release plan) for a project (at least at the very beginning of a project when others are first being added to the project)

• Lay out dependencies between tasks and other development areas

• Identify risks and areas of concern

• Help to start populating an initial backlog of stories

Partnering with project managers can help make the job of architecture run more smoothly. Having open conversations about where the project is and what the current challenges are and having a game plan for how to address current issues will help the project manager stay abreast of areas that need attention and areas that need to be communicated to key stakeholders. All of this works toward establishing trust and transparency.


Note

Establishing a common front with architecture and project management is a key to success when interacting with executives. Executives who sense any division will instinctively dive into the area of division and focus on it for months to come.


Knowing the Software Construction Process

Architects need to be well versed in the software construction process.

Your ability to know and understand the software construction process is critical to having the appropriate oversight of a development team, including developers, configuration management, and testing.

Know-how Synthesis

Know-how synthesis is about putting all of your know-how together into a coherent whole. Working through individual areas independently can be helpful, but until you take the time to figure out how the areas interact with one another and determine what works well and what doesn’t work, you haven’t really added value to your business.

Know-how means jumping into the details and learning how things work, what dependencies exist, and where things are best used. Synthesizing it will lead to success and longevity in the role of an architect (see Figure 9.4).

Figure 9.4. Know-how synthesis

Image

Know-how-Driven Architecture

Know-how-driven architecture is driving architectural solutions based on active knowledge about the space you work in and providing influence on a daily basis.

You can’t possibly know everything, but you need to be broadly familiar with nearly all of it.

Architecture that is based on know-how has one of the best chances of being successful (see Figure 9.5).

Figure 9.5. Know-how-driven architecture

Image

Know-how-driven architecture is about balancing the relevance, currency, and excellence related to your know-how. In the end, it is a lifelong process of learning, curiosity, and incorporating new details into your knowledge base through active participation with the industry you work in, the company you work in, and the teams you engage with regularly.

Even if you don’t know everything you would like to, you should be capable of jumping in, learning, and driving the business toward great solutions.

Summary

The road to know-how begins with

• Engaging in activities that increase your know-how

• Expanding the basis of your knowledge

• Staying current with the directions of the industry

• Filling in any gaps that are critical to your area of responsibility

• Staying passionate about software

Software architecture is a great job and requires broad, active know-how to be successful in decision making. The great challenge is to balance the incessant demands on your time with the need to stay relevant. There will always be far too many things to do than you can possibly get done. The keys are to

• Focus on what will provide high value to the business

• Avoid major misses that will make executives unhappy

• Follow the areas you are naturally passionate about

• Surround yourself with experts and maintain a strong professional network

References

Lafley, A. G., and Ram Charan. 2008. The Game-Changer: How You Can Drive Revenue and Profit Growth with Innovation. Crown Business.

McGonigal, Jane. 2011. Reality Is Broken: Why Games Make Us Better and How They Can Change the World. Penguin Books.

McGrath, Rita Gunther. 2013. The End of Competitive Advantage: How to Keep Your Strategy Moving as Fast as Your Business. Harvard Business Review Press.

Pink, Daniel H. 2006. A Whole New Mind: Why Right-Brainers Will Rule the Future. Riverhead Books.

Robinson, Ken. 2010. Sir Ken Robinson: Bring On the Learning Revolution! www.ted.com/talks/sir_ken_robinson_bring_on_the_revolution.html.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
18.221.15.15