The Principles of Sustained Software Development

advertisement
The Principles of Sustained
Software Development
Lecture 2
CIS 6101 – Software Processes and
Metrics
1. Introduction
• We normally develop software based on required features, bug
fixing, and a plan.
• Plans are typically linear, start with analysis and design,
continue with coding, testing, fixing, tracking against the plan
and customer use.
• This engineering plan that does not work too well for software.
• Real world of software development involves a changing
ecosystem of technology, competitors, and customers
• Until programmers are exposed to this commercial system,
none of this seems significant.
– Then, all of a sudden, they write code and must live with it.
– And, the code they live with is not just their code either!!
Bridge from Academic to Practical
• Must establish a mindset to create a culture of
software development for sustained
development despite surrounding complexity
• Without the proper mindset, developers fall
back to traditional linear approaches due to a
degree of comfort and familiarity.
– Here, too little structure in code-then-fix
development) or too much bureaucracy which tends
to stifle innovation, flexibility, and change tolerance
– the very properties a dynamic and changing
environment requires.
Practice versus Principles
• Practices often viewed as templates for success.
• In truth, practices must be tuned to the situation and the
team. (no one size fits all!)
• Bureaucratic rules are in place for predictability, which is
often achieved but at the cost of innovation and ability to
respond to customer requests.
• We can implement practices, but we need the right mindset
/ culture to support the practices, for you’d be better off
doing ad-hoc software development.
• Before a team talks about development practices, we need
to first focus on the principles to be followed.
• Principles guide us every day making tradeoffs and fostering
the right mindset and culture for the team and organization;
• Practices follow from the principles you choose to adopt.
2. Why Principles are More
Important than Practices
• Similar to difference between vision and features.
• Unsuccessful projects start with defining features
designed to meet user needs. (the Whats)
• Successful projects start with a clear user need and
vision of HOW to meet that need.
• The vision is simple and can be used to develop an
initial set of features and a prototype for customer
feedback, needed to refine the feature set.
• This is iterative development (as it is called in agile
software development)
Key Aspects in Vision-Oriented
Approach to Produce Development
1. A user need and vision so it is clear WHAT is
being built
2. Rapid refinement to adapt to change
3. A close relationship with users so they can
provide timely feedback
4. Continual learning to refine the product so it
best meets user needs while avoiding
unnecessary features.
Rules (Lists of Practices)
• No magic set.
• Our education specifies a set of rules (stepby-step procedures) to solve problems.
• But problems arise as we rarely anticipate
the role of complexity in the application of
the rules.
• Rules work fine for simple problems but
break down as complexity increases.
Principles and Practices
(Vision and Features)
• Principles are like vision; practices like features.
• Principles define what you want to accomplish; practices
define how you want to go about it.
• Too much today is around sets of practices (best practices)
– Again, following a set of practices implies safety, comfort,
completeness, predictability, sense of confidence…
• Practices are important, but if you don’t know what you
are trying to achieve, then efforts will be misdirected.
• More important to recognize WHAT team is trying to
achieve rather than HOW they achieve it.
Principles and Practices
(Vision and Features)
• Good teams listen to practices and ask
questions as to what (vision) they are trying to
achieve, and apply the practices as needed.
• Great teams see through the rule-based façade
(practices) and see the rules as a solid
foundation to build on.
• Great teams work from a clear user need (high
user value through features and high quality)
and a vision (the principles) and continually
learn and refine their approach (the practices) as
their project progresses.
Three Elements to Sustainable
Development
• Summarizing: a development team needs:
• 1. A vision and set of guiding principles that define what
needs to be accomplished
• 2. Practices that are consistent with the principles (these
are not a set of rules; rather building blocks that your team
should refine and add to over time through continual
improvement of your approach to software development)
• 3. A tight feedback loop of experimentation, learning, and
refinement so that during the development of the product
the project team is able to change, modify, and enhance
their practices as required so the team can best fulfill the
principles (vision).
3. Applying the Principles of
Sustainable Development
• Given a clear vision and desire to achieve sustainable
software development, these principles apply:
1. Continual refinement of the product and project
practices
2. A working product at all times
3. A continual investment in and emphasis on design
4. Valuing defect prevention over defect detection
Practices support these principles.
Let’s look at each principle in turn.
Principle: Continual Refinement of
Product and Project Practices
• This is a recurring theme in software development.
• Software is complex and must evolve over a long period
in the face of changing requirements and evolving
ecosystem
– Markets, partners, technologies, and competition
• Things change during development
– Team must plan for change by employing practices to
support managing change.
• Thus team needs user involvement and lightweight
practices to keep on track, monitor progress and risks.
• The set of practices establishes the heartbeat (rhythm)
of the project and is a must for successful sustained
development.
Principle: A Working Product at All Times
• Keep product in a near-shippable state at all times, even if it is not
functionally complete. Product needs to be in a working state.
• Means emphasis of team is a working product and not producing
documentation of user requirements, software design, etc. that ‘might’
lead a product.
• This is a key principle of agile development.
• Best way to get feedback is to provide users something they can really
comment on, even if it is a work in progress.
– Documentation, even really good documentation, does not elicit the same quality of
feedback that a working product can.
– Even prototypes are better than a document.
• Working documents also show the time is being spent on productive
activities. If too much time is spent on documentation, then time will
need to be spent on getting the product back to a working state, which is
time often wasted.
Principle: A Continual Emphasis on Design
•
Design (both good and poor) is very obvious and heavily
influences purchasing decisions.
– Design decisions are made every day and by all members of the team.
– Team need so allow itself to make design changes.
• Do not try to anticipate every future use at beginning of project.
• Design only what you need today while not closing out
possibility of future enhancements.
• Agile development requires considerable design – maybe even
more than traditional design.
• Good design practices extend the life of the product by keeping
implementation in a healthy state
– fosters maintainability and changeability – essential nowadays;
– Ensures a simple long-term design vision.
Principle:
Value Defect Prevention over Defect Detection
• Defect detection involves trying to discover and fix problems
after changes have been incorporated into software.
• Prevention emphasizes catching defects before changes are
merged into the software.
• Assumption in defect detection is on defect tracking systems,
manual testing efforts, and errors reaching the customer.
– Organizations invest a lot in QA activities and in testing.
– Tracking errors and their resolution, prioritizing, reporting, assigning
fixes to proper OPRs, etc. is a huge task – and expensive.
• Often, there is a virtual wall between developers and testors.
• Developers develop new software and provide to QA / QC …
to test prior to release. (more)
Principle:
Value Defect Prevention over Defect Detection
• In defect prevention, defect tracking systems are still needed but
importance greatly reduced.
– Have lower defect counts. Teams have multiple safeguards in place.
– More regression testing, ensuring bug fixes properly testing, and more.
• Heavy emphasis on automated testing to focus on testing the product in
ways that the customer will use the products.
• No virtual walls in defect prevention culture; ideally testers are part of the
team and quality is spread evenly between developers, QA, and testers.
• Defect prevention is required for sustainable development
– Ensures team is highly efficient and is creating value for customer not on
wasted effort.
– By minimizing defect numbers, development teams are able to have productive
conversations with users about features and workflow because users are able
to use the product in realistic ways.
4. Culture, by Descriptive Words and Phrases:
Disciplined
• Team must be highly disciplined in approach and be goal focused.
• Work must be done properly w/no shortcuts.
• Work is really done when they say it is.
• Agile development has been often labeled as being undisciplined.
• Consider: Differences between Discipline and Ceremony
• Ceremony – required actions must be performed
– Requirements document before a certain milestone; Milestones such as a
feature freeze, Weekly status meetings; Design documents; more…
• Discipline - Agile teams minimize ceremony by keeping to task;
producing results (a working product ).
– Unfortunately, people mistakenly believe unless documents are created,
there’ s no discipline, but creating documents is no guarantee a prescribed
process is being followed.
Culture, by Descriptive Words and Phrases:
Responsible
• Team must be responsible for its work and not play the part of a
victim. No blame game!
• Victims go along with a decision and then say, “I told you so.”
• Responsible teams have the courage to take on any situation and
do not get swept up by events.
• They trust others to do the best they can and are diligent that
nothing falls between the cracks.
• Never say that ‘that can’t be done.’
Culture, by Descriptive Words and Phrases:
Leadership
• Team has multiple leaders who work together
• Leaders are not just the managers, team leads, or coaches
• Leaders know their greatest success is when they can help others
to succeed and give them the opportunity to receive the accolades
they deserve, who view success as a team accomplishment and
failure as a personal responsibility, not an opportunity to
apportion blame on others.
• Unfortunately, these people are few and far between and are
rarely promoted into senior management because they lack the
charisma, high-volume talking, and massive ego and selfconfidence – the traits often associated with getting ahead in the
corporate world.
Culture, by Descriptive Words and Phrases:
Visionary and Tactical
•
Effective teams strive for an optimal balance between visionay
(thinking about the long term) and tactical (focusing on today’s
problems) and this balance changes over the course of the project.
• Early in project, there is heavier emphasis on being a visionary;
later, emphasis should be place more on tactics related to finishing
the project.
• Projects fail when there is too much emphasis on tactical issues
too early in the project.
• Great teams are able to balance the two at each moment in the
project.
Culture, by Descriptive Words and Phrases:
Shared Sense of Urgency
• Important that every one on team shares the same sense of
urgency to complete the project.
• If business people are more concerned about completion and
developers are more concerned about the perfect architecture,
failure will result.
• A shared sense of urgency is also the most important factor in
building eams.
• It is NOT compatible personalities or team building exercises or
even mutual respect that makes the bet teams; it is a shared goal
or aggressive but achievable deadline that the team uses as a
rallying cry for getting the project done.
Culture, by Descriptive Words and Phrases:
Shared Sense of Highly Collaborative
• Collaboration is a vital success factor in sustainable development.
• Good teams are able to work together, embrace the differences
between personalities and rules and stive for a successful project.
• They recognize that there are clear rules for each of them to play.
• Always there and should be done sub-consciously.
• Must be done in person and not via email or voice mail, as much
as possible because that is the most effective form of
collaboration.
Culture, by Descriptive Words and Phrases:
Complementary Talents and Skills
• Great cultures recognize talents and skills from each other.
• Too many companies are focused on skill alone and recruit only for
skills.
• But skills can be taught, whereas talent cannot.
• Software development companies are perfect examples where
people who are talented at complex problem solving make
excellent programmers.
• Yet, most ads still look for a certain number of years of experience
programming in a particular language when what they should be
looking for are people who are talented problem solvers.
Culture, by Descriptive Words and Phrases:
Continually Improving and Learning
• Continual improvement and learning is a vital element of
sustainable development.
• Great people and teams continually learn and refine their projects
and how they approach projects.
Culture, by Descriptive Words and Phrases:
Change Tolerant
• Great teams understand that change is necessary and desirable.
• They also understand change must sometimes be made in the face
of conflicting or incomplete information.
• Just because a decision is made at one time does not mean it
cannot be changed or modified as new information becomes
available.
• So teams must be change tolerant.
Culture, by Descriptive Words and Phrases:
Risk Aware
• Risk is a common element in all projects.
• Effective teams are always aware of risk and are able to
differentiate between real and perceived risk and are not afraid to
make decisions with the best information available in the face of
possible risk.
• Always looking for ways to reduce risk too.
Culture, by Descriptive Words and Phrases:
Fun
• Can’t always choose what you do, but you can choose how you do
it.
• Good people and teams recognize this and find ways to make work
more fun for their co-workers and customers.
Download