Create a developer handbook that this initiative is following #21
Closed
MariusStorhaug
started this conversation in
Ideas
Replies: 1 comment
-
Moving this to an issue on the PSModule/Docs repo |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
Developer handbook
What are our:
Way of working
Continiuous Planning
Clearly define a vision statement. 3 levels of 3 horizons (Strategic, Initiatives, Delivery | Now, Next, Later)
OKRs
Clearly understand what a successful release (small batch iteration) contains.
Figure out the details of how to get there only when you need to do so.
Create a detailed plan only for parts that are 100% clear at the last responsible moment:
Conduct hypothesis-based development on that detailed plan to build and learn.
Use the validated learning from the aforementioned hypothesis to create additional clarity in the high-level plan.
Prioritization
Backlog is stack ranked, or ordered. It specifically calls out in which order backlog items should be implemented. Ranking items in the order they should be executed facilitates better trade-off conversations and eliminates confusion over what is most important.
Backlog items are prioritized by value, be it ROI or cost-of-delay.
User story definition
Practices
Being product-centric
List of some things:
Principals and processes to follow:
Process
On user stories
Well-written user stories use the INVEST model, which identifies six important properties:
Early adopters (enterprises with low agile maturity) should apply agile offerings to a small project and use on-site supplier developers.
Growing adopters (enterprises with medium agile maturity) have some experience in applying agile with limited outcomes.
Confident and mature adopters (enterprises with significant agile maturity) should continue to experiment with new models and use effective metrics.
Backlog refinement
What it is
Backlog refinement is an exercise in which the product owner and some (or all) of the team review backlog items to help ensure priority and fidelity.
How to conduct a backlog refinement exercise
Remove user stories that no longer appear relevant.
Create new user stories in response to newly discovered needs.
Assess relative priority of stories.
Assign estimates to stories that have yet to receive one.
Correct estimates in light of newly discovered information.
Split user stories that are high priority but too coarse-grained to fit in an upcoming iteration.
Ensure user stories have information to be estimable for sprint planning.
The value of this exercise lies in the principles it’s based on, such as design thinking, simplicity, and Lean management, and not the components of the exercise.
Sprint planning
Sprint planning is the kickoff to every sprint
Objective: team commitment to user stories/scope to be committed for the next sprint.
Sprint planning consists of four primary activities:
Confirm dates for sprint review and customer demonstrations
Product owner communicates the sprint goal and/or customer demonstration use cases
At the end of every sprint, show off what’s been pushed to a production-like environment.
Review proposed user stories
Assuming backlog refinement is happening regularly and effectively to prioritize and estimate all user stories in the upcoming sprint, this should be straightforward and a simple exercise in commitment agreement.
Set team capacity
Be realistic and honest about you and your development team’s time and account for vacations and other sprint ceremonies.
Commitment
Output of this meeting should be team agreement on user stories to take into the sprint based on user story sizing and team capacity.
Daily scrum
Daily scrum participants should answer three basic questions:
What did I do yesterday to help the team achieve the sprint’s goal?
What do I plan to do today to help achieve the sprint’s goal?
Do I see any impediments that may jeopardize the sprint’s goal?
Daily scrums should
Focus on the team’s shared goal
Exhibit efficient communication
Spawn additional collaboration
Instantly remove impediments
Assume fast situational awareness for everyone
Be of less than 15 minutes’ duration
Reinforce the idea of scrum as a highly disciplined process
NOT be a status reporting exercise
It’s fine for daily scrums to spawn additional collaboration after the meeting. Not all team members need to be involved in everything, but it’s good for all team members to be aware of all efforts.
Daily scrums that take more than 15 minutes are an indicator of a lack of discipline (stick to the agenda) or a larger problem.
Actually standing up during the meeting is a generally accepted practice that helps keep it short but is not required – everyone should be able to participate in scrum.
Sprint reviews
Sprint review considerations:
Delivering an increment of working software at the end of every sprint is the most important commitment the team makes.
Long periods of time - for example, more than one sprint - without working software is an indicator of trouble.
It’s not OK for the team to say that certain sprints don’t result in working software.
Working software is a key driver of customer feedback.
Customer demonstrations achieve the following:
Enforce the commitment to developing working software.
Provide the customer with confidence about the team’s progress towards their desired outcome.
Lead to customer feedback, possibly resulting in backlog changes.
Prompt the customer to do user acceptance testing.
Help ensure that deployment is predictable.
Retrospectives
...
Continuous Integration
Long development cycles
High build failures/bug counts
Limited communication and collaboration
CI Goals:
CI:
Mono-repos and multi-repos
Feature branching
Trunk-based branching
Git pull requests
Branching policies
Automated builds
Functions for Continuous Integration include:
Behavior-driven development (BDD)
Test-driven development
Always run all “commit tests” locally before check-in
Wait for “commit tests” to pass before moving on
Don’t comment out failing tests
Don’t check in a broken build
Never go home on a broken build
Always be prepared to revert to the previous revision
Time-box fixing before reverting
Every check in is “production grade”
Take full responsibility for all breakages that result from your changes
Everything as code
All project elements should be subject to source control, including:
Application source code.
Database schema.
Seed or look-up data.
Test data.
Application configuration (Configuration as code).
Infrastructure configuration (Infrastructure as code).
Accelerate
Maturity model -> Capabilities model
It’s output / business goal oriented
Key capabilities
Product offerings
Mttr - mean time to recover
Lead time
Develop the what, and the how
Shorter = better feedback loops
Code committed -> it’s running in main
Batch sizes = easier to get to main
Deployment frequency is a proxy for lead time
Proves adoption of continuous integration on deployment
Culture shift by grassroots movement/change.
Implementing CI/CD will change culture
Automate everything vs ROI and criticality
How to prioritize what to automate first?
Everything as code introduces Version control
Shift left test and security
Githubflow vs Trunk based
TDD of platform, Pester and deploy a solution which should/should not feel.
Accelerators can be available as option.
Refrain from inducing naming conventions on teams. Let them define their own for their own services.
Allow teams to choose their own tools.
Suitability
Experimentation
Performance
Tools and architecture to provide wanted outcomes.
Platform configuration is system critical/sensitive info. Protect code from insight to need to know?
Rugged manifesto
WIP limits
External have negative impact on dev performance. No change management has positive impact?!!!
Lightweight change management - Avoid CABs as external teams having to approve changes. Only peer review or peer programming!
Triage changes - PIM
Bring back to code
Lean 8.1
MVP
Flow of work - visibility
Seek customer feedback
Authority to change specs on product internally in the team - no external approval
Team objective
Help to develop a team with world class Platform DevOps engineers.
Design decisions
PowerShell projects
Repository
Repository structure
The test and build process is based on the following repository structure. The PSModule framework is expecting the modules to follow this structure as some of the
paths and calculations are based on this structure. Not following this might result in the build process not working as expected.
Modules
Principles for module design
To be filled later.
API specs to PowerShell
What-if for any state changing functions
All functions must support a what-if functionality that shows the change that is happening via Get, and mocking the new object + doing a comparison. The what-if object should be able to be retrieved by a the caller.
Functions
...
Documentation
.OUTPUT <OutputType>
doc tag..INPUT <InputType>
doc tag.param()
block, above the function.Manifest
ModuleVersion
is generated from thePublish-PSModule
function, based on available version and lables on PRs, not from the module manifest.GitHub Action and workflow projects
Actions and reusable workflows
main.ps1
file located in ascripts
folder.main.ps1
file.GITHUB_ACTION_INPUT_
followed by the name of the action input to avoid collision with other environment variables. https://docs.github.com/en/actions/security-guides/security-hardening-for-github-actions#understanding-the-risk-of-script-injectionsreadme.md
file in the action folder that explains the action and how to use it.Action-Test
workflow file that tests the action.Auto-Release
action for automating the release of the action via pull requeusts.the fix will be implemented on the latest version and the user will have to update to the latest version to get the fix.
Configuration
.github
folder..github
repository, to simplify configuration control for all the repositories in the organization..github
repository, overwriting defined values only..github
folder, overwriting defined values only.Beta Was this translation helpful? Give feedback.
All reactions