Instant Download Software Development Design and Coding With Patterns Debugging Unit Testing and Refactoring 3rd Edition John F. Dooley PDF All Chapters
Instant Download Software Development Design and Coding With Patterns Debugging Unit Testing and Refactoring 3rd Edition John F. Dooley PDF All Chapters
com
https://ebookfinal.com/download/software-development-design-
and-coding-with-patterns-debugging-unit-testing-and-
refactoring-3rd-edition-john-f-dooley/
OR CLICK BUTTON
DOWNLOAD EBOOK
https://ebookfinal.com/download/software-design-and-development-2nd-
edition-samuel-davis/
ebookfinal.com
https://ebookfinal.com/download/testing-it-an-off-the-shelf-software-
testing-process-2nd-edition-john-watkins/
ebookfinal.com
https://ebookfinal.com/download/model-based-software-testing-and-
analysis-with-c-1st-edition-jonathan-jacky/
ebookfinal.com
https://ebookfinal.com/download/automated-software-testing-with-
cypress-1st-edition-narayanan-palani/
ebookfinal.com
Object oriented software engineering using UML Patterns
and Java 3rd, intern. Edition Bruegge
https://ebookfinal.com/download/object-oriented-software-engineering-
using-uml-patterns-and-java-3rd-intern-edition-bruegge/
ebookfinal.com
https://ebookfinal.com/download/the-art-of-unit-testing-with-examples-
in-c-2nd-edition-roy-osherove/
ebookfinal.com
https://ebookfinal.com/download/pragmatic-unit-testing-in-c-with-
nunit-pragmatic-programmers-1st-edition-andy-hunt/
ebookfinal.com
Introduction to Software
Development
“Not only are there no silver bullets now in view, the very nature of software
makes it unlikely that there will be any—no inventions that will do for soft-
ware productivity, reliability, and simplicity what electronics, transistors,
and large-scale integration did for computer hardware. We cannot expect
ever to see twofold gains every two years.”
—Frederick J. Brooks, Jr.1
So, you might be asking yourself, why is this book called Software Development, Design,
and Coding? Why isn’t it called All About Programming or Software Engineering? After
all, isn’t that what software development is? Well, no. Programming is a part of software
development, but it’s certainly not all of it. Likewise, software development is a part of
software engineering, but it’s not all of it.
Here’s the definition of software development that we’ll use in this book: software
development is the process of taking a set of requirements from a user (a problem
statement), analyzing them, designing a solution to the problem, and then implementing
that solution on a computer.
But isn’t that programming? Well, no. Programming is really just the implementation
part, or possibly the design and implementation part, of software development.
Programming is central to software development, but it’s not the whole thing.
Well, then, isn’t it software engineering? Again, no. Software engineering also
involves a process and includes software development, but it also includes the entire
management side of creating a computer program that people will use. Software
1
Brooks, F. 1987. “No Silver Bullet.” IEEE Computer 20 (4): 10–19. www.inst.eecs.berkeley.
edu/~maratb/readings/NoSilverBullet.html.
1
© John F. Dooley and Vera A. Kazakova 2024
J. F. Dooley and V. A. Kazakova, Software Development, Design, and Coding,
https://doi.org/10.1007/979-8-8688-0285-0_1
Chapter 1 Introduction to Software Development
Despite the fact that software development is only part of software engineering,
software development is the heart of every software project. After all, at the end of the
day what you deliver to the user is working code. A team of developers working in concert
usually creates that code. So to start, maybe we should look at a software project from the
outside and ask, what does that team need to do to make that project a success?
In order to succeed at software development, you need the following:
To realize that you don’t know everything you need to know at the
beginning of the project. Software development projects just don’t
work this way. You’ll always uncover new requirements; other
requirements will be discovered to be not nearly as important
as the customer thought; still others that were targeted for the
next release are all of a sudden requirement number one. This is
known as churn. Managing requirements churn during a project
is one of the single most important skills a software developer
can have. If you are using new development tools (say a new
web development framework), you’ll uncover limitations you
weren’t aware of and side effects that cause you to have to learn,
for example, three other tools to understand them (e.g., that
web development tool you want to use is Ruby-based, requires a
specific relational database system to run, and needs a particular
configuration of Apache to work correctly.)
3
Chapter 1 Introduction to Software Development
2
Note that teams that are distributed geographically can also be closer to clients and thus have
better communication with them. Also, the advent of easy and fast conferencing software can
mitigate the disadvantages of remote work.
4
Chapter 1 Introduction to Software Development
To know where you are at all times. It’s that communication thing
again. Most projects have regular status meetings so that the
developers can “sync up” on their current status, get a feel for the
status of the entire project, and to create a sense of camaraderie
within the team. This works very well for smaller teams (say, up
to about 20 developers, many of which will have daily “stand-
up” meetings to sync up at the beginning of each day. Different
process models handle this “stand-up” meeting differently. For
instance, plan-driven models don’t require these meetings,
depending on the team managers to communicate with each
other. Agile processes often require all-hands daily meetings
to facilitate constant team communication in a highly dynamic
project environment.
5
Chapter 1 Introduction to Software Development
The right tools and the right practices for this project. One of the
best things about software development is that every project is
different. Even if you’re doing version 8.0 of an existing product,
things change. One implication of this is that, for every project,
you need to examine and pick the right set of development tools.
Picking tools that are inappropriate is like trying to hammer nails
with a screwdriver; you might be able to do it eventually, but is
sure isn’t easy or pretty or fun, and you can drive a lot more nails
in a shorter period of time with a hammer than with a screwdriver.
Even if you have to first obtain a hammer and then learn how
to use it for the very first time, you are leveling up your toolkit
and your skills in the process, investing in your ability to work
more efficiently going forward. The three most important factors
in choosing tools are the application type you are writing, the
target platform, and the development platform. You usually can’t
do anything about any of these three things, so once you know
what they are, you can pick tools that improve your productivity.
A fourth and nearly as important factor in tool choice is the
composition and experience of the development team. If your
6
Chapter 1 Introduction to Software Development
Conclusion
Software development is the heart of every software project, and it is the heart of
software engineering. Its objective is to deliver excellent, defect-free code to users on
time and within budget—all in the face of constantly changing requirements. This makes
development a particularly hard job to do. But finding a solution to a difficult problem
and getting your code to work correctly is just about the coolest feeling in the world.
“[Programming is] the only job I can think of where I get to be both an engi-
neer and an artist. There’s an incredible, rigorous, technical element to it,
which I like because you have to do very precise thinking. On the other
hand, it has a wildly creative side where the boundaries of imagination are
the only real limitation. The marriage of those two elements is what makes
programming unique. You get to be both an artist and a scientist. I like that.
I love creating the magic trick at the center that is the real foundation for
writing the program. Seeing that magic trick, that essence of your program,
working correctly for the first time, is the most thrilling part of writing a
program.”
—Andy Hertzfeld (designer of the first Mac OS)3
References
Brooks, F. 1987. “No Silver Bullet.” IEEE Computer 20 (4): 10–19. www.inst.eecs.
berkeley.edu/~maratb/readings/NoSilverBullet.html.
Lammers, Susan. 1986. Programmers At Work. Redmond, WA: Microsoft Press.
3
Lammers, Susan. 1986. Programmers At Work. Redmond, WA: Microsoft Press.
7
CHAPTER 2
1. Conception
2. Requirements gathering/exploration/modeling
3. Design
5. Testing
6. Release
7. Maintenance/software evolution
8. Retirement
Your development process may combine multiple steps or iterate over a subset of steps
repeatedly between releases, but, in one form or another, all development should encompass
all of the above life cycle steps in order to create high-quality software. The two most
common variations are plan-based models1 and the newer agile development models.2
1
Paulk, Mark C. 1995. The Capability Maturity Model: Guidelines for Improving the Software
Process. The SEI Series in Software Engineering. Reading, Mass.: Addison-Wesley Pub. Co.
2
Martin, Robert C. 2003. Agile Software Development, Principles, Patterns, and Practices. Upper
Saddle River, NJ: Prentice Hall.
11
© John F. Dooley and Vera A. Kazakova 2024
J. F. Dooley and V. A. Kazakova, Software Development, Design, and Coding,
https://doi.org/10.1007/979-8-8688-0285-0_2
Chapter 2 Software Process Models
With plan-based development, the project team will generally do a complete life
cycle (at least steps 2 through 7) before going back in the SDLC to start working on the
next version of the product. In plan-driven models, the methodology tends to be stricter
in terms of process steps and when releases happen. Plan-driven models have more
clearly defined phases and more requirements for sign-off on completion of a phase
before moving on to the next phase. Plan-driven models require more documentation at
each phase and verification of completion of each work product. They tend to work well
for large contracts for new software with well-defined deliverables.
In agile development, which is more prevalent now, the project team will usually
iterate over a partial life cycle (usually steps 3 through 5) several times before proceeding
to the release step. The agile models are inherently incremental and operate under the
assumption that small, frequent releases produce a more robust product than larger, less
frequent ones. Phases in agile models tend to blur together more than in plan-driven
models, and there tends to be less documentation of work products required, the basic
idea being that code is what is being produced and so developer efforts should focus
there. See the Agile Manifesto web page at https://agilemanifesto.org to get a good
feel for the agile development model and goals.
There is no one best process for developing software. Each project must decide on
the model that works best for its particular application and base that decision on the
project domain, the scope of the project, the experience of the team, and the timeline
of the project. In this chapter, we begin by reviewing the shared variables of software
development projects, followed by a discussion of the different broadly defined
approaches, and finally we take a look at several prominent specific software model
implementations as well as how they can be hybridized together.
3
Project Management Institute. 2021. A Guide to the Project Management Institute Body of
Knowledge. 7th ed. Project Management Institute, Inc. www.pmi.org.
12
Chapter 2 Software Process Models
• Scope (a.k.a. features) is what the product actually does. This is what
developers should always focus on. It’s the most important of the
variables from the customer’s perspective and it is also the one you
as a developer have the most control over. Controlling scope allows
you to provide managers and customers control over quality, time,
and cost. If the developers don’t have control over the feature set for
each release, then they are likely to blow the schedule. This is why
developers should do the estimates for software work products.
Together, cost, time, and scope form the Iron Triangle of software development, in
which specifying two of the variables defines the third. In the real world, a customer will
often specify timeframe and budget for the task, which will then be your constraints to
estimate a realistic scope within the broader task.
Occasionally, a fourth variable is added (usually as the center of the triangle).
13
Chapter 2 Software Process Models
is enormous. It will take more time to fix the next release and your
credibility will be pretty well shot. More commonly, there is an
expected minimum expected quality for the product, fixing this
“variable”.
As shown in Figure 2-1, all constraints need to be balanced. Altering one will require
adjusting others to compensate.
4
https://ronjeffries.com/xprog/articles/practices/pracfourvariables/
5
Siegelaub, J. M. 2007. “Six (Yes Six!) Constraints: An Enhanced Model for Project Control.” In
Proceedings of the PMI Global Congress 2007. Atlanta, GA: Project Management Institute, Inc.
www.pmi.org/learning/library/six-constraints-enhanced-model-project-control-7294.
See also https://prince2.wiki/.
14
Chapter 2 Software Process Models
6
Atkinson, Roger. 1999. “Project Management: Cost, Time, and Quality, Two Best Guesses and
a Phenomenon, It’s Time to Accept Other Success Criteria.” International Journal of Project
Management 17 (6): 337–42.
7
www.smartsheet.com/content/project-constraints
15
Chapter 2 Software Process Models
project. Below we discuss planning, reducing waste with lean methodologies, and
adapting by remaining agile.
16
Chapter 2 Software Process Models
Rather loosely, we can devise a series of iterations, where each iteration is a complete
Minimum Viable Product (MVP), working and robust, albeit with fewer features than
the final goal product. For each iteration, we will select a set of the next highest priority
requirements (including some you or the customer may have discovered during the
previous iteration), develop, test, and demo the MVP, and gather feedback. This feedback
may drastically alter our initial plan, which is why our initial plan is only a loose sketch of
future development iterations.
8
Cockburn, A. 2002. Agile Software Development. Boston, MA: Addison-Wesley.
9
DeMarco, Tom. 1983. Controlling Software Projects: Management, Measurement and Estimation.
Yourdon Press.
17
Chapter 2 Software Process Models
So what happens if you estimate wrong? What if you decide to include too many new
features in an iteration? What if there are unexpected delays? Well, if it looks as if you
won’t make your iteration deadline there are only two realistic alternatives: move the
deadline or remove features. We’ll come back to this problem later when we talk about
estimation and scheduling. The key to iterative development is “live a balanced life—
learn some and think some and draw and paint and sing and dance and play and work
every day some,”10 or in the software development world, analyze some and design some
and code some and test some every day. We’ll revisit this idea when we talk about the
agile development models later in this chapter.
Overall, agile is composed of ongoing short-term experiments, iteratively reviewed
to evaluate product and practices, and to find processes that work for the team and the
client. In other words, some good old-fashioned trial and error. While some failure is
inevitable, it is more informative and less costly to fail on small increments, to fail early,
and to learn from it quickly. Thus, we reduce the pressure of needing our intermediates
to be right, requiring only that these decision are useful in helping us learn more about
what was actually needed.
Agile development works from the proposition that the goal of any software
development project is working code. Consequently, the development team should spend
most of their time writing code, not documentation. As opposed to the heavyweight plan-
driven models mentioned above and espoused by groups like the Software Engineering
Institute (SEI) at Carnegie Mellon University,11 this new process model was lightweight,
requiring less documentation and fewer process controls. Lightweight methodologies
tend to emphasize writing tests before code, frequent product releases, significant
customer involvement in development, common code ownership, and refactoring
(rewriting code to make it simpler and easier to maintain). Lightweight methodologies do,
unfortunately, suffer from several myths, the two most pernicious being that lightweight
processes are only good for very small projects and that lightweight projects lack process
discipline. Both of these are incorrect. The truth is that lightweight methodologies have
been successfully used in many small and medium-sized projects (say up to about 500K
lines of code), as well as in very large projects. Larger projects can nearly always be
organized as a set of smaller projects, which together provide services to the single larger
10
Fulghum, Robert. 1986. All I Really Need to Know I Learned in Kindergarten. New York, NY:
Ivy Books.
11
(Paulk 1995)
18
Chapter 2 Software Process Models
12
https://agilemanifesto.org/
19
Chapter 2 Software Process Models
The following four main Agile Activities (although originally defined as part of the
Agile variant called eXtreme Programming) are applicable for all Agile methodologies:
Design while you code. In real world domains, all the requirements aren’t
typically known or correctly understood in advance. Mistakes and oversights will
be made in architectural design, detailed design, and coding. Additionally, during
product development, requirements and constraints may change, as no project
exists in a vacuum, away from real world events such as turnover in the development
team, updates to customer needs due to market changes, the development of new
technologies, and so on. Agile software development models build products a piece
at a time, with each product increment allowing for several crucial events to happen
earlier and more frequently: delivery of value to the customer, feedback gathering,
and adaptation to changes. Designing while coding allows more developer freedom to
choose how to deliver on the tasks, promoting developer agency while increasing their
responsibility to self-manage.
20
Chapter 2 Software Process Models
Direct communication is best, although what “direct” means has shifted greatly in
recent years. We see “direct communication” as happening in real time, with direct
exposure to both verbal and non-verbal cues, which would encompass in-person
discussions, video conferencing, and even advanced virtual environments. In any given
software development project, there are two types of knowledge: 1) the customer has
domain knowledge and what understanding of what the system is supposed to do and
2) the developers have technical knowledge about the target platform, programming
language(s), and possible implementation issues. The customer doesn’t know the
technical side and the developers don’t have the domain knowledge, so effective
communication—on both sides—is a key activity in developing the product. Frequent
communication means everyone is learning from everyone’s process, creating a more
well-rounded shared understanding faster.
Code is the main deliverable. The fundamental difference between plan-driven
models and agile models is this emphasis on the code, as code is where system
knowledge resides. In a plan-driven model, the emphasis is on producing a set of work
products that together represent the entire work of the project with code being just one
of the work products. In agile methodologies, the emphasis is placed squarely with code
as the deliverable; in addition, by structuring the code properly and keeping comments
up to date, the code itself becomes documentation for the project.
Test-driven development. Test cases for the required features are written before
development takes place and should all initially fail. Once all tests for a feature pass,
the feature implementation is completed. Test-driven development is instrumental for
managing change, as continuous testing tells you when a new feature is completed and
integrated into the system without breaking any of the pre-existing functionality.
Womack, James P., Daniel T. Jones, and Daniel Roos. 1990. The Machine That Changed the
13
World: The Story of Lean Production -- Toyota’s Secret Weapon in the Global Car Wars That Is Now
Revolutionizing World Industry. New York, NY: Simon and Schuster.
21
Chapter 2 Software Process Models
(Womack et. al.). Just-in-time manufacturing evolved first into lean manufacturing and
then into lean product management systems throughout the 1990s. The publication of
Poppendieck & Poppendieck’s Lean Software Development: An Agile Toolkit14 in 2003
marked the movement of lean into the agile development community.
Lean software development is a set of principles designed to eliminate waste in
order to improve productivity, quality, and customer satisfaction. Waste is anything that
does not add value to the product. Thus, lean emphasizes that the team should only be
focusing on activities that add immediate value to the product.
The Poppendiecks14 transformed the lean principles that started at Toyota into seven
key principles for software development:
• Eliminate waste
• Build quality in
• Create knowledge
• Defer commitment
• Deliver fast
• Respect people
We will go through each of these principles briefly to illustrate how they apply to
software development.
Poppendieck, Mary, and Tom Poppendieck. 2003. Lean Software Development: An Agile Toolkit.
14
22
Chapter 2 Software Process Models
• Extra features that are rarely, if ever, used, while taking up resources
and cluttering code
23
Chapter 2 Software Process Models
controversial way to improve quality of your code: instead of logging discovered defects
in a defect tracking system, fix it NOW. As soon as you find it. That builds quality in and
eliminates waste simultaneously.15 Another technique to improve software quality is
constant feedback. One way to facilitate this feedback is to make the customer part of
the development team, allowing for direct repeated evaluation of new iterations of the
product and providing developers with crucial timely feedback on what is suitable and
what needs to be changed.
15
(Poppendieck & Poppendieck 2003, 25-26)
24
Chapter 2 Software Process Models
25
Chapter 2 Software Process Models
processes, tools, and design. This empowerment means that the manager must learn
to listen to their team and take their ideas and concerns into consideration. It also
means that the manager must act as a facilitator and a shield for their team, allowing
them to get the job done. Together, everyone must endeavor to create an environment
where everyone is able to speak their mind and disagreements are resolved with respect
for each other. This creates a team with open communication and decision-making
transparency. More on this in the next chapter.
The main idea behind optimizing the whole is to keep the entire product picture in sight
as you develop. One way to prevent myopic views is to have diverse, multi-disciplinary,
well-communicating teams, which contain all the skills and product creation functions
needed to deliver a product that truly meets the customer’s needs.
When it comes to implementing any software development model, there are endless
accounts of general approaches, countless possible tweaks, and a cornucopia of books
and other resources that aim to guide you through the process. Consequently, we do not
aim to provide exhaustive nor prescriptive step-by-step implementation details. Instead,
in this section, we review the most prominent implementations of the ideas presented
earlier in this chapter. Our goal is to delineate the unique focal points of each approach,
Bancroft, Josiah. 2013. Senlin Ascends (The Books of Babel). CreateSpace Independent
17
26
Chapter 2 Software Process Models
which we hope will not only help you distinguish them, but also hybridize them in order
to better suit your team, project, organization, and client needs.
18
Royce, W. W. 1970. “Managing the Development of Large Software Systems.” In Proceedings of
IEEE Wescon, 1–9. Piscataway, NJ: IEEE Press.
27
Chapter 2 Software Process Models
It also doesn’t work (at least not for anything beyond tiny projects). There are two
fundamental and related problems with the Waterfall model that hamper its acceptance
and make it very difficult to implement.
Problem 1: Waterfall requires that you finish phase N before you move on to
phase N+1.
Problem 2: Waterfall has no provision for backing up to earlier stages for
adjustments.
Waterfall is fundamentally modelled like an assembly-line for developing software.
The initially comforting straightforward progression through the waterfall stages
requires that all steps be completed in order and, since there is no way to go back and
rework earlier development phases, each phase must be completed perfectly. In the
simplest example, this means that you must precisely nail down all your requirements
before you start your architectural design, finish your coding and debugging before you
start unit testing, and so on. Additionally, each phase must be thoroughly documented
along the way. In theory, this would be great. In practice, however, this never happens.
No doubt having the complete set of perfectly understood requirements would be ideal
before diving into designing the system. Alas, we have never seen a project where all
requirements were known from the start, or where these requirements were correctly
understood by all stakeholders, or where big things didn’t change at some point during
development of real-world projects with dynamic real-world needs and constraints.
Consequently, finishing one phase before the next begins is problematic, not to
mention ensuring that nothing was missed or otherwise requires updating in any of the
preceding phases. You never know everything you need to know at exactly the time you
need to know it. This is why software is a wicked problem.
Nevertheless, the Waterfall is a terrific theoretical model. It isolates the different
phases of the life cycle and forces you to think about what you really do need to know
before you move on. It’s also a way to start thinking about very large projects, breaking
them down into smaller phases, and giving managers a warm fuzzy mirage of a plan.
It’s also a reasonable model for inexperienced teams working on a well-defined small
project, because it leads them through the life cycle and clearly labels what’s happening
at each stage. Most organizations that implement the waterfall model modify it to have
the ability to back up one or more phases so that missed requirements or unsuitable
design decisions can be fixed. This helps and generally makes the waterfall model
usable, but the requirement to update all the involved documentation when you do back
up makes even this version problematic.
28
Chapter 2 Software Process Models
“Code and fix” requires a minimal amount of time to understand the problem
(usually because we made up the problem/requirements ourselves) and jump straight
into coding. Compile your code and try it out. If it doesn’t work, fix the first problem you
see and try it again. Continue this cycle of type-compile-run-fix until the program does
what you want with no fatal errors and then ship it. We’ve all used it way more than once.
Software created using this model will be small, short on user interface niceties,
and idiosyncratic. With no real mention of configuration management, little in the
way of testing, no architectural planning, and probably little more than a desk check of
the program for a code review, this approach can be very dangerous for most software
development. It is, however, good for one thing: quick, disposable, maintenance-free
projects developed by tiny 1-2 person teams. In other words, for quick and dirty proofs-
of-concept, such as to validate architectural decisions, show a quick version of a
user interface design, or to understand some larger problem you’re working on.
29
Chapter 2 Software Process Models
If this reminds you of a mini version of agile, you are not wrong. This approach is wildly
flexible and allows us to iteratively gain insights from our progress toward the goal. For
this reason, we consider code and fix to be the proto-agile model.
Agile development is all about adaptability, which can take on many different forms
depending on the project scope and timeline, the development team, and so on.
Applying agile development prescriptively will break the very agility of agile. Thus,
although a number of specific agile approaches have been devised over the years, it
is important to remain flexible in their understanding and implementation. Below,
we discuss a number of these implementations, highlighting their core values and the
accompanying nomenclature intended to help developers lean into these values.
Agile processes all aim to provide agility during software development, but how
that agility is achieved can differ widely. As you read about each agile implementation,
keep the following key differences in mind and consider the remaining specifications
to be descriptive but non-prescriptive guidelines for how one might approach
operationalizing each approach:
19
www.adaptionsoft.com/on_time.html
30
Chapter 2 Software Process Models
20
This is a very short description of how XP works; for a much more eloquent and detailed
explanation see the bible of XP: Beck, K. 2000. Extreme Programming Explained: Embrace
Change. Boston, MA: Addison-Wesley.
31
Chapter 2 Software Process Models
While all Agile approaches favor direct communication, XP extends this notion to
direct coding communication (both with a coding partner and with the rest of the code)
and to direct client communication. Frequent releases require constant integration and
building of the product. Whenever a programming pair finishes a feature or task and it
passes all their unit tests, they immediately integrate and build the entire product. They
then use all the unit tests as a regression test suite to make sure the new feature hasn’t
broken anything already checked in. If it does break something, they fix it immediately.
So in an XP project, integrations and builds can happen several times a day. This process
gives the team a good feel for where they are in the release cycle every day and gives the
customer a completed build on which to run the acceptance tests. Having an on-site
customer representative allows the XP team to get immediate feedback on new features
and to uncover design and requirements issues early.
Implementing XP may vary depending on the team and the project, but should
involve some form of the following practices:
32
Chapter 2 Software Process Models
• Simple design: Keep the design as simple as you can each day.
Redesign often to keep it simple. According to Beck, a simple design
(1) runs all the unit tests, (2) has no duplicated code, (3) expresses
what each story means in the code, and (4) has the fewest number
of classes and methods that make sense to implement the stories
so far.21
• Collective ownership: The team owns the entire project and all of its
code, sharing the reasonability for designing, writing, altering, and
testing all features. This supports “ego-less programming,” promoting
effective teamwork.
21
(Beck 2000)
33
Chapter 2 Software Process Models
22
Cockburn, Alistair. Crystal Clear. Upper Saddle River: Addison-Wesley, 2004.
34
Chapter 2 Software Process Models
than around processes or tools. This means human interactions, as well as individual
skills, talents, and needs, all of which are variable across teams, as well as within teams
over time.
As we are not focusing on specific processes, Crystal has no formal structure.
Instead, Crystal development believes the following:
• Teams can self-optimize. Tools and processes need to work for the
project but also for the team, thus teams themselves should jointly
determine the workflow that will work best for them, as well as adjust
it as needed during development.
35
Chapter 2 Software Process Models
You can see that Crystal is very flexible and thus can be adapted to the needs of each
team and project. For shorter projects, Crystal’s reduced organizational scaffolding and
required processes can be beneficial, as it allows focus on how the specific team can
accomplish the required work. The main caveat here is that if the team is newer, larger,
or remote, self-organization can get tricky.
23
Takeuchi, Hirotaka, and Ikujiro Nonaka. “The New New Product Development Game.” Harvard
Business Review 64, no. 1 (1986): 137-146.
24
DeGrace, Peter, and Leslie Hulet Stahl. 1990. Wicked Problems, Righteous Solutions: A Catalogue
of Modern Software Engineering Paradigms. Yourdon Press Computing Series. Englewood Cliffs,
N.J.: Yourdon Press.
36
Chapter 2 Software Process Models
about what was understood correctly and what needs adjustment. Ensuring this happens
early limits the work that needs to be redone to make the necessary adjustments before
developing further. Thus, sprints are “about creating conditions that enable better
decision making, sooner.”25
Scrum Roles
Scrum explicitly defines three roles in a development project:
The product owner is the person who generates and prioritizes the requirements
for the product. These requirements commonly take the form of user stories, which are
features that can be summarized into sentences like “As a <type of user>, we want to <do
something>, so that <some value is created>.” The product owner adds the user stories
to the product backlog and prioritizes them. The product owner is also charged with
making sure that the team understands the requirements behind the user stories.
The Scrum master is an expert in Scrum who facilitates development by coaching the
team through Scrum values and practices (such as the daily Scrum meetings), helping
the team self-organize (e.g., by increasing transparency), helping resolve internal and
external blockers, and protecting the team from outside influences during the sprint.
The scrum master is emphatically not team lead/manager because, as Scrum teams are
teams of equals and arrive at decisions by consensus.
The development team is everyone else: designers, developers, writers, and so on.
The team reviews the user stories generated and prioritized by the product owner,
turning each highest priority story into one or more tasks that suggest how the necessary
feature will be developed in order to deliver value. Selecting a subset of stories and tasks
that can be accomplished within the given sprint duration, the team self-organizers by
jointly deciding who will work tasks and what development processes they will employ.
Regardless of task allocation, the team collectively owns all code and the project, sharing
the goal of delivering the next functional MVP at the end of every sprint.
www.linkedin.com/pulse/agile-consistently-lowering-standards-part-2-changing-
25
andy-reid/
37
Chapter 2 Software Process Models
Scrum Artifacts
Scrum requirements are encapsulated in two backlogs:
• The Product Backlog is the prioritized list of all the requirements for
the project. The product owner creates and prioritizes the product
backlog composed of user stories, based on a desired Product Goal.
The development team breaks the high-priority user stories into tasks
and estimates them. This list of tasks becomes the Sprint Backlog.
• The Sprint Backlog is the prioritized list of user stories for the current
sprint. Once the sprint starts, only the development team may add
tasks to the sprint backlog; these are usually bugs found during
testing. No outside entity may add items to the sprint backlog, only
to the product backlog. The focus of the sprint backlog is the Sprint
Goal: a guiding star for the team to follow; any changes during the
sprint should protect this goal.
Scrum Board
In most Scrum teams, the sprint backlog is visual, providing everyone with a clear shared
view of the progress status of the sprint work. It is represented on a board using either
Post-It notes or index cards, with one note or card per task; it may also be an online
virtual board (e.g., Trello, Jira, Notion, or Pivotal Tracker). This task board, shown in
Figure 2-4, always has at least three columns: ToDo, Doing, and Done, though more
commonly it also includes a Product Backlog, a Sprint Backlog, and a column for testing
such as Quality Assurance/Review. At the start of a sprint, the Development team selects
some of the top priority items from the Product Backlog and moves them to the Sprint
Backlog. These items are then broken down into tasks, which become the ToDo items for
the sprint. These tasks will move across the board until reaching the Done column once
fully developed, tested, and integrated into the code base.
38
Chapter 2 Software Process Models
Figure 2-4. A generic single-sprint Scrum board. Dark arrows indicate the
movement of items during sprint planning; light arrows indicate the movement of
items during the sprint
Scrum Values
In order to facilitate the teamwork necessary for an agile self-organizing team, SCRUM
relies on individuals practicing the following:26
Scrum Ceremonies
Scrum teams have several types of meetings that help the team self-organize.
Sprint planning: An initial planning phase that creates the product list of the initial
requirements, decides on an architecture for implementing the requirements, divides
26
https://scrumguides.org
39
Chapter 2 Software Process Models
the user stories into prioritized groups for the sprints, and breaks the first set of user
stories into tasks to be estimated and assigned. They stop when their estimates occupy
all the time allowed for the sprint. Tasks in a sprint should not be longer than one day
of effort and ideally can be accomplished in one sitting (to avoid task switching). If a
task is estimated to take more than one day of effort, it is successively divided into two
or more tasks until each task’s effort is the appropriate length. This rule comes from the
observation that humans are terrible at doing exact estimations of large tasks and that
estimating task efforts in weeks or months is basically just a guess. So breaking tasks
down into smaller pieces gives the team a more reliable estimate for each.
The daily stand-up is a short meeting (15–30 minutes; the shorter the better) where
the entire team discusses sprint progress. The daily scrum meeting allows the team to
share information and track sprint progress. By having daily scrum meetings, any slip
in the schedule or any problems in implementation are immediately obvious and can
then be addressed by the team at once. “The Scrum Master ensures that everyone makes
progress, records the decisions made at the meeting and tracks action items, and keeps
the scrum meetings short and focused.”27 During the daily stand-up, each team member
answers the following three questions in turn:
How have you furthered development since the last meeting?
How will you further development between now and the next meeting?
Is anything standing in your way?
Note that the wording of these questions may be tweaked slightly, but the sentiment
must remain. Discussions other than responses to these three questions are deferred
to other meetings. Daily stand-ups are crucial to help everyone track progress towards
the shared Spring Goal, facilitate collaboration, and improve accountability and
engagement.
The sprint review happens at the end of each sprint, presenting the newly developed
MVP to the product owner (commonly as a demo), who may perform acceptance testing
on it. The meeting “reviews” everything that has been “Done” this sprint as part of
fulfilling the Spring Goal, as well what was left out and why.
The sprint retrospective is held after the sprint review to “retrospect” on how the team
worked together: their processes, communication, collaboration mechanics, meeting
Rising, Linda, and Norman S. Janoff. 2000. “The Scrum Software Development Process for Small
27
40
Chapter 2 Software Process Models
expectations, etc., searching for areas in which they can improve performance for the
next sprint. Retrospectives are a crucial tool for improvement, as they are responsible
for the agile iterative improvement of the teamwork itself. The retrospective marks the
official end of the current sprint.
Backlog refinement or story time meetings are held periodically throughout the sprint
(such as once a week) in order to refine backlog items, ensuring they are ready for future
sprint planning. Product owner participates by adding and (re)prioritizing stories, and
developers participate by breaking down high priority stories into tasks.
Although sprints usually end at the end of the predefined sprint period, a sprint can
be terminated early if all work planned for the sprint has been completed. While new
work could be added, it is generally most suitable to go through all the end-of-sprint and
sprint-planning procedures in order to properly review what was done, retrospect on
how it was done, and plan next development steps.
Scrum Velocity
With most teams, estimates of tasks become better as the project progresses, primarily
because the team now has data on how they have done when estimating on previous
sprints. The measure of the amount of work completed in a single sprint is called
velocity. Over time, this allows the team decide how many tasks to include in each sprint.
With meaningful retrospectives and the resulting iterative improvements to the team’s
processes and practices, velocity should increase over time as the team becomes better
at breaking down and assigning tasks, creating accurate estimates of the work needed for
each task, as well as at collaborating with each other.
41
Chapter 2 Software Process Models
• Flow is the passage of tasks from one state to another on the way to
completion.
• Lead time: The amount of time (in hours or days) it takes for the team
to get a task from the initial ToDo state to the Done state. Over time, as
the team finishes more and more tasks, the average lead time can be
computed for the team, allowing for an estimation of how long it will
take any one task to get Done, which serves as a measure of productivity.
What distinguishes Kanban is the continuous flow of the work. There are no
timeboxed sprints and, consequently, no smaller sprint backlogs containing a subset of
tasks for the team to focus on next. All remaining ToDos are in a single backlog and to
help the team get organized, Kanban uses swimlanes: horizontal dividers to segment the
tasks. Swimlanes can represent any useful separation, including task priority, task type,
different projects/products, and even different teams.
With all remaining tasks sitting in the backlog, limited work-in-progress is how
you allow the team to stay focused on the flow. Work-in-progress and flow can be
asynchronously tracked by developers using the Kanban board, a variant on the Scrum
task board. Figure 2-5 shows a generic task/Kanban board. These boards can be physical
white boards that occupy one wall of a common space for the team or shared digital
boards. On this board the team will add physical or digital post-it notes to identify tasks,
which can then be moved from column to column (i.e., state-to-state) on the board.
42
Chapter 2 Software Process Models
Figure 2-5. A generic task/Kanban board, with WIP maxima and swimlanes,
with arrows depicting flow
With this type of board, users have the option of changing the number and headings
of the columns in order to make the board fit their process. Kanban works by using a
pull system: instead of pushing items out to other stages, Kanban tells developers to pull
items from a previous stage as they have the capacity to handle them. At the end of every
task completion, the team will have working software with a new feature added.
The team can then specify the maximum number of tasks that are allowed to be
worked on simultaneously (i.e., “Doing” and “Quality Assurance/Review”) referred to as
the work-in-progress or WIP, used to control the flow of work through the team. There
is not hard rule for the WIP, but it should account for: 1) the number of people on the
team and 2) how many tasks should each person be juggling concurrently. The general
recommendation is somewhere between 1 to 2 tasks per person. For example, let’s say
that every state on the Kanban board is maxed-out (there are N tasks in development,
M in review/testing) and a developer finishes developing a new task. This task cannot
move to the Review state until one of the tasks currently under review is finished. We’ve
just exposed a bottleneck in the flow of work. In Kanban, the developer would jump in
to help review one of the tasks in that state. No new tasks can be pulled into the Develop
state until there is room for the finished task downstream.
43
Chapter 2 Software Process Models
In Kanban, the objective is to maximize WIP within the constraint of the maximum
number of tasks allowable at any time. There is no time-boxing as in Scrum; the goal is to
move tasks through as quickly as possible (have the shortest lead time) while maximizing
productivity by working up to the maximum number of tasks allowable.
You can note that when we say maximizing WIP, we don’t mean giving the team more
work. In fact, the goal in keeping the maximum number of tasks in each state low is
to reduce the team’s workload and allow them to focus on a smaller number of tasks
(we want to avoid multitasking). The idea is that this will reduce stress and expensive
task-witching, while increasing work quality and throughput. You’ll notice that there
are some things missing here, notably, how things get on the ToDo list, and what Done
means. That’s because Kanban isn’t really a project management technique. In order to
use Kanban, you need to have some process in place already and you need to manage it.
28
Bourne, Geoffrey. 2010. “The Marriage of Lean, Scrum, and Extreme Programming (XP): How
to Align Agile Across and Organization.” AgileConnection. www.agileconnection.com/article/
marriage-lean-scrum-and-extreme-programming-xp.
44
Chapter 2 Software Process Models
Most notably, it is not lean versus agile, but rather crucially lean AND agile, where
lean focuses on improving the process by reducing wastes, while agile focuses on
improving the product by effectively adapting to new information throughout the
project. Both are crucial to developing software. Additionally, agile does not mean no
planning, as not thinking far enough ahead can lead to incorrect early decisions; a better
perspective is to borrow lean’s deferring of commitment to ensure that early decisions
to do not eliminate potentially useful future options. Here are a few ways that the
implementations of these ideas can play off of each other:
As can be seen from the methodologies described in this chapter, iteration and
collaboration are the key. The most effective way to build complex software is to
incrementally gather insights, leaning what to make and how to make it better at each
29
See www.agilealliance.org/scrumban/
45
Chapter 2 Software Process Models
following step. You must recognize that you never have all the knowledge at the start,
and that designing, writing, testing, and delivering incrementally better code is the most
reliable and effective path toward creating great software.
References
Anderson, David J. 2010. Kanban: Successful Evolutionary Change for Your Technology
Business. Sequin, WA: Blue Hole Press.
Atkinson, Roger. 1999. “Project Management: Cost, Time, and Quality, Two Best
Guesses and a Phenomenon, It’s Time to Accept Other Success Criteria.” International
Journal of Project Management 17 (6): 337–42.
Bancroft, Josiah. 2013. Senlin Ascends (The Books of Babel). CreateSpace
Independent Publishing Platform. www.amazon.com/Senlin-Ascends-Books-Babel-1/
dp/1482590956.
Beck, K. 2000. Extreme Programming Explained: Embrace Change. Boston, MA:
Addison-Wesley.
Bourne, Geoffrey. 2010. “The Marriage of Lean, Scrum, and Extreme Programming
(XP): How to Align Agile Across and Organization.” Article. AgileConnection. www.
agileconnection.com/article/marriage-lean-scrum-and-extreme-programming-xp.
Cockburn, A. 2002. Agile Software Development. Boston, MA: Addison-Wesley.
DeGrace, Peter, and Leslie Hulet Stahl. 1990. Wicked Problems, Righteous Solutions:
A Catalogue of Modern Software Engineering Paradigms. Yourdon Press Computing
Series. Englewood Cliffs, N.J.: Yourdon Press.
DeMarco, Tom. 1983. Controlling Software Projects: Management, Measurement
and Estimation. Yourdon Press.
Fulghum, Robert. 1986. All I Really Need to Know I Learned in Kindergarten.
New York, NY: Ivy Books.
Jeffries, Ron. 2015. The Nature of Software Development: Keep It Simple, Make It
Valuable, Build It Piece by Piece. Programming. Dallas, TX: The Pragmatic Programmers,
LLC. pragprog.com.
Martin, Robert C. 2003. Agile Software Development, Principles, Patterns, and
Practices. Upper Saddle River, NJ: Prentice Hall.
McConnell, Steve. 1996. Rapid Development: Taming Wild Software Schedules.
Redmond, WA: Microsoft Press.
46
Chapter 2 Software Process Models
Paulk, Mark C. 1995. The Capability Maturity Model: Guidelines for Improving the
Software Process. The SEI Series in Software Engineering. Reading, Mass.: Addison-
Wesley Pub. Co.
Poppendieck, Mary, and Tom Poppendieck. 2003. Lean Software Development: An
Agile Toolkit. Upper Saddle River, NJ: Addison-Wesley Professional.
Project Management Institute. 2021. A Guide to the Project Management Institute
Body of Knowledge. 7th ed. Project Management Institute, Inc.
Rising, Linda, and Norman S. Janoff. 2000. “The Scrum Software Development
Process for Small Teams.” IEEE Software 17 (4): 26–32.
Royce, W. W. 1970. “Managing the Development of Large Software Systems.” In
Proceedings of IEEE Wescon, 1–9. Piscataway, NJ: IEEE Press.
Siegelaub, J. M. 2007. “Six (Yes Six!) Constraints: An Enhanced Model for Project
Control.” In Proceedings of the PMI Global Congress 2007. Atlanta, GA: Project
Management Institute, Inc. www.pmi.org/learning/library/six-constraints-
enhanced-model-project-control-7294.
Takeuchi, H., and I. Nonaka. 1986. “The New New Product Development Game.”
Harvard Business Review 64 (1): 137–46.
Womack, James P., Daniel T. Jones, and Daniel Roos. 1990. The Machine That
Changed the World: The Story of Lean Production -- Toyota’s Secret Weapon in the
Global Car Wars That Is Now Revolutionizing World Industry. New York, NY: Simon and
Schuster.
47
CHAPTER 3
Project Management
Essentials
“The first step of any project is to grossly underestimate its complexity and
difficulty.”
—Nicoll Hunt
Once your project begins, it needs to be managed. You need to manage the schedule,
the people, the process, and above all, yourself (wherever you fit on the team). There
is no one correct way to manage development, but there are some ways to do this well
and even more ways to do it poorly. We have certainly uncovered some of both over the
years, so let us try to make your journey less perilous. It’s dangerous out there; take this
chapter!
Working on anything other than personal development projects means working on a
team; and working on a team means being managed, either from above or from within.
Thus, learning about project management from both sides is an essential part of learning
software development. Project management can be seen as managing the work and
managing the people, so we divided this chapter into two major sections:
a. Organization
b. Risk analysis
49
© John F. Dooley and Vera A. Kazakova 2024
J. F. Dooley and V. A. Kazakova, Software Development, Design, and Coding,
https://doi.org/10.1007/979-8-8688-0285-0_3
Chapter 3 Project Management Essentials
c. Resource requirements
e. Defect management
b. Supporting individuals
d. Conflict as opportunity
e. Teamwork artifacts
Project Planning
Project plans are a great tool for setting down what you think you’re doing, an outline of
how it will be done, and how you plan on executing the outline. The problem with a project
plan is that, once it’s written and signed off on, upper management thinks the project will
run exactly as stated in the plan. But the reality of the project often thwarts the plan.
Project planning is forever; it continues throughout the entire duration of the project.
“The Plan” is never really set in stone because typical software projects are usually in
constant flux. In those projects that are using a plan-driven process model, a project plan
is an actual document that is written by the project manager and that is approved and
signed off on by the development team and by upper management.
It is, in effect, a contract, albeit a rolling one, of what the team is going to do and how
they are going to do it. It says how the project will be managed, and in the most extreme
plan-driven projects, even states how and when the document itself will be modified.
50
Chapter 3 Project Management Essentials
• How are you going to organize the people making this product? (What
is the team organization/hierarchy? How and when will everyone
communicate and coordinate?)
• Schedule slips: That task that you estimated would take three days
has just taken three weeks. In a plan-driven project, this can be an
issue if you don’t have regular status meetings. Waiting three weeks
to tell your boss that you’re late is always worse than telling her that
1
McConnell, Steve. 1996. Rapid Development - Taming Wild Software Schedules. Microsoft Press.
51
Chapter 3 Project Management Essentials
you’ll be late as soon as you know it. Don’t put off delivering bad
news. In an agile project, this is unlikely because most agile projects
have a daily status meeting (or stand-up). This way schedule slips
are noticed almost immediately, and corrective action can take place
quickly.
52
Chapter 3 Project Management Essentials
Once you’ve got a list of the risks to your project, you need to address each one and
talk about two things: avoidance and mitigation. For each risk, think about how you can
avoid it. Build slack into your schedule, do constant code reviews, freeze requirements
early, do frequent releases, require pair programming so you spread around the
knowledge of the code, and the like. Then you need to think about what you’ll do if the
worst-case scenario does happen; this is mitigation. Remove features from a release, stop
work on new features and do a bug hunt, negotiate new features into a future release,
and so on. If a risk becomes a reality, you’ll have to do something about it; it’s better to
have planned what you’ll do beforehand.
53
Exploring the Variety of Random
Documents with Different Content
his equestrian statue in Parliament Close, 477.
Charms for healing sores, &c., i. 324.
Specimen of, ii. 153.
Chattan or Macintosh, Clan, Earl of Moray’s expedition against, i.
542, 543.
Cheviot, order against hunting in, i. 453.
Chiesley of Dalry shoots Sir George Lockhart, ii. 495.
Chiesley, William, writer in Edinburgh, punished for a cheat, ii. 445.
Child-murder, hanging of women for, &c., ii. 414.
Chisholms prosecute M‘Leans for witchcraft, ii. 293, 294.
Christie’s Well, pilgrimages to, i. 323.
Christmas-day, James VI. orders keeping of, i. 426;
general disregard of, 506.
Its observance in Edinburgh, ii. 297.
Church-discipline, severity of, i. 336; ii. 196-199.
Church-lands, convention for revocation of, ii. 6.
Church matters, meeting for deliberation on, ii. 12.
Citadels, order for destroying those raised during the
Commonwealth, ii. 279.
Clairvoyance, quasi case of, ii. 394.
Clark, Alexander, provost of Edinburgh, his reception of Charles I.,
ii. 63-65.
Clark and Ramsay, hanged for poisoning their master, ii. 373.
Clergy, their zeal and self-denying poverty, i. 132;
collisions with Edinburgh merchants, 241, 242;
their intolerance, 244;
their admonitions of James VI., and general denunciations
against common corruption of all estates of the realm,
267.
Perfect accord with the Estates, ii. 179-181.
Clothing and cloth-works in Scotland, anecdotes connected with,
ii. 416-422.
Cloth-manufacture, seven Flemings engaged to set agoing; result,
i. 362;
encouraged by James VI., 425.
At Newmills, near Haddington, ii. 418.
Coaches, early examples of, i. 19;
first hint at public coaches and wagons in Scotland, 431.
Street coaches, ii. 358;
stage-coaches, 218, 247, 391, 476.
Coal, early digging of, i. 24;
Countess of Sutherland first works coal of Brora, 302;
coal-works at Culross, 485;
price of coal fixed, 519;
Johnston’s licence to export, 520.
Cochrane of Ochiltree, saved by his heroic daughter Grizzel, ii. 479.
Cockburn, the executioner, hanged, ii. 433.
Cockie, Isobel, burned for witchcraft, i. 280.
Cockpool, inundation of house of Old, anecdote of, ii. 17.
Coffee-houses, first known in Edinburgh and Glasgow, ii. 359-361.
Coin, attempt to raise the value of, i. 122.
Coke, William, burned for sorcery;
bill of expenses, ii. 70, 71.
Collace, Mr William, first regent in St Leonard’s College, i. 73.
College of Physicians, proposed in Edinburgh, i. 521.
Colquhouns and Macgregors, battle between, i. 377, 378.
Colville, Lady, imprisoned for educating her son in disloyal
principles, ii. 467.
Colville, Lord, mission to France concerning the Scots Guard, i.
535.
Combat, a remarkable, i. 285;
among the last attempts to settle a dispute by, 414.
Comets, early ideas about, i. 112, 113;
appearance of a remarkable, in 1618, 505.
Appearance of one during the day, ii. 185;
in 1664 and 1665, 300-302;
in 1676, 376;
in 1680, curious notions regarding, 410-412;
Halley’s, in 1682, 444.
Communion Tuesday meetings; their object, i. 508.
Communion administered in Edinburgh after an interval of six
years, ii. 235.
Con of Achry, a papist, excommunicated by presbytery of
Aberdeen, ii. 59.
Confession of Faith, commonly called the King’s Confession, i. 142.
Conventicles, various persons fined for attending, ii. 334.
Copper-mine in parish of Currie, ii. 453.
Corn, great dearth of in 1567, i. 52.
Cornwall, Archibald, hanged for poinding the king and queen’s
portraits, i. 349.
Corstorphine, frightful tragedy at village of, ii. 401-403.
Costume, court order of, i. 426.
Court of Session, suspension of, ii. 128.
Couts, Janet, accuses eleven women of witchcraft, ii. 194, 195.
Covenant, National, signed, ii. 105, 116;
forced on people at Aberdeen, 120, 123.
Covenant, Solemn League and, made, ii. 109;
character and consequences of, 111;
forced on Lady Frendraught, 159;
opinion of royalists regarding rule of, 160, 161;
taken by Charles II., 175;
forced on Marquis and Marchioness of Douglas, 191, 193;
burned at Linlithgow, 291.
Covenanters, proceedings of the, ii. 106-113, 119-121, 123-126.
Covenanter’s Ribbon, ii. 124.
Cowdothe, an epidemic so called, i. 117.
Cowper, William, bishop of Galloway, a libel against, i. 372;
his sudden death, 507, 508.
Craig, Marjory, hanged as a witch, ii. 377-379.
Crawford and Glammis, feud between, i. 117, 118.
Crawford, Earl of, confined in the Tower, ii. 218;
appointed Lord Treasurer, 255.
Crawford, Master of, young Edzell’s attack on, i. 405, 406.
Crawford gold-field, i. 17, 51, 253, 290, 474.
Creditors, supposed power of, over interment of the dead, ii. 328,
329.
Crichton of Frendraught and Gordon of Rothiemay, dispute
between ii. 45-50, 76-79, 84.
Crichton, Sir Robert, of Cluny, a caption used against him in
church, i. 474.
Crombie, Thomas, summoned for slaughter of William Blair, ii. 4.
Cromwell, Oliver, his first visit to Edinburgh, ii. 170, 171;
crosses the Tweed with an English army, 201-207;
anecdotes of, 203, 204;
his law-commissioners for Scotland, 219;
breaks up the General Assembly, 221;
proclaimed protector, 242-244.
Crossford visions, Walker’s account of the, ii. 485-487.
Cultmalindy and Monyvaird, feud between, i. 490.
Cumming, Isobel, a teacher of young ladies, her petition, ii. 482.
Cunningham and Crawford, Captains, harry Bothwell Moor, i. 71.
Cunningham of Robertland, murders Earl of Eglintoun, i. 161.
Poinding of his goods, ii. 340.
Cunyie-house, master of, visits England, i. 386.
Cupar (Fife), great fire at, in 1668, ii. 321.
Custom-officers and Edinburgh merchants, dispute between, ii.
299.
Customs, i. 339-342;
Spalding bewails suppression of old Christian, ii. 142.