End Notes

Michael L. Collard, Ph.D.

Department of Computer Science, The University of Akron


  • Software is designed to perform tasks for people
  • Critical to society at large
  • A significant part of progress in any field relies on software
  • Lack of agility of software constrains all other activities

Non-Functional Issues

  • User stories capture functional issues, e.g., Can a student see their remaining courses in DPR?
  • A good process assures that the issues are completed
  • Non-functional issues, e.g., How easy is it for a student to view and understand their remaining courses in DPR?
  • Very difficult to capture
  • Most difficult is usability (especially in mobile)


An organized whole that is perceived as more than the sum of its parts

  • Principle of proximity
  • Principle of closure
  • Principle of similarity
  • Principle of continuity
  • Principles of perception
  • Principle of organization
  • Principle of symmetry


  • Non-functional issues must be part of the conversation between developers and users and among developers
  • All parts of the process must lead to interaction and conversation
  • Documents do not capture all of this

Security Issues

  • goto fail (Apple SSL/TLS bug)
  • OpenSSL bug Heartbleed (OpenSSL bug)
  • Proposed solution: Better programming languages
  • Proposed solution: Better coding standards
  • Proposed solution: More sleep/less caffeine for developers


  • Better process
  • Little previous funding for OpenSSL (years previous to the event, $2,000)
  • The setup and support of process requires money


  • Software Engineering is a process that includes many different people in many different roles
  • You have to deal with antiquated technologies, languages, and people
  • What you think of as modern technologies and languages are not in the future


  1. Initial Development
  2. Evolution
  3. Servicing
  4. Phaseout
  5. Close Down

Lifespan Factors

  • Code Decay
  • Reengineering
  • Lehman's Laws
  • All make staying in evolution difficult

Forecast (No Surprises)

  • Best time in history to be a Software Engineer in terms of job satisfaction, pay, and opportunities
  • With few exceptions, hardware is commonplace and inexpensive
  • Platforms to easily distribute software, e.g., app stores
  • Cloud services remove many barriers to entry
  • Post-PC and rise of mobile, e.g., tablets, smartphones
  • To some, these are challenges, but they can be opportunities


  • Refinement of any process never stops
  • Abstractions such as cloud computing remove many issues but introduce new ones
  • How to create for mobile and post-pc devices, i.e., the "jobs to be done".

Things to Avoid

  • Letting your attitudes get in the way of serving your customers or employer
  • Confusing what you need to do your job with what other people need
  • Confusing traditional ways of doing things with newer approaches

Improve Your Skills

  • Use version control for everything
  • Learn to write good commit messages
  • Learn to write and use build files and associated software
  • Practice your workflows and use them in all your classwork