Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Agile sprint etiquette

Agile sprint etiquette

Illustrative accompaniment to the Project Lifecycle chapter of http://ricostacruz.com/modern-development/

Rico Sta. Cruz

May 16, 2017
Tweet

More Decks by Rico Sta. Cruz

Other Decks in Technology

Transcript

  1. A project is divided into sprints of ten days each.

    A sprint is a two-week mini-project.
  2. Did you ever think: We never have time to re-pay

    technical debt. Half-baked features are painful. Friday deployments are stressful.
  3. aka: Never deploy on a Friday! Sprints start on a

    Wednesday and ends on a Tuesday.
  4. 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.
  5. A project is divided into sprints of ten days each.

    A sprint plan is a to-do list for the next 2 weeks.
  6. Did you ever think: There's no plan except to "just

    build things." We never know what we're working towards.
  7. 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
  8. In Trello, it can be a Trello list. Sprint tasks

    should be in your task tracker. Trello • • •
  9. 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
  10. Sprint planning: Create a Sprint plan. Fill up your task

    tracker for the current sprint. Schedule a retro + planning meeting every sprint start.
  11. Did you ever think: "What sprint are we on, again?"

    "Did you deploy something last night?" "Who did the last deployment?"
  12. 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
  13. 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
  14. 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
  15. 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)
  16. This number is based off the sprint number. Every production

    deploy should have a version number. v1.2.0
  17. 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
  18. 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 • • •
  19. 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.
  20. Did you ever think: "How do you deploy again?" "Who

    has SSH keys?" "Do I need to install Ansible/Capistrano/Fabric/etc?"
  21. Assuming, of course, you set up auto-deployments! Merge it. CI

    will auto deploy when master is updated.
  22. 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.
  23. 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?"
  24. 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
  25. 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
  26. 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
  27. 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)
  28. 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.