Computer Science 203:

Software Engineering

Gregory M. Kapfhammer

Triangles 1 flickr photo by vincentag shared under a Creative Commons (BY-NC-ND) license

Color Scheme

Key Concept

Corresponding Diagram

In-Class Discussion

In-Class Activity

Details in the Textbook

Philosophy of Software Design

Chapters 1 through 3

Central tenets of software design


Software Engineering

Purest creative activities in all of history

Creative mind and ability to organize your thoughts

Visualization aids implementation

Greatest limitation is the system's complexity

Software Complexity

What causes software complexity?

How much can tools help?

Complexity Wars

Simplify code

Make code obvious

Encapsulate complexity

Modular design

Continuous process

Models of software development?

Waterfall Model

Developed in the 1970s as a means for organizing teams

Software development as "manufacturing"

What are the limitations of this approach?

flickr photo shared by Michael Matti under a Creative Commons ( BY-NC ) license

Waterfall is largely abandoned

Other ways to organize the lifecycle phases?

Incremental development

What are the goals?

Recognize and define complexity

Minimize complexity

Application to the software project

Nature of Complexity

What is complexity?


Complexity is anything related to the structure of of a software system that makes it hard to understand and modify.

Not really a system that is large!

Not really a system that has many features!

Complexity equation

Complexity Equation

Complexity of each component

Fraction of time developers invest in that component

Complexity Symptoms

Change amplification

Cognitive load

Unknown unknowns

Design a system that is obvious

Design so that others can work with system easily!

Complexity Causes




Technical debt

Application to the software project

Programming Methods

Tactical programming

Strategic programming

Technical debt

Technical investment

How much to invest?

"Be embarrassed of your first prototype"

"Move fast and break things"

"Move fast with solid infrastructure"

See Figure 3.1 for more details

Application to the software project