Skip to content

Commit

Permalink
Updating slides for working in teams
Browse files Browse the repository at this point in the history
  • Loading branch information
zwalker committed Oct 15, 2024
1 parent ab503eb commit c343170
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 1,082 deletions.
2 changes: 1 addition & 1 deletion schedule.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ The following schedule is subject to change, and many slide links are not yet ac

### Topics

- Working in teams
- Working in teams [slides](/slides/2024f/07_agile_tdd_pairing/index.html)
- Agile Software Development
- Test Driven Development (TDD)
- Continuous Integration (CI)
Expand Down
106 changes: 60 additions & 46 deletions slides/2024f/07_agile_tdd_pairing/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,6 @@
Source:
https://www.bls.gov/ooh/computer-and-information-technology/software-developers.htm

???

Engineering is a scarce resource. The demand for software engineers is high
and you are one of those scarce resources.

Is AI, most recently LLMs, going to accelerate or decelerate this trend?
Maybe too early to tell, but my guess is it will accelerate it for a while
before any deceleration.

---

# Talent Shortage
Expand All @@ -51,6 +42,12 @@
Book:
[Developers are the New Kingmakers - Stephen O'Grady](https://www.oreilly.com/library/view/the-new-kingmakers/9781449368036/)

???

Is AI, most recently LLMs, going to accelerate or decelerate this trend?
Maybe too early to tell, but my guess is it will accelerate it for a while
before any deceleration.

---

# Scarce Resources
Expand All @@ -75,8 +72,12 @@

???

Engineering is a scarce resource. The demand for software engineers is high
and you are one of those scarce resources.
* In a shortage of resources, we need to optimize for the resources we have.
* How can we make teams opperate more efficiently?

Techniques/Tools like Agile, TDD, CI, and Pairing are designed to help teams work
* These techniques are designed to help teams work together more efficiently
* This isn't just about programmers
* Other disciplines are needed to run a tech company
Expand All @@ -93,7 +94,7 @@

Soon guidelines like this one should make complete sense:

> ## Sprint 2: Starts October 12
> ## Sprint 2: Starts November 11th

> * Conduct a __retrospective__ on how the last sprint went and how your group
> can improve.
Expand Down Expand Up @@ -131,10 +132,7 @@

???

* Agile is a collection of different approaches for developing software that has
emerged as dominant over the last 15+ years.
* Scrum is a popular form of Agile software development.
* This is more of a guideline than a strict set of rules.
* This is more of a suggested playbook than a strict set of rules.
* Adopting something too strict intiitively might not be "Agile"

---
Expand Down Expand Up @@ -181,7 +179,7 @@

.center[![Waterfall](waterfall.png)]

This diagram from Royce's paper is frequently cited.
This diagram from Winston Royce's paper "Managing the Development of Large Software Systems"



Expand All @@ -201,14 +199,18 @@
## Strengths

- This approach allows for deep specialization.
- Works great for areas like manufacturing where it is _expensive_ to
- Can reduce waste from repeating steps with long lead times in areas like manufacturing where it is _expensive_ to
alter the design due to issues detected in latter stages.

???

A specialist at one layer in the process can focus on their area of expertise and prepare an artifact for handoff to the next layer.

---

# Waterfall Continued

- Works best when you have complete knowledge wrt software development:
- In Software: works best when you have complete knowledge of the problem and technology:
- Requirements team understands the impact on design and development
- Designers have complete understanding of the difficulty of each design
decision
Expand Down Expand Up @@ -259,7 +261,7 @@
* Doesn't mean their is no process
- it means that process is fluid to meet the needs of the project and Team
* Doesn't mean there is no documentation
- it means that documentation is not intended to single that completion of a project and a handoff to another team
- it means that documentation is not intended to signal that completion of a project and a handoff to another team
* Doesn't mean there is no contract( or specification of requirements )
- it means that the requirements may be discovered as the project progresses
* Doesn't mean there is no plan
Expand Down Expand Up @@ -371,7 +373,7 @@
- Plan for a sprint
- Plan for an individual task

---
???

# Examples of responding to change

Expand Down Expand Up @@ -460,7 +462,7 @@
- Support
- Other teams
- Executives
* Is this a process? I though Agile was about individuals and interactions over processes and tools
* I thought Agile was about individuals and interactions over processes and tools?
* The process can take a wide variety of forms and is what the team has decided is best for them
* The Scrum Master is not a manager, but a facilitator of the decided process
* The produce owner and scrum master roles may be:
Expand Down Expand Up @@ -580,13 +582,13 @@

---

# Example of a typical Scrum Process
# Example of a Typical Scrum Process

## Spring Planning

Frequency - Once per sprint

A meeting at the start of each sprint is the to decide the "sprint commitment".
A meeting at the start of each sprint to decide the "sprint commitment".

## Grooming

Expand Down Expand Up @@ -687,6 +689,10 @@
> Should we perform integration as rarely as possible or as frequently as
> possible?

???

This can even be difficult for a single engineer working on single project with multiple feature branches

---

# Martin Fowler
Expand Down Expand Up @@ -758,8 +764,7 @@

# Types of Tests

The previous FizzBuzz example demonstrated __unit__ tests. Other types of tests
are:
* Unit tests

* Functional

Expand All @@ -779,17 +784,16 @@
_regression_.

???

* Functional
* Unit tests
- Tests a function or method, also called a unit test
* Functional
- Tests the business logic of the application
* Integration
- Tests how multiple functions or methods work together
* System
- Tests how multiple paths of the application work together
* System / End to End / Acceptance
- Tests how the entire system works together
* Acceptance
- Tests how the system works from the perspective of the user
- Often called end-to-end tests
- Simulates a user interacting with the system
- May simulate how a user interacting with the system

---

Expand Down Expand Up @@ -973,11 +977,16 @@

GitHub actions is free for open-source projects.

If you are doing TDD and creating automated tests, GitHub Actions will provide you
If you are doing Test Driven Development (TDD) and creating automated tests, GitHub Actions will provide you
with immediate feedback on your changes through GitHub:

.center[![Github Pull Request "All is well"](github_pr_all_is_well.png)]

???

When I see that all checks have passed, I know that the code is ready to merge
This can help your team scale by allowing you to merge code with a higher level of confidence

---

# Other Related Tools
Expand All @@ -1000,6 +1009,10 @@

https://github.com/bbatsov/rubocop

???

You might add these as separate checks in your CI system

---

# Pair Programming
Expand All @@ -1025,19 +1038,6 @@

---

# Pairing in this class

Pair programming is __strongly__ encouraged, but not required.

When you pair you will inevitably experience more of your project. This means
you can claim you worked on that component in an interview, and as a result
should be able to sufficiently explain what was done.

On the other hand, it is possible for there to be bad pairings among your
group. If you don't feel it is working out, then simply don't do it.

---

# Pairing: Problem Complexity

.center[![pairing usefulness as a function of problem complexity](pairing_and_problem_complexity.png)]
Expand Down Expand Up @@ -1077,6 +1077,20 @@
.bottom-row20[
- Source: <https://www.remotemobprogramming.org/>
]

---

# Pairing in this class

Pair programming is __strongly__ encouraged, but not required.

When you pair you will inevitably experience more of your project. This means
you can claim you worked on that component in an interview, and as a result
should be able to sufficiently explain what was done.

On the other hand, it is possible for there to be bad pairings among your
group. If you don't feel it is working out, then simply don't do it.

---

class: center, middle, inverse
Expand Down Expand Up @@ -1394,7 +1408,7 @@

- help reduce the time to __integrate__ feature branch changes

--
???

See chapter 3 in the RoR book.

Expand Down
Loading

0 comments on commit c343170

Please sign in to comment.