Gitlab
getting system
Our product is made of code
- Bad code === bad product
- Best code !== best product
- We should strive to construct high quality code
- Everyone who writes code is changing the product
- To maintain quality we should be aware of what changes are happening and why
A brief history lesson
Our historical approach to Software Development
- Idea
- Informal discussion
- Make an asana task (maybe)
- Immediately start implementing
- Code deployed directly to prod
- Fix it when it blows up
What's wrong with that?
Disparate sources of information
- Source of ideas coming from weird spreadsheets
- In-person discussions mostly undocumented
- Bug reports come via email or slack or zendesk or your mum
- Tasks live in Asana as one liners with little context
Ideation
- Idea/feature discussions happen with little/no record
- Human memory is bad, details are lost
- No singular source of truth
- Discussion has little chances for outside input
- Hard to audit or review past ideas and processes
- Good ideas that don't progress can be forgotten
Design
- Design discussions lack input from rest of team
- Ideas go to design with little UX discovery
- Designs could be biased/not informed by quant/qual data
Implementation
- Discussions lack team inclusion into creating the most effective solution
- Planning can be burdened on one person
- Plans not documented to be referenced later
- Lack of upfront planning makes it difficult to estimate time required
- Code goes live with little oversight
- Knowledge of systems gets centralised to the person who built it
Bug Tracking
- Bugs often reported but not recorded
- Reported bugs include "User said portfolio broken"
What does that mean??? - Long standing bugs become "accepted" and never get fixed
How does this effect the product
-
Lack of documentation on the "What? Why? How?" for future reference
-
Valuable discussions on ideas get lost ("Why did we do that again?")
-
Lack of planning/understanding creates inflexible solutions
(tech debt, slowing down iteration speed) -
Rushed designs that either require reworking or we end up living with
(design debt?) -
Downtime due to broken solutions deployed without review
(Loss of new users and can turn off existing users) -
Lack of feedback for developers (No insight on what to improve next time)
-
Bugs reaching users, some bugs having a long lifetime (Poor user experience)
Our lord and saviour
Gitlab
What is it?
- Source code version control (aka Bitbucket)
- Collaborative software development tool
- "It's a discussion about software"
How do we solve '''some''' of our problems with Gitlab?
You have issues
- The name isn't negative
- Think of them as a collaboration tool
What are issues for?
- Discussing the implementation of a new feature
- Submitting enhancement proposals
- Asking questions
- Reporting bugs and malfunctions
- Obtaining support
- Elaborating new code implementations
What happens if you don't make an issue first?
- I will find you
- You will make it hard to find or reference your work later
- There may be parts of the system you aren’t familiar with
- There may be limitations or possibilities you’re not aware of
- There may be factors for users you may not know
- There may be work going on in a parallel effort which relates your idea
- There may be future considerations or plans you're not aware of
Example lifecycle of a new feature issue
- We identify a business problem/opportunity (Not enough users signing up)
- We talk to customers and do user research
(We find out we're missing dogecoin on the platform) - We discuss/brainstorm solutions and pick the best one
- New feature issue created in Gitlab
- We create a prototype to validate that our solution actually solves that problem (Richard creates simplywall.st/doge page mockup, gets Al's feedback on it)
- We test the prototype and we see that users understand how to access the feature and find it attractive
- Issue moves into the technical planning and Implementation phases
(Possibly in a different related issue)
Example lifecycle of an enhancement issue
- We identify or flag a technical problem or optimization
- Discussion/brainstorm on possible solutions and pick the best approach
- Planning/discussion on implementation strategy
- Merge Request created
- Implementation
- Complete
- Code reviewed and approved
- Deployment
Example lifecycle of a bug issue
- User reports a bug via Zendesk
(Company news empty on ASX:TLS) - Marcelito investigates and creates bug report
(Company news section empty for some companies) - Bug gets assigned or picked up
- Discussion on approach or request for input
- Merge request created in WIP mode
- Work starts and commits are added
- Work complete, WIP mode removed and approvers added
- Approved/Denied
When not to make an Issue
- Typos/Corrections
- Small bugfixes with no bug report
Merge Requests
-
If you're not writing code you don't need to care
-
Used as the starting point for constructing code
-
If you don't need an issue you start directly with a merge request
-
Can operate similarly to Issues (contains similar collab tools)
-
However more for final discussion of technical details
-
Are for constructrive criticism or suggestions
-
Final place for feedback and quality of code before it makes its way into the product
-
Two eyes better than one
Typo/Correction/Small bug fix
MR workflow
- Create MR with title, add description
- Work starts
- Fix commited
- Approvers added
- Merged/Denied
Overall workflow
-
Task, Feature or Bug is created as an Issue
-
Discussion (It works like a slack thread e.g. "@adamhejl should we make the doge logo 3d?")
-
Issue progresses to implementation stage
-
"Create merge request (MR)" from Issue to automatically create a working branch
-
MR is in Work In Progress (WIP) mode <-(Start here if skipping Issues)
-
Implementation & commits added
-
MR set as complete, reviewers assigned
-
MR is discussed if necessary
-
MR Approved & Merged
-
Deployed to production
Gitlab doesn't do everything
Gitlab doesn't do
- Generation of ideas (see Product Board)
- Product direction (see Product Board)
- Proper documentation or company Wiki
Extra stuff it does do
- Milestones (groups of issues)
- Issue boards (Like asana boards)
- Basic issue prioritisation (issue weights)
- Issue tagging
- Time tracking
- Review apps
Questions
gitlab-and-you
By Jabin Bastian
gitlab-and-you
- 581