27
The Principles of Sustained Software Development Lecture 2 CIS 6101 – Software Processes and Metrics

The Principles of Sustained Software Development

  • Upload
    betrys

  • View
    35

  • Download
    0

Embed Size (px)

DESCRIPTION

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. - PowerPoint PPT Presentation

Citation preview

Page 1: The Principles of Sustained Software Development

The Principles of Sustained Software Development

Lecture 2CIS 6101 – Software Processes and

Metrics

Page 2: The Principles of Sustained Software Development

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!!

Page 3: The Principles of Sustained Software Development

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.

Page 4: The Principles of Sustained Software Development

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.

Page 5: The Principles of Sustained Software Development

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)

Page 6: The Principles of Sustained Software Development

Key Aspects in Vision-Oriented Approach to Produce Development

1. A user need and vision so it is clear WHAT is being built2. Rapid refinement to adapt to change3. A close relationship with users so they can provide timely feedback4. Continual learning to refine the product so it best meets user needs while avoiding unnecessary features.

Page 7: The Principles of Sustained Software Development

Rules (Lists of Practices)

• No magic set.• Our education specifies a set of rules (step-

by-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.

Page 8: The Principles of Sustained Software Development

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.

Page 9: The Principles of Sustained Software Development

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.

Page 10: The Principles of Sustained Software Development

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).

Page 11: The Principles of Sustained Software Development

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 times3. A continual investment in and emphasis on design4. Valuing defect prevention over defect detection

Practices support these principles.Let’s look at each principle in turn.

Page 12: The Principles of Sustained Software Development

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.

Page 13: The Principles of Sustained Software 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.

Page 14: The Principles of Sustained Software Development

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.

Page 15: The Principles of Sustained Software Development

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)

Page 16: The Principles of Sustained Software Development

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.

Page 17: The Principles of Sustained Software Development

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.

Page 18: The Principles of Sustained Software Development

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.’

Page 19: The Principles of Sustained Software Development

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 self-confidence – the traits often associated with getting ahead in the corporate world.

Page 20: The Principles of Sustained Software Development

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.

Page 21: The Principles of Sustained Software Development

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.

Page 22: The Principles of Sustained Software Development

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.

Page 23: The Principles of Sustained Software Development

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.

Page 24: The Principles of Sustained Software Development

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.

Page 25: The Principles of Sustained Software Development

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.

Page 26: The Principles of Sustained Software Development

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.

Page 27: The Principles of Sustained Software Development

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.