9/11/15

5 Tips for Being an Effective Tech Lead

The time a developer spent focusing on writing well-designed code does not translate into the skills necessary for understanding people, resolving conflict, or suddenly having to juggle more tasks than what they can possibly achieve by themselves.
Here are my five tips for being an effective Tech Lead.

1. Learn to Delegate

As a developer, you get a kick from working out what the hard, technical problem is to solve. You research different ways to solve the problem, seeking the most simple solution and celebrate a victory when you want that red, failing test go green.
As a Tech Lead, you cannot take on all the coding tasks, and cannot take on all the hard or interesting problems regardless of your experience. You have many more responsibilities that need time and attention, and if you are focused solely on a single task, those other responsibilities will fail to be fulfilled. When you take on the harder problems, it also misses an opportunities for other developers to grow and problem solve which will lead to frustration and potentially people leaving your team!
Of course, there are some problems when your experience and knowledge are important but you do not want to be a bottleneck in solving problems, so you want to find a way to delegate but still be involved. Solutions might include kicking off a design session with developers to talk about general approaches, and reviewing progress with the developer on a regular basis to see if things are on track.
As you and the developer build trust with each other, you can be less involved and fully delegate an activity to let you focus on more important tasks.

2. Find Time to Code

The role is called "Tech Lead" for a reason, and it is essential that you find some time to spend in the codebase. Being involved in the code helps you build respect with the rest of the team, but it also helps keep your knowledge up to date and current with constraints, problems and the "shape" of the current codebase.
If you do not spend time with the code, you run the risk of invoking the "Ivory Tower Architect" anti-pattern, leading technical decisions without understanding their real implications for implementation or maintenance. This anti-pattern has numerous side effects including destroying trust with developers, increasing the development time of new features, and increasing the accidental complexity of your software systems.
There are many different ways a Tech Lead can find time to code, but it is essential that you make it a priority. This often means making difficult choices about where you spend your time. Tip #1 should help increase the amount of available time you have. I know some Tech Leads who will block out time in their calendar to ensure that there is always time during the week to write or review code with the other developers. I know of other Tech Leads who review commit logs, and provide feedback to developers - similar to a loose pair-programming style.

3. Visualise Your Architecture

I have worked in several teams where developers had no idea how their task fit into a bigger picture. A small technical decision made by a developer might have a wider architectural impact but impossible to prevent if developers to do understand the broader picture.
An effective Tech Lead often has a visual representation of their system architecture on-hand and uses it to have discussions with developers. There will often be different views of the architecture (logical, deployment, etc) and each diagram helps developers see how their task fits into a broader system architecture.
A whole-team whiteboard session is often a useful exercise for reviewing the overall architecture as it evolves over time to meet differing requirements and the discussion during the session is even more important than the diagram. Focus on key quality attributes that drive your architectural vision (scalability, performance, usability concerns, etc) and how they have shaped your architecture. Call out assumptions and the historical context to help developers guide their everyday decisions.

4. Spend Time 1-on-1 With Team Members

An effective Tech Lead will not be measured in how many coding tasks they complete. They are measured by how effective their software team is. Anything that a Tech Lead can do to make each person on their team better makes the overall team better. Sit down with members on your team to understand their backgrounds, their strengths, their interests and their goals to understand how the people in your team fit together as a group.
Connect developers with opportunities for them to grow. This means allowing them to take risks so they can learn and grow, but also contribute to the team. Encourage people to share knowledge across the team and find ways to help each team member connect with each other.

5. Learn to Speak the Language of the Business

To be an effective Tech Lead, you will need a great relationship with people outside of the development team including people like Product Managers, Marketing, Sales and CxOs. They will not understand the vocabulary you accumulated as a developer, and talking to them in terms of frameworks, technical tools and platforms will only confuse them.
An effective Tech Lead finds ways that non-technical people can understand technical concepts and the best way to do that is to find the terms that business people use and find ways to explain tasks in those terms. Use visual models, whiteboard sessions and metaphors to help business people understand technical concepts and their implications. You might practice on friends or relatives who don’t work in technology to see if you can succinctly explain an idea.
Minimise the translation layer as much as possible by bringing business terms into the development team and encouraging their use as much as possible. The better the developer team uses these domain terms, the better their understanding and empathy with business stakeholders will be.

(Patrick Kua)

8/31/15

36 steps to success as technical lead

The tech lead role can be treacherous at times. While the name implies leadership, most of the times it doesn’t come with implied authority like a manager role for example. It often happens that this role is in a no-man’s-land where it brings a lot of responsibility but not enough formal authority. In order to successfully help a project from this position one has to navigate through narrow and convoluted straits.

The role is not clearly defined in most companies and it is placed in a continuum starting at the senior programmer level and extending to architecture and management positions.

More often than not the tech lead shares the responsibility for a project without being given full formal authority. In this kind of situation success will be based on the ability of the tech lead to combine his “tech” and “lead” talents in a manner that will get results from the team and will get approval and support from the management and the business.

I assume you are new at technical leadership. You are perfect for the job from a technical point of view but you lack experience in leading others while bearing the responsibility for their work. There is no easy answer and no off the shelf solution for success. Here is a list of guidelines that should get you started and help you in your quest.


Set yourself up for success


1. Define early on what success means for you, the team and the business

You have to have a clear idea of what you want. You also have to understand what team members and the management want. You also have to be aware that what people really want, what they say the want and sometimes even what they think they want are very different things. Try to be very honest at least with yourself. Success has different definitions for different people. If there is a big disconnect between these definitions you have a problem before you start.


2. Believe in the project: idea, architecture, time, team

You cannot have any kind of success if you are convinced you lead a team of morons to implement a stupid idea using the wrong architecture in a ridiculously short time. You have to really believe in the project to have a chance to success. This does not mean lie to yourself. It means do whatever you can to understand your concerns and work on them with the management. As for the architecture, it is best if you have a heavy word or if you are the architect.


3. Understand the domain, the business requirements and the technical challenges

You should be an expert in the technologies used for implementation. You also have to become very knowledgeable in the problem domain and the business case. This will help you understand the business decisions dropped on your head from upstairs and also will help you stand a chance at negotiating them.


4. Know your team: strengths, weaknesses, ambitions and personalities

Software is created by people. Your job as a “tech lead” is to support them in doing that, both from a technical point of view and at a human level. You want to lead a team of motivated and enthusiastic people. But each person gets motivated by different things.


5. Have a plan as a result of a planning activity

“Plans are useless but planning is essential” – (Dwight D Eisenhower, US President, general 1890-1969). Planning will make you think about the problems you face in detail. Also keep in mind that “a plan is just a list of things that ain’t gonna happen” – (Benicio Del Torro in “The Way of the Gun”).


6. Be part in the design of everything

This does not mean do the whole design. You want to empower team members. But your job is to understand and influence each significant subsystem in order to maintain architectural integrity.


7. Get your hands dirty and code

Yes you should take parts of the code and implement them. Even the least glamorous parts. This will help you not getting stuck alone between management and the team. It will also help you gain respect in the team.


8. Act as a communication proxy for your team

In long complex projects with big teams communication is one of the most complicated aspects. The more people you have involved in solving a problem the bigger the communication matrix becomes. Since people need information to be able to make the right decisions this will lead to an exponential increase in the time consumed for communication. Agile methodologies alleviate this problem. But in the end it is up to you to propagate important information to the right people.


9. Make sure everybody understands the big picture: their work has implications

This will help you greatly because will allow team members to design and implement in a way that you don’t have to fight. It is also hard work from your part.


10. Fight for architecture and design consistency

Doing the right thing from the design and architecture point of view is not more costly. It is actually cheaper in every project longer than a couple of months. Every early investment in architecture pays for itself later during integration and maintenance. Even if you have to admit an occasional hack or prototype in the code base you should contain it in very specific modules.


11. Know the status of everybody’s work and detect slippage

This allows for corrective actions and for early communication with the management. You don’t want to be caught by surprise. Remember that during 90% of the allocated time for a task the code is 90% complete.


12. Record technical debt if you need shortcuts but try to maintain architectural integrity; report the debt

This one is very important for products that will have multiple releases. Technical debt should be analyzed at the beginning of each iteration.


13. Use the process that makes sense in your particular case

Tough one. Sometimes (most of the times?) the process is not up to you. In the enterprise usually the process is pre-decided. But always keep in mind that the process in itself means nothing. It is the people who give meaning to the process. Good people can make the worst process work while the wrong team cannot make any process work. Waterfall can be implemented in a very agile way and the agile methodologies can be applied with “rigor mortis” agility (see The Agile 800 Pounds Gorilla).


14. Avoid dogmas – question why everything is done the way is done; make sure everybody else knows the reasons

Sometimes I hear from programmers: we are agile and combine XP and Scrum and we also do TDD (Test Driven Development – I still hope for a TDD that means Thought Driven Development). The questions that pop up in my mind are: Do you need all those? Do you “really” do them by the book?

Anyway the point here is don’t do anything just because it is the way it has always been done. Understand why. Then explain the reasons to all team members. Rinse and repeat.


15. Avoid design by committee; listen to everybody but make your own decisions

No good design is born from referendum. There are lots of people making wild exotic suggestions when their a$ is not on the line. There are also excessively prudent ideas born from fear. Even with good ideas you have to filter them and make them yours before you can include them in the design. A good architecture and a good design is usually born in one mind, an open mind that looks around. The obvious example is Linux.


Build your relationship with the team


16. Gain the team’s respect with the quality of your work and by doing what you are preaching

If you want something from a group of people you have to be an example for that something. Show them quality if you want quality. Show them enthusiasm if you want enthusiasm. And so on… but with a team of programmers don’t forget to show them good code and good design.


17. Be fair

Being perceived as fair by your team is essential and unfortunately this is really hard to get because you have to say no sometimes. No, to good ideas that will improve the product. No, to bad ideas that will improve somebody’s resume. The way you say “no” and when you say “no” and to whom you say it makes all the difference.

Also be fair in allocating work. If somebody is more capable and is able to do more, be sure to compensate that person in some form. A programmer whom I respect deeply once said to me: “I finished my work and then I started to help John. He was way behind and the boss asked me to give him a hand. After a week we were still behind because John’s code was a mess and I had to basically start over. And at that time, in a meeting, the boss screamed at me because I didn’t do John’s work faster!”. The story speaks for itself.


18. Admit your mistakes

Goes hand in hand with the previous advice. It takes courage to admit your mistakes and to make yourself vulnerable in front of your team, but this will build trust between you and the team. Just be careful not to make mistakes too often.


19. Publicly recognize both team’s and individual members’ merits

Think about a scenario: an emergency arises and you ask a team member to take care of it. The person solves the crisis, perhaps with a lot of personal effort. Then, in a meeting with the whole team, and higher management, you say “We worked hard as a team and we solved it”. If you don’t mention the person by name they will never forgive you.


20. Don’t blame anybody publicly for anything

In fact as a tech lead you cannot blame anybody but yourself for anything. The moment you blame a team member in public is the moment when the team starts to die. Internal problems have to be solved internally and preferably privately.


21. Build morale and confidence by offering early victories to the team and to its individual members

I cannot over stress the importance of this advice. Victories bring victories and sometimes you have to set up the first one. If you offer the chance to early victories the team will gel faster and the enthusiasm will create other successes. The best scenario is when somebody manages to accomplish something he was sure he cannot do.


22. Match people and tasks based on skills and their personal preference if possible; explain your decisions

Another difficult skill to master. Everybody in the team wants the glamorous parts that use the latest technology. You have to match every task with a person and you have to make them happy with what they got. It has to be challenging and comfortable at the same time for all of them. This is no easy feat but it can be done. You have to go back and look at what motivates each person in your team.


23. Work the estimates with the team don’t come up with them

If you don’t do it you will be perceived as not fair. Also keep in mind the estimate, to have any meaning, has to be done by the person who will do the work.


24. Mentor people

It is your job to raise the education level of your team. By doing this you can build relationships at a more personal level and this will gel the team faster and harder. It is very effective with more junior people in the team but there are ways to approach even more senior members, just try not to behave like a teacher.


25. Listen to and learn from people

Even if you are the most experienced developer on the team you can always find new things and learn form others. Nobody is a specialist in everything and some of your team members can be domain specialists who can teach you a lot.


26. Explain your technical decisions

There are many reasons for this advice. By trying to explain your decision you get to understand it better. You get valuable feedback. You ideas are bought faster. You make people understand that you value their opinion.


Build your relationship with the management and business people


27. Be sure you have authority along with responsibility

Depending on the situation this might be either implied or impossible to get. Usually it’s in between – you are backed up and given some authority but you have to work and get the rest as earned authority by making the team respect you. It is always useful to understand where you start.


28. Be sure you get requirements and not architecture/design masked as requirements

Sometimes business people fancy themselves architects, sometimes they just speak in examples. They can ask for technology XYZ to be used when what they really mean is they want some degree of scalability. Be sure to avoid hurting feelings but be firm and re-word everything that seems like implied architecture. Get real requirements. To be able to do this you have to understand the business.


29. Explain technical decisions in business terms

Don’t explain your technical decisions to your managers the same way you explain them to your team. The business benefit derived from our decisions is all that matters here. Technical benefits, while sometimes understood, may look like over engineering.


30. Try to be accurate in your estimates; avoid being too optimistic and don’t push it with hidden padding; explain the need for padding

Your managers are not born yesterday. They understand software development better than you imagine but they look at it from a different direction. Present your team’s estimate and clearly add the padding as a result of unknowns in the presented estimate.


31. Set reasonable expectations

Don’t be too optimistic. If this is your first project as tech lead be cautious when you predict time to market, quality and feature coverage. It is always better to promise less and deliver more than the other way around. There are always hidden dangers in any quest.


32. Understand the relationships and dependencies with other teams or projects

If the project is part of a bigger one you have to know who depends on you and what they want and who you depend on and tell them what you want.


33. Accurately report the status with alarms, explanations and solutions; report any technical debt

While being punished as the bearer of bad news is a valid concern, a good manager will always appreciate early warnings. Just be sure to bring at least a solution with your problem. The technical debt and its effects have to be communicated when they are significant since they can influence the business.


34. Resist pressure for change in requirements, and more important for shortcuts…

…but don’t forget the requests might have a sound business reason. Be flexible, trade and negotiate if necessary.


35. Be aware of politics

I am not going to get in juicy details here since this was discussed extensively many times. Just be aware politics exist and the fact is natural in any human society.


36. React to surprises with calm and with documented answers

Never get carried away with refuses or promises when confronted with surprises. Ask for time to think and document/justify your answers. It will make you look better and it will get you out of ugly situations.


I got to the end of my long list and I realize it is still too short. But as always experience will be the best teacher. This is just a starting point. Good luck!

8/28/15

Technical Debt

The term technical debt was coined by Ward Cunningham to describe the obligation that a software organization incurs when it chooses a design or construction approach that's expedient in the short term but that increases complexity and is more costly in the long term.
Ward didn't develop the metaphor in very much depth. The few other people who have discussed technical debt seem to use the metaphor mainly to communicate the concept to technical staff. I agree that it's a useful metaphor for communicating with technical staff, but I'm more interested in the metaphor's incredibly rich ability to explain a critical technical concept to non-technical project stakeholders.

What is Technical Debt? Two Basic Kinds

The first kind of technical debt is the kind that is incurred unintentionally. For example, a design approach just turns out to be error-prone or a junior programmer just writes bad code. This technical debt is the non-strategic result of doing a poor job. In some cases, this kind of debt can be incurred unknowingly, for example, your company might acquire a company that has accumulated significant technical debt that you don't identify until after the acquisition. Sometimes, ironically, this debt can be created when a team stumbles in its efforts to rewrite a debt-laden platform and inadvertently creates more debt. We'll call this general category of debt Type I.
The second kind of technical debt is the kind that is incurred intentionally. This commonly occurs when an organization makes a conscious decision to optimize for the present rather than for the future. "If we don't get this release done on time, there won't be a next release" is a common refrain—and often a compelling one. This leads to decisions like, "We don't have time to reconcile these two databases, so we'll write some glue code that keeps them synchronized for now and reconcile them after we ship." Or "We have some code written by a contractor that doesn't follow our coding standards; we'll clean that up later." Or "We didn't have time to write all the unit tests for the code we wrote the last 2 months of the project. We'll right those tests after the release." (We'll call this Type II.)
The rest of my comments focus on the kind of technical debt that's incurred for strategic reasons (Type II).

Short-Term vs. Long-Term Debt

With real debt, a company will maintain both short-term and long-term debt. You use short-term debt to cover things like gaps between your receivables (payments from customers) and expenses (payroll). You take on short term debt when you have the money, you just don't have it now. Short-term debt is expected to be paid off frequently. The technical equivalent seems straightforward. Short-term debt is the debt that's taken on tactically and reactively, usually as a late-stage measure to get a specific release out the door. (We'll call this Type II.A.)
Long term debt is the debt a company takes on strategically and proactively--investing in new capital equipment, like a new factory, or a new corporate campus. Again, the technical equivalent seems straightforward: "We don't think we're going to need to support a second platform for at least five years, so this release can be built onthe assumption that we're supporting only one platform." (We'll call this Type II.B.)
The implication is that short-term debt should be paid off quickly, perhaps as the first part of the next release cycle, whereas long-term debt can be carried for a few years or longer.

Incurring Technical Debt

When technical debt is incurred for strategic reasons, the fundamental reason is always that the cost of development work today is seen as more expensive than the cost will be in the future. This can be true for any of several reasons.
Time to Market. When time to market is critical, incurring an extra $1 in development might equate to a loss of $10 in revenue. Even if the development cost for the same work rises to $5 later, incurring the $1 debt now is a good business decision.
Preservation of Startup Capital. In a startup environment you have a fixed amount of seed money, and every dollar counts. If you can delay an expense for a year or two you can pay for that expense out of a greater amount of money later rather than out of precious startup funds now.
Delaying Development Expense. When a system is retired, all of the system's technical debt is retired with it. Once a system has been taken out of production, there's no difference between a "clean and correct" solution and a "quick and dirty" solution. Unlike financial debt, when a system is retired all its technical debt is retired with it. Consequently near the end of a system's service life it becomes increasingly difficult to cost-justify investing in anything other than what's most expedient.

Be Sure You Are Incurring The Right Kind of Technical Debt

Some debt is taken on in large chunks: "We don't have time to implement this the right way; just hack it in and we'll fix it after we ship." Conceptually this is like buying a car—it's a large debt that can be tracked and managed. (We'll call this Type II.A.1.)
Other debt accumulates from taking hundreds or thousands of small shortcuts--generic variable names, sparse comments, creating one class in a case where you should create two, not following coding conventions, and so on. This kind of debt is like credit card debt. It's easy to incur unintentionally, it adds up faster than you think, and it's harder to track and manage after it has been incurred. (We'll call this Type II.A.2.)
Both of these kinds of debt are commonly incurred in response to the directive to "Get it out the door as quickly as possible." However, the second kind (II.A.2) doesn't pay off even in the short term of an initial development cycle and should be avoided.

Debt Service 

One of the important implications of technical debt is that it must be serviced, i.e., once you incur a debt there will be interest charges.
If the debt grows large enough, eventually the company will spend more on servicing its debt than it invests in increasing the value of its other assets. A common example is a legacy code base in which so much work goes into keeping a production system running (i.e., "servicing the debt") that there is little time left over to add new capabilities to the system. With financial debt, analysts talk about the "debt ratio," which is equal to total debt divided by total assets. Higher debt ratios are seen as more risky, which seems true for technical debt, too.

Attitudes Toward Technical Debt

Like financial debt, different companies have different philosophies about the usefulness of debt. Some companies want to avoid taking on any debt at all; others see debt as a useful tool and just want to know how to use debt wisely.
I've found that business staff generally seems to have a higher tolerance for technical debt than technical staff does. Business executives tend to want to understand the tradeoffs involved, whereas some technical staff seem to believe that the only correct amount of technical debt is zero.
The reason most often cited by technical staff for avoiding debt altogether is the challenge of communicating the existence of technical debt to business staff and the challenge of helping business staff remember the implications of the technical debt that has previously been incurred. Everyone agrees that it's a good idea to incur debt late in a release cycle, but business staff can sometimes resist accounting for the time needed to pay off the debt on the next release cycle. The main issue seems to be that, unlike financial debt, technical debt is much less visible, and so people have an easier time ignoring it.

How do You Make an Organization's Debt Load More Visible?

One organization we've worked with maintains a debt list within its defect tracking system. Each time a debt is incurred, the tasks needed to pay off that debt are entered into the system along with an estimated effort and schedule. The debt backlog is then tracked, and any unresolved debt more than 90 days old is treated as critical.
Another organization maintains its debt list as part of its Scrum product backlog, with similar estimates of effort required to pay off each debt.
Either of these approaches can be used to increase visibility into the debt load and into the debt service work that needs to occur within or across release cycles. Each also provides a useful safeguard against accumulating the "credit card debt" of a mountain of tiny shortcuts mentioned earlier. You can simply tell the team, "If the shortcut you are considering taking is too minor to add to the debt-service defect list/product backlog, then it's too minor to make a difference; don't take that shortcut. We only want to take shortcuts that we can track and repair later."

Ability to Take on Debt Safely Varies

Different teams will have different technical debt credit ratings. The credit rating reflects a team's ability to pay off technical debt after it has been incurred.
A key factor in ability to pay off technical debt is the level of debt a team takes on unintentionally, i.e., how much of its debt is Type I? The less debt a team creates for itself through unintentional low-quality work, the more debt a team can safely absorb for strategic reasons. This is true regardless of whether we're talking about taking on Type I vs. Type II debt or whether we're talking about taking on Type II.A.1 vs. Type II.A.2 debt.
One company tracks debt vs. team velocity. Once a team's velocity begins to drop as a result of servicing its technical debt, the team focuses on reducing its debt until its velocity recovers. Another approach is to track rework, and use that as a measure of how much debt a team is accumulating.

Retiring Debt

"Working off debt" can be motivational and good for team morale. A good approach when short-term debt has been incurred is to take the first development iteration after a release and devote that to paying off short-term technical debt.
The ability to pay off debt depends at least in part on the kind of software the team is working on. If a team incurs short-term debt on a web application, a new release can easily be rolled up after the team backfills its debt-reduction work. If a team incurs short-term debt in avionics firmware— the pay off of which requires replacing a box on an airplane— that team should have a higher bar for taking on any short-term debt. This is like a minimum payment--if your minimum payment is 3% of your balance, that's no problem. If the minimum payment is $1000 regardless of your balance, you'd think hard about taking on any debt at all.

Communicating about Technical Debt

The technical debt vocabulary provides a way to communicate with non-technical staff in an area that has traditionally suffered from a lack of transparency. Shifting the dialog from a technical vocabulary to a financial vocabulary provides a clearer, more understandable framework for these discussions. Although the technical debt terminology is not currently in widespread use, I've found that it resonates immediately with every executive I've presented it to as well as other non-technical stakeholders. It also makes sense to technical staff who are often all-too-aware of the debt load their organization is carrying.
Here are some suggestions for communicating about debt with non-technical stakeholders:
Use an organization's maintenance budget as a rough proxy for it's technical debt service load. However you will need to differentiate between maintenance that keeps a production system running vs. maintenance that extends the capabilities of a production system. Only the first category counts as technical debt.
Discuss debt in terms of money rather than in terms of features. For example, "40% of our current R&D budget is going into supporting previous releases" or "We're currently spending $2.3 million per year servicing our technical debt."
Be sure you're taking on the right kind of debt. Not all debts are equal. Some debts are the result of good business decisions; others are the result of sloppy technical practices or bad communication about what debt the business intends to take on. The only kinds that are really healthy are Types II.A.1 and II.B.
Treat the discussion about debt as an ongoing dialog rather than a single discussion. You might need several discussions before the nuances of the metaphor fully sink in.

Technical Debt Taxonomy

Here's a summary of the kinds of technical debt:
Non Debt
Feature backlog, deferred features, cut features, etc. Not all incomplete work is debt. These aren't debt, because they don't require interest payments.
Debt
I. Debt incurred unintentionally due to low quality work
II. Debt incurred intentionally
II.A. Short-term debt, usually incurred reactively, for tactical reasons
II.A.1. Individually identifiable shortcuts (like a car loan)
II.A.2. Numerous tiny shortcuts (like credit card debt)
II.B. Long-term debt, usually incurred proactively, for strategic reasons

Summary

What do you think? Do you like the technical debt metaphor? Do you think it's a useful way to communicate the implications of technical/business decision making to non-technical project stakeholders? What's your experience? I look forward to your thoughts.

Resources 

Definition of a Tech Lead

Good summary of a “tech lead” by James McGovern:
If you are in this role and want to live up to your title, then you need the following skills:
  • Accountable – The buck stops here, someone who can shoulder the responsibility without pointing fingers at others.
  • Adaptable – Life changes fast, if can’t change with the times, you’ll be left behind.
  • Approachable – their team can ask them questions and talk to them.
  • Attentive – they actually listen to their team and understand them.
  • Aware – they’re aware of what is going on around them instead of sticking their head in the sand.
  • Can type – No hen peck typists need apply in this industry.
  • Charismatic – People have got to want to listen to you.
  • Communicative – You’ve got to want to communicate with your team.
  • Competent – You’ve gotta know your stuff.
  • Confident – If you’re not confident in yourself, how is anyone else going to be?
  • Decisive – can make decisions themselves and be accountable for them.
  • Driven – You’ve gotta see the goal and go right after it.
  • Focused – You’ve gotta have the staying power to keep going and reach the goal.
  • Inspirational – this is the most important one for me! If you can’t inspire people, what are you doing?
  • Meticulous – The truth is in the details.
  • Nurturing – The test of a good teacher is when their students surpass them.
  • Resourceful – You’ve gotta be able to find the answers to the things you don’t know.
  • Technically minded – In this industry at least.
  • Understanding – If your team don’t think you understand them, they won’t bother trying to understand you.
As a leader, it’s your delegates that help build your success. Treat them like gold, and they will do the same for you. One non-programmer that can inspire 10 “average” programmers to greatness is worth more than one great programmer who can’t inspire their team to do more than meet their job requirements…

11/1/11

Creating Quality Assurance


by Brad Egeland

Wikipedia defines quality assurance as the systematic monitoring and evaluation of the various aspects of a project, service or facility to maximize the probability that minimum standards of quality are being attained by the production process.
In project management terms, quality assurance, or QA, is the sum of the planning and the implementations of the plans the project manager, the project team, and management does to ensure the project meets the demands of quality. The project manager must ensure that the proper QA processes and tasks are built into the project schedule using a PM software tool and viewer like Seavus’ Project Viewer.  Keep in mind that quality assurance is not something that is done only at the end of the project, but before and during the project.
In some organizations, the Quality Assurance department or another entity will complete the QA activities. Quality assurance is interested in finding the defects and then fixing the problems. There are many different approaches to quality assurance, depending on the quality system the organization or project team has adapted. There are really just two general types of quality assurance:
  • Internal QA. Assurance provided to management and the project team
  • External QA. Assurance provide to the external customers of the project
Preparing for Quality Assurance
There are three inputs the project manager and the project team will need to prepare for QA:
  • The quality management plan. This plan defines how the project team will implement and fulfill the quality policy of the performing organization.
  • Results of quality control measurements. Quality control tests will provide these measurements. The values must be quantifiable so results may be measured, compared, and analyzed. In other words, “pretty close to on track” is not adequate; “95 percent pass rate” is more acceptable.
  • Operational definitions. The metrics that define the project processes, their attributes, and units of measure are needed for QA.
Applying Quality Assurance
The QA department, management, or in some instances, even the project manager can complete the requirements for QA. Quality assurance can be accomplished using the same tools used for project planning:
  • Benefit cost analysis
  • Benchmarking
  • Flowcharting
  • Design of experiments
  • Cost of quality
Completing a Quality Audit
Quality audits are about learning. The idea of a quality audit is to identify the lessons learned on the current project to determine how to make things better for this project – and other projects within the organization. The idea is that one project manager can learn from the implementations of another project manager and vice versa.
Quality audits are formal reviews of what’s been completed within a project, what’s worked, and what didn’t work. The end result of the audit is to improve performance for the current project, other projects, or the entire organization.
Quality audits can be scheduled at key intervals within a project or they can come without warning, depending on your organization’s own internal policies or possibly the requirements of whatever contract you might be working on (i.e., government contract). And the audit process can vary depending on who is completing the audit: internal auditors or hired, third party experts.

Improving the Project
The lone output of quality assurance is quality improvement.
Quality improvement requires action to improve the project’s effectiveness. The actions to improve the effectiveness may have to be routed through the change control system, which means change requests, analysis of the costs and risks, and involvement from the Change Control Board – if one exists in your organization or on your program or project.

Information or this article was derived, in part, from Phillips’ book entitled, “PMP Project Management Professional Study Guide.”