Guest Lecture at SUTD / ISTD
Getting the right things done right
Agility in Practice
• The Agile Manifesto is not very prescriptive. More like a bunch of
guidelines & principles.
• How do we put it into practice?
• For many of us, we don’t care about buzzwords.
• We care about getting the right things done. We care about getting
things done right.
• Its become the natural way in which we build software. Do what works
Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan
• This is the process of ﬁguring out what is the right things to build.
• Hypothesis -> Build -> Validate -> Repeat
• Hypothesis - Customers at Starbucks would like to pay with Bitcoin.
• Build - Draw some screenshots, low ﬁdelity.
• Validate - Survey a bunch of people at Starbucks. Valid? Invalid?
• Repeat - Come up with higher ﬁdelity screenshots… until a working MVP.
• Be willing to ask questions.
Building It Right
• Building software is a team sport.
• Business owner / product owner, users/customers, other
developers, investors, etc…
• Communication is key to helping everyone understand why and
what we are building.
• Agree on team norms and standardised practices
• Team > Self (Team > Product)
4 Practices that has worked for us
1. Design / build for right now.
2. Automated Testing
3. YAGNI (sometimes)
4. Clear plumping issues early, get faster feedback on features.
1) Design / Build For Right Now
• Engineers have a tendency to over-engineer things.
• Future prooﬁng, considering all the possible use cases is wasteful.
• Unholy Trinity: Better vs Faster vs Cheaper
• Build for right now. But also build in such a way that doesn’t make it
too expensive to make changes.
• Design patterns helps you design your code in such a way that is
extendible without much code changes to legacy code.
2) Automated Testing
• In agile, we value rapid feedback. We also hate repetitive tasks.
• Automated testing lets us verify quickly that our code works as
expected. It is also a very repetitive task.
• Write Test (red) -> Write Code (green) -> Refactor -> Repeat
• Tests also helps us clean up / refactor our code with more
conﬁdence. It also guards against regression bugs.
2) Automated Testing
• How much test? Is 100% test coverage desirable?
• No, 100% test coverage is a vanity metric.
• A undiscovered bug is a test you have not written yet.
• Code review helps. Code scanners help too.
• Invest time in preparing and building out your test suite. Its super
helpful when you are tired or facing crunch time.
3) YAGNI (sometimes)
• You ain’t gonna need it (right now)
• Building lean means making some compromises on your grand
vision until its validated.
• Ask yourself, will the product suffer from the lack of this feature? Will
the user experience be any less delightful?
• With limited time and limited run-way (funds) to build traction on
your software, you have to prioritise.
4) Clear Plumping Issues Early
• Remove blockers of rapid feedback
• Project management tool
• Version Control Software (and where to host it)
• Continuous Integration (and test suite)
• Code standards
• Where to deploy your software to for user acceptance
• Continuous Deployment
• Reﬂect, evaluate, retrospect & grow together.
• Keep learning from each other.
• Sharing is caring, and it builds understanding and trust in the team.
What we actually do…
Project Kickoff / Scoping
Get everyone on the same page.
Iteration Planning Meeting
Weekly check-in with Product Owner on what the next iteration looks like.
Daily check-in on progress and blockers with the team.
Get it in the hands of users.
Regular session to reﬂect on how the last few iterations have been.
Write The Code!
• Developer picks up story in Pivotal Tracker.
• Use Test Driven Development (TDD) to build out the feature.
• Pair Programming for shared knowledge of the code.
• Driver/Navigator, Tester/Coder, Pilot/Co-Pilot
• Commit and push to GitHub. Trigger CI.
• Code review via Pull Requests.
• Accepted PR will trigger a deployment to QA environment.
• Product / Business Owner
• Team Lead
• Larger projects
• Business Analyst
• Project Manager
• DB Admin
• Quality Assurance
What’s next for you?
• Join a local tech meet up community.
• Meetup.com, Facebook Groups, WeBuild.SG.
• Meet your peers, seniors and other professionals.
• Open sharing of knowledge in the Open Source communities.
• Participate in Open Source projects.
• Pull requests helps you get noticed and learn from your peers.
Geek Brunch SG
A biannual social gathering for all engineers, designers
and makers in Singapore.
Come down and have a brunch.
Bring someone new, someone curious.
Saturday Feb 11 @ 11:00 AM
Wheeler's Yard Bike, Singapore
Slides on SpeakerDeck
We are hiring!