Kitts' notes on Leyna Cotran's software engineering talk


Software engineering requirements activities

- elicit, model and analyze, communicate, agree, evolve


Google's products altogether (as of 2015) total ~2B lines of code

How do you manage that?  Developing... maintaining....


Software development process model:  way of thinking about the development process:

- waterfall (est in 1970's) - offered as a way NOT to develop software, but was adopted by the government as the way of doing business!  Negatives were issues like having the phases too isolated from one another, etc.

- spiral/incremental (est in 1980's) - start small and grow in functionality over time, prototyping incrementally

- agile - frequent releases that work


Tools - to manage process

- collab tools: support physically dispersed teams

- config management: store and manage classes, functions, etc.

- tools to automate daily tasks (like test cases)


Importance of design (user experience)

- deliberate decisions that must satisfy user

- interplay btw user desires and technical feasibility

- seamless transition btw features and navigation

- exploiting reuse of interface concepts and commonality


Software architect

- Structure: code and libraries

- Foundation: servers, routers, app devices

- Blueprints: data flow diagrams, block diagrams

NOTE -- architecture is NOT design - design is about user experience whereas architecture is the way to represent/implement a program, no matter how well or poorly designed


Testing software

- automate!

- write test cases in parallel to writing requirements

- test for the unknowns


So why is developing software so hard?

- people - we make mistakes, think differently, miscommunicate, emphasize different things, etc.

- process - always evolving, selecting which ones to use

- tools