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

How to plan a feature (long version)

How to plan a feature (long version)

Radoslav Stankov

June 27, 2023
Tweet

More Decks by Radoslav Stankov

Other Decks in Technology

Transcript

  1. Radoslav Stankov
    How to Plan a Feature

    View Slide

  2. View Slide

  3. Radoslav Stankov
    @rstankov

    View Slide

  4. View Slide

  5. View Slide

  6. View Slide

  7. View Slide

  8. View Slide

  9. Complicated feature !

    View Slide

  10. Where to start?

    View Slide

  11. Waterfall methodology

    View Slide

  12. " Waterfall Methodology

    View Slide

  13. ... this what we get

    View Slide

  14. View Slide

  15. Agile methodology

    View Slide

  16. # Agile Methodology

    View Slide

  17. View Slide

  18. No need for upfront
    design, just...

    View Slide

  19. ... code like a cowboy

    View Slide

  20. View Slide

  21. ... this what we get

    View Slide

  22. View Slide

  23. View Slide

  24. View Slide

  25. View Slide

  26. Tools when you need them...

    View Slide

  27. View Slide

  28. View Slide

  29. Plan for today

    View Slide

  30. $ Drawing
    % Spike
    & Focused Task
    ' Feature Switches
    ( Agenda

    View Slide

  31. $ Drawing

    View Slide

  32. View Slide

  33. ) Draw state/flow we want to achieve
    * Draw current state/flow
    + Database structure
    ➡ What we need todo (plan)
    $ Drawing

    View Slide

  34. - Tools
    Excalidraw - great for single player
    Whimsical - great for collaboration


    PlantUML - great for documentation
    Figma - for UI collaboration with designer
    Miro/FigJam - for group brainstorming
    ... use whatever works for you .

    View Slide

  35. https://blog.rstankov.com/how-i-plan-and-execute-features/

    View Slide

  36. View Slide

  37. done
    todo
    won't do
    in progress
    https://blog.rstankov.com/how-i-plan-and-execute-features/

    View Slide

  38. View Slide

  39. View Slide

  40. / Showcase 1

    View Slide

  41. Feature: Stacking on product page
    product page (not in stack) -> do you use -> yes -> review

    product page (not in stack) -> do you use -> no -> search (alternative) -> review 

    product page (in stack) -> still using? -> yes -> ask for tip -> add tip

    product page (in stack) -> still using? -> no -> search (alternative) -> review
    / Showcase 1
    (end to end test scenarios)

    View Slide

  42. / Showcase 2

    View Slide

  43. / Showcase 2

    View Slide

  44. / Showcase 3
    (brainstorm)

    View Slide

  45. / Showcase 4
    (advice)

    View Slide

  46. / Showcase 5
    (advice)

    View Slide

  47. PlantUML
    https://www.plantuml.com/

    View Slide

  48. @startuml
    "Browser" -> "Cloudflare": HTTPS Request
    "Cloudflare" -> "AWS ELB": HTTPS Request
    "AWS ELB" -> "Frontend (AWS ECS)": HTTPS Request
    "Frontend (AWS ECS)" -> "Backend (AWS ECS)": GraphQL Request
    "Backend (AWS ECS)" -> "Redis (Rediscloud)": Cache Query
    "Backend (AWS ECS)" -> "Database (AWS RDS Aurora)": SQL Query
    "Backend (AWS ECS)" --> "Frontend (AWS ECS)": JSON Response
    "Frontend (AWS ECS)" --> "Browser": HTML Response
    @enduml
    PlantUML
    https://www.plantuml.com/

    View Slide

  49. View Slide

  50. View Slide

  51. ) Explain the problem to someone (vocal or in writing)
    * Why something won't work
    0 While doing this ideas will come
    0 Explain the problem

    View Slide

  52. ) Create empty file on Desktop
    * Write quick & dirty code in empty file
    + Imagine a perfect world for this code
    1 Delete file
    # If solution is 2 ➡ think of something else
    ➡ If solution is ✅ ➡ use ideas in project
    ✍ Code Sketch

    View Slide

  53. % Spike

    View Slide

  54. “A task aimed at answering a question or gathering
    information, rather than at producing shippable product.
    Sometimes we can't estimate until the development
    team does some actual work to resolve a technical
    question or a design problem.”
    - WikipediA
    Spike
    (software development)

    View Slide

  55. “A task aimed at answering a question or gathering
    information, rather than at producing shippable product.
    Sometimes we can't estimate until the development
    team does some actual work to resolve a technical
    question or a design problem.”
    - WikipediA
    Spike
    (software development)

    View Slide

  56. 5 Define scope and time-box
    ) Write quick & dirty code in a Pull Request
    * Review the solution
    + Close Pull Request without merging
    # If solution is 2 ➡ Discuss new solution
    ➡ If solution is ✅ ➡ Open new Pull Request
    % Spike

    View Slide

  57. View Slide

  58. “The goal of a "spike" is to help you draw a map of
    how to implement a solution with confidence, not
    to implement a solution.”
    - Rado

    View Slide

  59. “The best feature of a "spike" is that it is a safe way
    to say this approach doesn't work.”
    - Rado

    View Slide

  60. View Slide

  61. 6 ...but
    “We can't do a "spike" for every feature. It will
    waste too much time.”
    “You don't need a "spike" to show that your
    solution isn't good.”
    “Why do you need to throw away the code?”
    “Isn't this a Prototype, MVP, PoC?”

    View Slide

  62. 6 ...but
    “We can't do a "spike" for every feature. It will
    waste too much time.”
    “You don't need a "spike" to show that your
    solution isn't good.”
    “Why do you need to throw away the code?”
    “Isn't this a Prototype, MVP, PoC?”
    Don't do it for every feature. Do it when you are not
    confident how to solve a problem. 7

    View Slide

  63. 6 ...but
    “We can't do a "spike" for every feature. It will
    waste too much time.”
    “You don't need a "spike" to show that your
    solution isn't good.”
    “Why do you need to throw away the code?”
    “Isn't this a Prototype, MVP, PoC?”
    Because of "Tunnel vision" and "sunk cost fallacy" 7

    View Slide

  64. 6 ...but
    “We can't do a "spike" for every feature. It will
    waste too much time.”
    “You don't need a "spike" to show that your
    solution isn't good.”
    “Why do you need to throw away the code?”
    “Isn't this a Prototype, MVP, PoC?”
    Because it is usually a mess. I don't delete it, I just
    copy parts I need into a clean new PR 7

    View Slide

  65. 6 ...but
    “We can't do a "spike" for every feature. It will
    waste too much time.”
    “You don't need a "spike" to show that your
    solution isn't good.”
    “Why do you need to throw away the code?”
    “Isn't this a Prototype, MVP, PoC?”
    Kinda - yes. The difference is in how big it is, who is
    meant for team or external, and do we ship it in
    production. .

    View Slide

  66. 6 ...but
    “We can't do a "spike" for every feature. It will
    waste too much time.”
    “You don't need a "spike" to show that your
    solution isn't good.”
    “Why do you need to throw away the code?”
    “Isn't this a Prototype, MVP, PoC?”

    View Slide

  67. & Focused Task

    View Slide

  68. View Slide

  69. What's next 8

    View Slide

  70. Focused Task

    View Slide

  71. Focused Task
    https://github.com/RStankov/FocusedTask

    View Slide

  72. Focused Task is just sketchpad for my current task.
    For everything else I use "Todoist"

    View Slide

  73. ' Feature switches

    View Slide

  74. View Slide

  75. View Slide

  76. View Slide

  77. OFF
    ON
    User
    ' Feature switches
    Check

    View Slide

  78. View Slide

  79. 1 week 2 week 3 week ...

    View Slide

  80. 1 week 2 week 3 week ...
    developer

    View Slide

  81. 1 week 2 week 3 week ...
    developer beta

    View Slide

  82. 1 week 2 week 3 week ...
    developer beta admin

    View Slide

  83. 1 week 2 week 3 week ...
    developer beta admin everybody

    View Slide

  84. Project Iteration Delivery Retro

    View Slide

  85. unless Feature.enabled?(:funds)
    redirect_to feature_unavailable_path

    end
    9 Ruby on Rails

    View Slide


  86. Your funds


    ⚛ React

    View Slide

  87. const fundsEnabled = useFeature("funds")
    ⚛ React

    View Slide

  88. View Slide

  89. View Slide

  90. Recap

    View Slide

  91. View Slide

  92. ... of course all depends on
    specific feature .

    View Slide

  93. View Slide

  94. Thanks ;

    View Slide

  95. https://speakerdeck.com/rstankov

    View Slide