How to deliver software: Difference between revisions

From YM2149.org
Jump to navigationJump to search
No edit summary
No edit summary
 
(3 intermediate revisions by the same user not shown)
Line 19: Line 19:
* eat the frog, within reason
* eat the frog, within reason
** not eating the frog risks development that may need to be partially undone
** not eating the frog risks development that may need to be partially undone
** another way of looking at this is taking opportunities to get ahead of the curve e.g. not treating deployment as an afterthought
** whereas picking too hard an option is at risk of delaying delivery due to too many surprises
** whereas picking too hard an option is at risk of delaying delivery due to too many surprises
*** when migrating a dozen services for example, do the easiest one first to find out what the baseline surprises are
** you are never going to find a roman road between A and B so it's not a big deal, focus on deliverables of value even if they're not the ones originally planned
** you are never going to find a roman road between A and B so it's not a big deal, focus on deliverables of value even if they're not the ones originally planned


Line 28: Line 30:
** also merging a feature branch into the default branch does not build upon questionable code
** also merging a feature branch into the default branch does not build upon questionable code
* a ticket is done when the changes are in production
* a ticket is done when the changes are in production
* split work feature by feature, not layer by layer
** do not deploy on friday, allow 24 hours for unforeseen errors
* split work feature-by-feature, not layer-by-layer
** descope tasks that can later be fixed forward
** descope tasks that can later be fixed forward
* squash merge makes the history less useful for investigations or revert
* squash merge makes the history less useful for investigations or revert
** in particular, a story may result in a refactor commit followed by a feature commit. combining those throws away a ton of information and may make refactoring less attractive to developers. they should not be in separate pull requests as refactoring needs context or may be negative work, and benefits from a free round of testing
** in particular when a story results in a refactor commit followed by a feature commit, combining those throws away a ton of information and may make refactoring less attractive to developers
** they should not be in separate pull requests as refactoring needs context or may be negative work, and benefits from a free round of testing
* merge your own pull requests, own that responsibility
* merge your own pull requests, own that responsibility
* keep your own tickets up to date. in particular, only the assignee knows when it can really be moved to done e.g. experimental cloud resources may need to be tidied up
* keep your own tickets up to date
** in particular, only the assignee knows when it can really be moved to done e.g. experimental cloud resources may need to be tidied up


[[Category:Programming]]
[[Category:Programming]]
[[Category:Wisdom]]
[[Category:Wisdom]]

Latest revision as of 08:54, 23 February 2025

Guidance

Process

  • default branch should always be releasable
    • any developer starting a feature branch can be confident of a stable base
    • also merging a feature branch into the default branch does not build upon questionable code
  • a ticket is done when the changes are in production
    • do not deploy on friday, allow 24 hours for unforeseen errors
  • split work feature-by-feature, not layer-by-layer
    • descope tasks that can later be fixed forward
  • squash merge makes the history less useful for investigations or revert
    • in particular when a story results in a refactor commit followed by a feature commit, combining those throws away a ton of information and may make refactoring less attractive to developers
    • they should not be in separate pull requests as refactoring needs context or may be negative work, and benefits from a free round of testing
  • merge your own pull requests, own that responsibility
  • keep your own tickets up to date
    • in particular, only the assignee knows when it can really be moved to done e.g. experimental cloud resources may need to be tidied up