Programming in the Large
+ The Project
COMP2511
In this lecture
Why?
Understand the broader context of the project and software design & development
Compare sequential and iterative development
Introduce the project
Discuss project management relevant to Milestones 1, 2, 3
The Software Development Lifecycle
Bullet One
Bullet Two
Bullet Three
Requirements to Design: An Abstraction
What problem are we trying to solve?
What does a good outcome look like - start with the end
Then
come up with a solution
Requirements to Design:
A Series of Abstractions
Product concept: How can we solve the problem with software?
Product design: Epics, user stories, acceptance criteria, UI design
Stack design: frontend, backend, data layer, integrations
Software design (OO): Entities, objects, relationships (UML diagram)
Project Intro
The Big Design Up-Front vs Incremental Design
"Traditional Engineering"
One step at a time
Ensure the current step is perfect before moving onto the next one
A big design up front
Problems with Designing Up-Front
Too many unknown unknowns
What if the requirements change?
Iterative Design
Work in sprints, iterations, milestones
'Agile' software development
Many variants - eXtreme programming, Rapid Application Development, Kanban, Scrum
Design incrementally
Adapt to changes in requirements
Discover and deal with problems in design as they arise
Problems with Incremental Design
No clear sense of direction/trajectory
In poorly designed systems, adaptations to new requirements become smaller-scale 'workarounds' - limit functionality/decrease maintainability
Tendency to 'make it up as we go along'
A solution?
Design a broad overview up-front
A framework to begin development
Adapt and change the design during development as needed
Set the trajectory and boundaries of work at the start
Design up-front a solution that is open for extension, reusable, etc.
Milestone 1
Project Management
Scope - requirements to implement
Time
Resources
Outcome - quality
We care more about quality than quantity in this project
What even is Software Quality?
Software that
works
Software that is
well tested
Provides assurance that the software does actually work
Software that is
well designed
What happens when the requirements evolve?
Milestone 3
Building an MVP
Focus of Milestone 2
Get something basic working that is well tested and well designed
Break the requirements up into small features
Prioritise the most important features and complete first
Approach:
Make a new branch for a single feature e.g. nick/battle
Design and stub out classes / functions
Write failing unit tests
Implement so the tests pass
Merge branch into master
Project Management
Test-Driven Development
Git practices
One feature, one branch, one merge request into master
Approve merge requests & code reviews
Code on master should always be stable
Meeting minutes
Use of GitLab Taskboard
or
Jira Taskboard
Timeline (next slide)
Timeline
Delegate requirements to each person
Considerations
Sequencing of Tasks - which tasks are most important? Which need completing first for others? (prerequisites)
Allocation of Tasks - allocate equally and based on availability
Timespan of Tasks - how long will each task take?
Teamwork
Designing as a team - everyone needs to be on the same page
Everyone needs to write code and contribute to documentation (PM, UML, etc.)
Tutor & project check-ins - mentoring & guidance
Dealing with teamwork problems:
Make an active effort to resolve internally
Speak to your tutor
Email cs2511@cse.unsw.edu.au