Creating a believable vision and strategy can be a Herculean
task especially if you have not done it before.
It is an area where I personally have struggled a lot. For a long time I
thought it was the sole purview of the CEO and the executive team. Certainly for the corporate vision and
strategy that is almost always true. But software engineering teams need to
have a strategy too. It can often be implied, especially on a small team, but
having it explicitly stated is beneficial.
The strategy and the vision, or lack thereof, can have a
huge impact on the team so it is important to get it right. It defines the approach
to getting the work done; it provides the daily context for the team; and helps
set the culture. There are many ways to
go wrong. Here are a few ways that I
have experienced first-hand:
- Going without – this can result in an ineffective team
- Ridiculous – you can lose the team this way
- Incomplete – you can do the wrong thing
- Inconsistent with the rest of the company – this creates conflict
- Incomprehensible – you thrash
Hopefully by seeing some bad examples, you can avoid the
same pitfalls, and set a good strategy and vision. Because if you do it right, you can get
everyone on the team motivated and going the same direction and that is a
beautiful thing.
Going without
Early in my career, I thought it was all about detailed
planning. Given a comprehensive plan the team would simply do what needed to
get done. But that was far from the truth. On a fixed price program where we
got paid on milestone deliveries, I was unable to motivate my team to complete
the work. The problem was that the system that had been specified and approved
as part of the contract signing process was not technically sound (i.e. it
would not work). But we were contractually required to deliver what had been specified.
After floundering for a while, I got some good advice; tell the team the truth.
I told them my long term vision was to develop a workable system but we were
going to have to do it in a roundabout way. The first step was to do the design
for the system that was not going to work, to confront the clients at the
design stage, prove that a subset of the requirements were incorrect, show an alternate
approach, rework the contract, and then get ourselves back on the right track.
There was no project plan that could communicate that. But with this knowledge
the team was able to get the necessary payment milestones done without having
to spend too much time on work they knew was going to be thrown out. And once
that was out of the way, they started to focus on the doing the work the right
way. By setting a believable vision and
approach for the engineering team, I was able to get them on track, and focus
on getting the program corrected. It was simple and effective.
The ridiculous
I once had a VP of Engineering, who had come to the company
from a completely different line of work and from a marketing background. We were a systems shop where the real value
was in the software we developed. We had 3 products we were barely supporting
and were being asked to do a forth with no staffing increases. The new VP spent a few weeks assessing the
situation and told me that even though everyone was working hard, we needed to
stop doing so much and focus on one area only to be successful. His solution
was to “focus on software”. Say what? This did not provide any focus and worse
than that indicated clearly that he had no understanding of what the team did. Several people left after that announcement,
me included.
The incomplete
On another team, our VP of Engineering gave the edict that
our focus was on quality first. It made sense;
since our focus in the past couple of years had been features, features,
features… getting them to market as soon as humanly possible. Unfortunately,
quality had suffered as a result. But his strategy for improving quality was
not complete. The stated (and measured) strategy was to fix bugs quickly.
Clearly fixing bugs was an important part of the problem but that was primarily
a tactical effort. There was also a need
to fix our requirements definition, to attack the technical deficit we had
accumulated, to rework several major subsystems, to make the system more serviceable
for the support team and to improve our system testing. We needed to build quality into the product
and not simply try to fix it after it went out the door. But given what was
measured (and the punishments that went along with failure to comply) the team
focused on bug fixing only, and the rest of the quality initiatives suffered.
The results, as far as I was concerned, were predictable and not good. The escape rate for bugs did not change and so
much effort was spent on fixing fielded bugs that feature development suffered.
Eventually, after his departure, the focus was reset and the strategy for attaining
better quality was expanded.
The inconsistent
At a company with 3 development sites, the unwritten but
commonly stated vision of my site’s engineering group was
- Performance is a key factor in the product’s success.
- Everyone should strive for technical excellence.
The team I worked with rallied around it and worked hard to
deliver excellent code and a product that’s performance was second to none. We argued to find get the best technical
solution to a problem and we hired only the best engineers. It was great, or at
least it seemed great for a short while. The problem was that the vision was not
shared between all the engineering teams yet we all worked together on the same
product. The other teams were focused on quick feature addition to address
short term customer needs. The result was that each site was very loyal to
their own team but did not like or trust the teams in the other site (my site was
considered a bunch of elitists and the other sites were considered to be
thoughtless hacks) and the product suffered. Without alignment, it just did not
work.
The incomprehensible
At one company we had a strategy and vision that was loved
by analysts, marketing, and the execs. We
were showing market leadership by creating a new market and had a staged approach
for achieving the vision. It seemed perfect. But to the product team the vision and
strategy were incomprehensible. The current product suite had only a tenuous
relationship to the new market. The strategy was staged but the steps were
amazingly large and literally required technological miracles for them to be
completed in the required time frames (whether the strategy authors knew it or
not). So both engineering and product
management struggled. Some progress was made but essentially the product road-map stayed in chaos for a couple of years. As the realization sunk in that
we had not made any product or sales progress that would help forge this new
market, we retrenched. Several
executives left the company and the vision and strategy were reset.
The ideal
I don’t have a prescription for getting to the right
strategy and vision for your team. But here are some rules that I follow:
- It needs to be the truth.
- It needs to be attainable but should stretch people.
- It needs be understandable.
- It needs to be consistent with the corporate vision and strategy, and with the approach of other teams.
- If possible, it should inspire people.
On one team that was just starting out, we used the following
template:
Vision: We are developing a world class [specific solution]
for [our customers] which will provide [this specific value] at this
[performance level].
Strategy:
Create a base product that we can put into beta test within
a year of starting that
a.
Provides at least [this specific level of value
from the vision]
b.
Supports this [minimum performance
characteristic]
c.
Fits seamlessly within the customers operational
framework
d.
Clearly shows the value to the customer
Ensure that the initial product works for the customers by
e.
Addressing all major issues noted in the beta
program before the initial release
f.
Release product updates on a monthly basis that
i.
Fix customer-visible bugs
ii.
Improve the serviceability of the solution
iii. Improve the value of the solution. The target
goal for the value after 12 months of real world experience is [this amount].
Follow up with a product within the next year that
g.
Improves the performance [to this level]
h.
Works on the same equipment as the initial
release with an easy upgrade path
i.
Gives the development team visibility into how
to continuously improve the product
The team was motivated by this strategy and
vision. They used it to make good product decisions; as it helped clarify what
was important and what was nice to have. It did not replace having detailed
requirements but provided context for the requirements. It worked. The initial product
and dot releases exceeded management’s expectations.
If you were starting with a clean slate, you could just say “Do
the right thing”. That might work but it would take a pretty rare (or extremely
small) team to make that successful. If I could start with a clean slate and
was developing a consumer software product, I might have the following vision
for my engineering team.
- Keep it simple (eliminate any unnecessary complexity in our systems and our product)
- Add value (make sure whatever you are doing is adding value to the organization, to the product, or to the customer)
- Be collaborative (the team is more important than the individual)
- Innovate (we win by changing the game).
Of course, we would need a strategy to support this, but you
can imagine having
- Architecture/design/code reviews that ensure we are looking at the simplest solution.
- Regular meetings with customers to ensure that we are truly adding value.
- Days set aside with no agenda, just an opportunity to let be people innovate.
So give it some thought. Set a vision for your team. Make
sure you believe what you say and that you can defend it. And whatever you do,
don’t repeat the silly mistakes that my managers or I made.
No comments:
Post a Comment