Modern Software Development Practices

Modern Software Development Practices

Guest Lecture at SUTD / ISTD

Cad06c496d78923202f2c30444fab2ea?s=128

Michael Cheng

February 09, 2017
Tweet

Transcript

  1. 3.
  2. 4.

    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
  3. 5.

    Agile Manifesto Individuals and interactions over processes and tools Working

    software over comprehensive documentation Customer collaboration over contract negotiation Responding to change over following a plan http://agilemanifesto.org/
  4. 6.

    Building Lean • This is the process of figuring 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 fidelity. • Validate - Survey a bunch of people at Starbucks. Valid? Invalid? • Repeat - Come up with higher fidelity screenshots… until a working MVP. • Be willing to ask questions.
  5. 7.
  6. 8.

    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)
  7. 9.

    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.
  8. 10.

    1) Design / Build For Right Now • Engineers have

    a tendency to over-engineer things. • Future proofing, 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.
  9. 11.

    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 confidence. It also guards against regression bugs.
  10. 12.

    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.
  11. 13.

    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.
  12. 14.

    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
  13. 15.

    Sustainability • Reflect, evaluate, retrospect & grow together. • Keep

    learning from each other. • Sharing is caring, and it builds understanding and trust in the team.
  14. 18.
  15. 19.
  16. 20.
  17. 23.
  18. 26.
  19. 27.

    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.
  20. 28.
  21. 29.
  22. 30.

    Team Roles • Product / Business Owner • Team Lead

    • Developers • Coders • DevOps • Larger projects • Business Analyst • Project Manager • DB Admin • Quality Assurance
  23. 32.

    Get Involved • 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.
  24. 36.

    http://geekbrunch.sg 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