This document summarizes a workshop on software product development. It begins with definitions of key activities in software development like requirements, estimation, architecture, design, implementation, testing and management. It then discusses the goal of the workshop, which is to give participants an opportunity to evaluate their methods and gain insight into different roles. The workshop also aims to facilitate sharing of ideas between different functions. Various quotes by experts are provided throughout to illustrate different aspects of software development.
Workshop on software product development the backdrop
1. Workshop on software product
development
P Joy Prabhakaran
This deck has a set of semi-formal definitions of different activities in software development
and quotes about these activities by eminent practitioners.
The workshop tries to explore, internalize and decrease the divergence between the
definitions and the ground reality.
2. The Backdrop
The trouble with programmers is that you can never tell what
a programmer is doing until it’s too late.
- Seymour Cray
The bitterness of poor quality remains long after the
sweetness of meeting the schedule has been forgotten.
- Karl Wiegers
3 Biggest Software Lies:
– The program’s fully tested and bug-free.
– We’re working on the documentation.
– Of course we can modify it.
3. Goal of the workshop
• Most professionals involved in software product
development work under tight schedules. This means they
do not have the opportunity to take a step back and
evaluate their methods or work products. This workshop
gives them an opportunity to do so.
• Product development involves various functions and teams.
The workshop will have participants play different roles and
get an insight into “Why sh*t happens”.
• Facilitate sharing of ideas, approaches and work products
between functions. This aims to bring in an appreciation of
both the variance that exists and also the opportunities.
• The workshop is not a “How to ….” guide and will offer no
pre-defined prescription.
4. Functions targeted
• Requirements
• Estimation
• Architecture
• Design
• Partial implementation
• Testing
• Revisions
• Sharing of the results of each phase with other
teams
5. Setting the stage with a couple of
quotes ….
Asking for efficiency and adaptability in the same program is like
asking for a person to be rich and honest. Although wealth and
honesty have been known to occur in the same person, we'll
probably have to settle for one or the other. At least that's better
than neither. (Modified version of a quote from The Psychology
of Computer Programming by Gerald Weinberg)
If builders built houses the way programmers built programs, the
first woodpecker to come along would destroy civilization.
6. Requirements
Software Requirements is a field within software engineering that deals with
establishing the needs of stakeholders that are to be solved by software.
……
The activities related to working with software requirements can broadly be
broken up into Elicitation, Analysis, Specification, and Management.
- Wikipedia
The only time you can really find the best problem definition is after you found
the solution.
- De Bono
No matter how much you want it to be a technical problem, it's a people
problem
- Unknown
7. Estimation
Software development effort estimation is the process of predicting
the most realistic amount of effort (expressed in terms of person-
hours or money) required to develop or maintain software based on
incomplete, uncertain and noisy input. Effort estimates may be used as
input to project plans, iteration plans, budgets, investment analyses,
pricing processes and bidding rounds
- Wikipedia
[The common definition of estimate is] ‘An estimate is the most
optimistic prediction that has a non-zero probability of coming true’ . . .
Accepting this definition leads irrevocably toward a method called
“what’s-the-earliestdate-by-which-you-can’t-prove-you-won’t-be-
finished” estimating.
— Tom DeMarco (1982)
8. Architecture
Software application architecture is the process of defining a structured solution that
meets all of the technical and operational requirements, while optimizing common
quality attributes such as performance, security, and manageability. It involves a series
of decisions based on a wide range of factors, and each of these decisions can have
considerable impact on the quality, performance, maintainability, and overall success
of the application.
- MSDN
All architecture is design but not all design is architecture. Architecture represents the
significant design decisions that shape a system, where significant is measured by cost
of change.
- Grady Booch
Things are usually easier said than done, and software architects are notoriously good
at coming up with things to say.
– Timothy High
With good program architecture debugging is a breeze, because bugs will be where
they should be.
-David May
9. Design
Software design is the process by which an agent creates a specification of a
software artifact, intended to accomplish goals, using a set of primitive
components and subject to constraints. Software design may refer to either
"all the activities involved in conceptualizing, framing, implementing,
commissioning, and ultimately modifying complex systems" or "the activity
following requirements specification and before programming in a stylized
software engineering process."
- Wikipedia
Good designers can create normalcy out of chaos —they can clearly
communicate ideas through the organizing and manipulating of words and
pictures.
- Jeffery Veen
Developer testing isn’t primarily about verifying code. It’s about making great
code. If you can’t test something, it might be your testing skills failing you but
it’s probably your code’s design. Testable code is almost always better code.
– Chad Fowler
10. Coding/Implementation
Implementation is the part of the process where software engineers
actually program the code for the project.
- Wikipedia
I’m not a great programmer; I’m just a good programmer with great habits.
- Kent Beck
The most depressing thing about life as a programmer, I think, is if you’re
faced with a chunk of code that either someone else wrote or, worse still,
you wrote yourself but you no longer dare to modify. That’s depressing.
- Peyton Jones
When debugging, novices insert corrective code; experts remove defective
code.
- Richard Pattis
Without requirements or design, programming is the art of adding bugs to
an empty text file.
- Louis Srygley
11. Testing
Software testing is an investigation conducted to provide stakeholders with
information about the quality of the product or service under test.
- Wikipedia
Even perfect program verification can only establish that a program meets
its specification. […] Much of the essence of building a program is in fact
the debugging of the specification.
- Brooks
Reminds me of the awesome bug report I saw once: ‘Everything is broken.
Steps to reproduce: do anything. Expected result: it should work’.
- Felipe Knorr Kuhn
Bad programmers have all the answers. Good testers have all the
questions.
- Gill Zilberfeld
12. Management ….
“You can’t win; you can’t break even; you can’t leave the game”
Ginsberg's Theorem
Freeman's Commentary on Ginsberg's Theorem:
Every major philosophy that attempts to make life seem meaningful is
based on the negation of one part of Ginsberg's Theorem. To wit:
• Capitalism is based on the assumption that you can win.
• Socialism is based on the assumption that you can break even.
• Mysticism is based on the assumption that you can quit the game.
Freeman's Commentary on Ginsberg's Theorem
Murphy's Law about Thermodynamics: Things get worse under
pressure.
If you think things are in a mess now, JUST WAIT!
unknown
13. Folks, with that as the backdrop, we will have a short
break and then do a few exercises to experience a bit of all
that we discussed.