Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Modern Software Development Practices

Modern Software Development Practices

Guest Lecture at SUTD / ISTD

Michael Cheng

February 09, 2017
Tweet

More Decks by Michael Cheng

Other Decks in Programming

Transcript

  1. Modern Software
    Development Practices
    Getting the right things done right

    View Slide

  2. Michael Cheng
    @CoderKungfu
    [email protected]

    View Slide

  3. View Slide

  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

    View Slide

  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/

    View Slide

  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.

    View Slide

  7. View Slide

  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)

    View Slide

  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.

    View Slide

  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.

    View Slide

  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.

    View Slide

  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.

    View Slide

  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.

    View Slide

  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

    View Slide

  15. Sustainability
    • Reflect, evaluate, retrospect & grow together.
    • Keep learning from each other.
    • Sharing is caring, and it builds understanding and trust in the team.

    View Slide

  16. What we actually do…

    View Slide

  17. Project Kickoff / Scoping
    Get everyone on the same page.

    View Slide

  18. View Slide

  19. View Slide

  20. View Slide

  21. Iteration Planning Meeting
    Weekly check-in with Product Owner on what the next iteration looks like.

    View Slide

  22. Daily Standup
    Daily check-in on progress and blockers with the team.

    View Slide

  23. View Slide

  24. Release
    Get it in the hands of users.

    View Slide

  25. Retrospective
    Regular session to reflect on how the last few iterations have been.

    View Slide

  26. View Slide

  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.

    View Slide

  28. View Slide

  29. View Slide

  30. Team Roles
    • Product / Business Owner
    • Team Lead
    • Developers
    • Coders
    • DevOps
    • Larger projects
    • Business Analyst
    • Project Manager
    • DB Admin
    • Quality Assurance

    View Slide

  31. What’s next for you?

    View Slide

  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.

    View Slide

  33. http://webuild.sg

    View Slide

  34. http://engineers.sg

    View Slide

  35. http://kopijs.org

    View Slide

  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

    View Slide

  37. Questions?

    View Slide

  38. Slides on SpeakerDeck
    https://speakerdeck.com/miccheng/
    modern-software-development-practices

    View Slide

  39. Michael Cheng
    @CoderKungfu
    [email protected]

    View Slide

  40. We are hiring!

    View Slide