Slide 1

Slide 1 text

A project is divided into sprints of ten days each. A sprint is a two-week mini-project.

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

Did you ever think: We never have time to re-pay technical debt. Half-baked features are painful. Friday deployments are stressful.

Slide 4

Slide 4 text

aka: Never deploy on a Friday! Sprints start on a Wednesday and ends on a Tuesday.

Slide 5

Slide 5 text

This is where the development happens. Building features for the first 8 days.

Slide 6

Slide 6 text

No features are started in this period. Feature freeze: Fixing bugs for the last 2 days.

Slide 7

Slide 7 text

This coincides with the next sprint. Deployment on the next morning after the sprint.

Slide 8

Slide 8 text

Sprints: A sprint is a two-week mini-project. Start on a Wednesday. Never deploy on a Friday. Feature freeze on the last 2 days to iron out bugs. Deploy after the sprint, the morning after.

Slide 9

Slide 9 text

A project is divided into sprints of ten days each. A sprint plan is a to-do list for the next 2 weeks.

Slide 10

Slide 10 text

Did you ever think: There's no plan except to "just build things." We never know what we're working towards.

Slide 11

Slide 11 text

Just Markdown or plain text can be fine. Sprint plans are very simple. sprint-plan.txt • • • Article editing - George • Wysiwyg editor • Image uploading Article view improvements - Paul • Responsive view • Print view Comment moderation - Ringo • Approve/reject comments

Slide 12

Slide 12 text

In Trello, it can be a Trello list. Sprint tasks should be in your task tracker. Trello • • •

Slide 13

Slide 13 text

Talk about the previous sprint and the next sprint. Schedule a meeting every sprint start. Retrospective of the previous sprint — Planning of the current sprint

Slide 14

Slide 14 text

Sprint planning: Create a Sprint plan. Fill up your task tracker for the current sprint. Schedule a retro + planning meeting every sprint start.

Slide 15

Slide 15 text

This version number consists of two numbers. Label your sprints using version-like sprint numbers. 1.2

Slide 16

Slide 16 text

Did you ever think: "What sprint are we on, again?" "Did you deploy something last night?" "Who did the last deployment?"

Slide 17

Slide 17 text

The first number is the milestone, the second the sprint. The numbers tell you what milestone and sprint you're in. 0 . 1 Milestone Sprint

Slide 18

Slide 18 text

Each Milestone is a big goal to be achieved in 2 to 6 months. Plan your project in milestones, which are divided into sprints. 0.1 0.2 0.3 0.4 First sprint ever Posting articles Searching, commenting (aka 1.0) Polish and first public release 1.1 1.2 1.3 1.4 Slight redesign Groundwork for ads Connect to social media accounts (aka 2.0) Polish and re-launch Milestone 0 — Release MVP Milestone 1 — Scaling to 10k users 2 weeks 2 weeks 2 weeks 2 weeks 2 weeks 2 weeks 2 weeks 2 weeks

Slide 19

Slide 19 text

These are based on the sprint numbers. Every production deploy should have a version number. v 1 . 2 . 0 Sprint number Deploy number in this sprint

Slide 20

Slide 20 text

At the end of sprint 1.3, do a v1.3.0 production deploy. Sprint 1.3 is working to release v1.3.0. Start of sprint 1.3 May 5 (day 1) Release of v1.3.0 and start of sprint 1.4 May 20 (day 10+1) Release of v1.3.1 to hotfix some bugs May 21 (day 10+2)

Slide 21

Slide 21 text

This number is based off the sprint number. Every production deploy should have a version number. v1.2.0

Slide 22

Slide 22 text

These 3 numbers are roughly in semver format. Version numbers are based on the sprint number. v 1 . 2 . 0 Sprint number Deploy number in this sprint

Slide 23

Slide 23 text

This creates a Git tag. Git tags are made using GitHub releases.

Slide 24

Slide 24 text

GitHub releases does this under-the-hood. They're the same as tagging it using the Git CLI. ~$ git tag v1.2.0 ~$ git push origin --tags Terminal • • •

Slide 25

Slide 25 text

Version numbers: Name your sprints with a sprint number (eg, 0.1). Group your sprints into 2-6 month Milestones. Every production deploy has a version number. (eg, v0.1.0). Use Git tags for tagging version numbers.

Slide 26

Slide 26 text

Deployment should be taken care by CI. Deployment workflow

Slide 27

Slide 27 text

Did you ever think: "How do you deploy again?" "Who has SSH keys?" "Do I need to install Ansible/Capistrano/Fabric/etc?"

Slide 28

Slide 28 text

This will deploy production when merged! Prepare a develop → master pull request.

Slide 29

Slide 29 text

Assuming, of course, you set up auto-deployments! Merge it. CI will auto deploy when master is updated.

Slide 30

Slide 30 text

Give the deployment a version number. Tag and write release notes using GitHub releases.

Slide 31

Slide 31 text

Deployment: 1. Create and merge a master pull request. 2. Let your CI automate deployment of master. 3. Create a GitHub release to tag your deployment.

Slide 32

Slide 32 text

This should be as automated as possible. Writing release notes Rn

Slide 33

Slide 33 text

Did you ever think: QA needs to check the latest changes. QA has no idea what they are. "The Client is asking what's changed and I don't know what to say." "I was on vacation, what did I miss?"

Slide 34

Slide 34 text

Terminal • • • ~$ git fetch ~$ git log origin/master...origin/develop \ --first-parent \ --oneline Inspecting differences between two branches This gets you one all PR's merged. bec8d46 Merge pull request #819 from x/feature c9ca921 Merge pull request #818 from x/feature 1ba92d4 Merge pull request #814 from x/feature 92b4cd0 Merge pull request #816 from x/feature 00f2bde Merge pull request #802 from x/feature de821a4 Merge pull request #798 from x/feature bec8d46 Merge pull request #794 from x/feature c9c14aa Merge pull request #788 from x/feature bec8d46 Merge pull request #784 from x/feature c9ca921 Merge pull request #785 from x/feature 1ba92d4 Merge pull request #786 from x/feature 92b4cd0 Merge pull request #778 from x/feature

Slide 35

Slide 35 text

Terminal • • • ~$ git fetch ~$ git log origin/master...origin/develop \ --first-parent \ --oneline Inspecting differences between two branches rev1...rev2 Include commits reachable from rev2, but not rev1 --first-parent Follow only merge commits --oneline Condense display of Git log

Slide 36

Slide 36 text

Terminal • • • ~$ git fetch ~$ git prlog origin/master...origin/develop \ | sort \ | pbcopy Automating this using git-prlog See: http://github.com/rstacruz/git-prlog - Admin: allow login from iPad #814 - Admin: fix notification bug #819 - Admin: list posts alphabetically #815 - Comments: fix formatting #809 - Comments: fix Markdown issue #810 - Comments: allow commenting on posts #811 - Posting: allow uploading images #849 - Posting: use S3 for uploads #850 - Posting: prevent trackback spam #852 - Posting: fix mobile responsiveness #850

Slide 37

Slide 37 text

Terminal • • • ~$ git fetch ~$ git prlog origin/master...origin/develop \ | sort \ | pbcopy Automating this using git-prlog See: http://github.com/rstacruz/git-prlog git-prlog See: github.com/rstacruz/git-prlog | sort Sort lines alphabetically | pbcopy Copy to clipboard (OSX)

Slide 38

Slide 38 text

Release notes: Write release notes. Use Git to help you write release notes.

Slide 39

Slide 39 text

To sum it up: Organize your efforts into milestones and sprints. Enforce a feature freeze period every sprint. Use version numbers and Git tags. Let Continuous Integration do the deployment for you. Write release notes to keep everyone informed.