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 full-size slide

  2. Michael Cheng
    @CoderKungfu
    [email protected]

    View full-size slide

  3. 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 full-size slide

  4. 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 full-size slide

  5. 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 full-size slide

  6. 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 full-size slide

  7. 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 full-size slide

  8. 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 full-size slide

  9. 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 full-size slide

  10. 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 full-size slide

  11. 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 full-size slide

  12. 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 full-size slide

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

    View full-size slide

  14. What we actually do…

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  18. Release
    Get it in the hands of users.

    View full-size slide

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

    View full-size slide

  20. 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 full-size slide

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

    View full-size slide

  22. What’s next for you?

    View full-size slide

  23. 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 full-size slide

  24. http://webuild.sg

    View full-size slide

  25. http://engineers.sg

    View full-size slide

  26. http://kopijs.org

    View full-size slide

  27. 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 full-size slide

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

    View full-size slide

  29. Michael Cheng
    @CoderKungfu
    [email protected]

    View full-size slide

  30. We are hiring!

    View full-size slide