A place to cache linked articles (think custom and personal wayback machine)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.md 48KB

5 vuotta sitten
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816
  1. title: The Webflow Tech Lead Guide
  2. url: https://github.com/webflow/leadership/blob/master/tech_lead.md
  3. hash_url: 94698ca94c727a3688d38b8d3652eb90
  4. ## Welcome
  5. Hello! :wave: Welcome to this document. Happy to have you.
  6. If you've accepted a Tech Lead role, congratulations, you've demonstrated
  7. exceptional technical skills and a knack for leadership — rare qualities,
  8. indeed! Or, if you're curious about what the Tech Lead role offers and want to
  9. decide if it's right for you, you've come to the right place.
  10. Assuming the responsibilities of a Tech Lead is a staggering leap from the
  11. average engineer's daily routine. This guide is here to quickly help you
  12. understand the
  13. 1. Definition of a successful Tech Lead
  14. 2. Expectations when moving from a purely technical role to one that is a blend
  15. of management and technical expertise, and how to manage those expectations
  16. 3. Strategies to mitigate common challenges
  17. 4. Stance Webflow takes on "management" _(hint: it's about service, not
  18. dictatorship)_
  19. ## What's a Tech Lead, anyway?
  20. By its most basic definition, a Tech Lead is "solely accountable for a project's
  21. success, spending 30% of their time writing code, and the other 70% managing a
  22. project". The _Lead_ is no misnomer — your purpose is to navigate a team of
  23. talented engineers through choppy waters, direct them, steer them away from
  24. hazards, clear obstacles, and to keep them well fed with meaningful work.
  25. This is easier said than done.
  26. There are myriad skills a Tech Lead must possess and cultivate, but the most
  27. important are _sincere empathy_, _crystal clear communication_, and _technical
  28. excellence_. These skills are equally weighted. The Tech Lead is a "hybrid" role
  29. with one foot in management and the other in engineering, and acts as a liaison
  30. between project expectations and development tasks. A project's success is on
  31. the Tech Lead's shoulders, and it is on Webflow's shoulders to ensure they are
  32. excessively supplied with the support required to succeed.
  33. #### Why management is different at Webflow.
  34. Management has gotten a bad rap at most companies. It is often associated with
  35. treating employees as "cogs" and it conjures images of dictators with
  36. sun-eclipsing egos. This is not how Webflow operates. We view each team member
  37. as a _human being_ first, and a talented contributor second. Humans need
  38. relationships built on compassion and cooperation. It is the Tech Lead's job to
  39. foster such an environment, and such environments are engendered through an
  40. attitude of _service_.
  41. The Tech Lead's job is _not_ to micromanage, but to be a service leader, which
  42. is to say they are there to _support_ their team, to _serve_ them as though they
  43. worked _for_ them (not the other way around). They might be accountable for a
  44. project's success, but it is the collaborative effort _with_ their team that
  45. brings a project to fruition.
  46. Here are some hints to help approaching how best to serve a team:
  47. 1. Be direct with project needs. Do not fear to challenge your team as long as
  48. you care deeply about their welfare.
  49. 2. When successes occur, lavish your team with praise and give them credit for
  50. everything — without them success is impossible.
  51. ## Why might I want to be a Tech Lead?
  52. You may _not_ want to be a Tech Lead, and that's just fine. Webflow seeks to
  53. provide many different opportunities for engineers to advance their career,
  54. including Individual Contributor tracks that offer similar significance to
  55. advanced management roles. The Tech Lead is under more pressure than the average
  56. engineer, and it is challenging to balance the demands of managing a team and
  57. contributing code, especially when first entering the Lead role (this is
  58. completely normal, by the way).
  59. That said, management life can be extraordinarily rewarding. You will have input
  60. into decisions much higher up on the food chain. Your impact on Webflow's
  61. user base multiplies. You will develop clout that will reflect in your
  62. performance reviews, and subsequently, provide more opportunities for career
  63. growth. The role is often seen as a stepping stone to the title of "Senior" Engineer, as well as a prerequisite for an Engineering Manager position. You will
  64. mentor and help other engineers grow. Some find these added challenges exciting
  65. and help push _them_ to new limits.
  66. ## How can I become a tech lead?
  67. Just ask! Yes, it's that easy. In your one-on-ones, express to your manager that
  68. you are interested in becoming a Tech Lead. It's your manager's duty to design a
  69. path to new roles, and, depending on your current experience, might include
  70. assigning you as a Tech Lead on your next project — and if not, then to provide
  71. you opportunities to develop the skills needed to become a Tech Lead.
  72. ## What's expected of me when managing a team?
  73. The Tech Lead's job consists of these responsibilities (in no particular order):
  74. 1. To work closely with a Product Manager to set reasonable expectations around
  75. deadlines, and to be _clear_ when projects are going _off-track_ (See: [Help! We are behind schedule!](#help-we-are-behind-schedule))
  76. 2. To break up projects into digestible tasks, to tie those tasks to iterative
  77. deliverables, and to keep track of those deliverables
  78. 3. To provide ample uninterrupted work time for their team so they may
  79. frequently enter the flow state, and to act as their team's guardian against
  80. any potential blockers and distractions
  81. 4. To ensure your team is sufficiently supplied with work at all times so that
  82. no one "spins their wheels"
  83. 5. To perform diligent code reviews, first-pass QA, and to contribute code where possible
  84. 6. To be _available_ to team members as they execute their tasks. (Windows of
  85. blocked time for heads down work is expected, but windows of team
  86. availability are expected, too)
  87. 7. To occasionally work with other departments
  88. #### Working with Other Departments
  89. Product Management aligns user expectations with product features. Marketing
  90. makes those features known to the world. Support ensures Webflow makes good on those promised features. Each is critical to Webflow's continued success and growth. Engineering is at the crux of these departments and the Tech Lead acts as the liaison between them.
  91. The Tech Lead is responsible for communicating their project's status to other departments in two forms:
  92. 1. A weekly status meeting with their team in which a dedicated Product Manager or Support Liaison* may also participate. (See: [Meetings](#meetings)) This meeting is mandatory regardless of Product Manager or Support Liaison participation.
  93. 2. A weekly "All Hands" report for the entire company to see. (See: [How do I provide status reports to All Hands and Lattice?](#how-do-i-provide-status-reports-to-all-hands-and-lattice))
  94. Some projects might not warrant a Product Manager or Support Liaison, and in these cases, the Tech Lead will express their team's status and needs to their Engineering Manager. On occasion, Marketing may also ask the Tech Lead when they should begin campaigning for a feature.
  95. _* The Stabilization Team (See: [What are the different types of teams a Tech Lead can manage?](#what-are-the-different-types-of-teams-a-tech-lead-can-manage)) will work closely with a Support Liaison to focus on fixing bugs with the greatest user impact._
  96. #### Tracking Tasks
  97. A great Tech Lead knows how to break a project into meaningful and easily
  98. digestible tasks (digestible means about three days scope). This gives their team members a holistic view of a project as
  99. well as a finish line, and allows the Tech Lead to assign tasks to team members
  100. each week. Breaking a project down into small tasks is a time-consuming process,
  101. and is often an ongoing effort, but is critical in providing team
  102. members with a sense of progress. It also allows the Tech Lead to create
  103. waypoints toward unknowns, and to keep those unknowns contained to small time
  104. windows (See: [Task toward unknowns](#task-toward-unknowns))
  105. ##### Master Tracking Issue (MTI)
  106. At the onset of a project, or at the onset of a project's continuing milestones,
  107. the Tech Lead must take time to thoroughly review the project's specifications
  108. and do their best to break down the specification into trackable tasks with a scope of **1-5 days** of work (outside Code Review / QA), and an optimal timeline of **3 days**. These tasks should then be grouped into Milestones. Each Milestone is a _deliverable_ with a deadline date. (See: [Milestones](#milestones-aka-deliverables))
  109. > **Pro Tip**: Consider enlisting your team to help you break down Milestones into tasks. This is sometimes the _only_ option if you've got a team member with domain knowledge you don't possess. Delegate where it makes sense, but be sure to _review_ all tasks and to _validate_ their scope and/or assumptions.
  110. Webflow's current practice is to create GitHub issues for every task that are then tracked in a "Master Tracking Issue". The MTI should receive a `[Master Tracking Issue]` label in the issue's title as well as in GitHub's label section.
  111. The MTI is a centralized and clearly outlined view of GitHub issues that lists Milestones, their projected delivery date (See: [Milestones](#milestones-aka-deliverables)), and their related tasks in a list that
  112. 1. Can be easily assigned to your team members who will then be responsible for opening a PR to close the issue
  113. 2. Displays the task's GitHub issue number _and_ the PR that will close the
  114. issue, as well as a title for the issue. This is usually best accomplished in a tabular format.
  115. 3. Provides the estimated finish date for each milestone, and the status of each
  116. issue toward those milestones (See: [Displaying Progress in the MTI](#displaying-progress-in-the-mti))
  117. ###### Tasks
  118. Each issue (or **1-5 day** task) must clearly point to the portion of the specification the
  119. issue addresses _and_ to the concerned areas of Webflow's codebase (if they
  120. exist). We've found it is best for each task to
  121. 1. Clearly point to the original specification the issue addresses, with any
  122. _visual_ content that will help an engineer complete the task, including
  123. screenshots/screencasts from the specification or from Webflow itself
  124. 2. List a best guess of TODOs to help the engineer build a mental model around
  125. the problems they must solve
  126. Below is a task template. This should be located in a GitHub issue and should receive the same title that is tracked in the MTI.
  127. > Master Tracking Issue: #00000 (Place the Github link here)
  128. >
  129. > ### Objective
  130. >
  131. > List the goal of the tasks here. It does not need to be long, and can take the form of a user story, e.g. "As a user, I would like to X, so that I can X", or "As a user, I would like to be able to right-click and delete an item, so that I don't have to move my mouse all the way up to the top of the screen."
  132. >
  133. > ### Tech Spec
  134. >
  135. > <Insert screenshots/wireframe/visual content of finished feature>
  136. >
  137. > _Clearly_ outline the expectations for the tasks here. Place them in the form of TODOs. For example:
  138. >
  139. > - [ ] Include a "Delete" option in the right-click menu for item
  140. > - [ ] Wire the "Delete" option to the DELETE_TEM system event
  141. > - [ ] Write unit test for delete operation
  142. > - [ ] User may _not_ delete item if multiple items are selected
  143. >
  144. > Also add condition material, if needed:
  145. >
  146. > - [ ] When the user is logged into a free account, disallow deletion
  147. >
  148. > ### Design Artifacts
  149. >
  150. > Provide a list of design artifacts on which the above tech spec is based. This could be an external link to an artifact the Design or UX team provided. Include authors names so that the task owner can reach out.
  151. >
  152. > ### Notes
  153. >
  154. > Any clarifying content unrelated to the above items (Or, just a word of encouragement, like "You're doing great!")
  155. ###### This is tough
  156. Creating the Master Tracking Issue will feel like it's taking too much time and
  157. will make you question whether or not you are performing the most effective
  158. work. Trust us: it _is_ critical, and the clearer the MTI, the higher likelihood
  159. of a project's success. Depending on the size of the project, it could take
  160. upwards of a week or more :scream:. It's fine. Plan for it. Make it happen. Your
  161. team will thank you. It is crucial to helping your team feel a sense of
  162. meaningful progress (See: [How do I keep my team motivated?](#how-do-i-keep-my-team-motivated)).
  163. > **Pro Tip:** It can be helpful to keep a document open beside the spec and to
  164. > write down a list of tasks before beginning the MTI. When you've got a solid
  165. > brain dump of tasks, open an issue, write a basic description and highlight
  166. > the specification area, and _then_ go into the codebase to find where to point
  167. > the issue to.
  168. ##### Displaying Progress in the MTI
  169. You can think of the MTI as a dashboard that displays the progress of every issue associated with a milestone. This, in turn, shows the status of _entire_ milestones, and subsequently, the _entire_ deliverable. For instance, here's an example of how an MTI might progress:
  170. > ### Legend
  171. >
  172. > ⬜️ - Hasn't started<br/>
  173. > 📝 - In Progress<br/>
  174. > 🔄 - Code Review / QA<br/>
  175. > 🚫 - Blocked<br/>
  176. > ✅ - Complete (merged into `dev`)<br/>
  177. >
  178. > ### Milestones
  179. >
  180. > 🏁 - BETA :: September 15, 2017<br/>
  181. > 🚀 - LAUNCH :: November 1, 2017<br/>
  182. >
  183. > | Milestone | Issue | PR | Description | Progress |
  184. > | :-------: | :----: | :----: | :--------------------------------------- | :------: |
  185. > | 🏁 | #12650 | #12666 | Empty Interactions Panel UI Refactor | ✅ |
  186. > | 🏁 | #12675 | #12685 | AnimationList Component | 🔄 |
  187. > | 🏁 | #12655 | #12746 | Convert ActionListConfig to InteractionStep | 📝 |
  188. > | 🚀 | #12653 | #12784 | Create InteractionConfiguration Component | 🚫 |
  189. > | 🚀 | #12686 | ??? | Create all Timed InteractionConfiguration items: Mouse Tap, Mouse Hover, Scroll Into View, Page Load, Page Scrolled | ⬜️ |
  190. The above gives a PM (or, anyone concerned) a quick way to gauge the progress of a project. For instance, one can see the BETA milestone is about 75% complete, and since tasks are broken into roughly **1-5 day** increments, it is easy to tell if a milestone is going `off-track` (See: [Help! We are behind schedule!](#help-we-are-behind-schedule)).
  191. It is up to the Tech Lead to maintain the status of the above MTI, though they may wish to delegate updating the status of each line item to the team member responsible for completing that issue. The important elements to display for each task are
  192. - Its Milestone and date
  193. - Its Issue
  194. - Its Pull Request
  195. - A short description
  196. - Its Progress
  197. 1. Hasn't Started
  198. 2. In Progress
  199. 3. Code Review
  200. 4. Blocked
  201. 5. Complete (merged in `dev`)
  202. > **Pro Tip:** If a single MTI grows too long and too unwieldy, it's fine to split them into separate MTIs.
  203. ##### Milestones (a.k.a. Deliverables)
  204. The Tech Lead must keep their Product Manager (or Engineering Manager if no Product Manager is assigned) updated on how well they are tracking against Milestones, as well as provide weekly All Hands updates (See: [How do I provide status reports to All Hands and Lattice?](#how-do-i-provide-status-reports-to-all-hands-and-lattice)). These Milestones and their respective tasks are determined by the Tech Lead and confirmed by a Product Manager, Engineering Manager, or otherwise.
  205. A "Milestone" is
  206. * A _major_ deliverable, usually with a six-week timeline (See: [How long should projects take?](#how-long-should-projects-take))
  207. * Responsible for driving a series of tasks/issues, and is complete when _all_ tasks/issues have been pushed to production
  208. * Named according to the type of deliverable, e.g. Phase, Launch, Version (See: [Types of Milestones](#types-of-milestones))
  209. * Assigned a deadline date
  210. The planning structure for a large project should only ever consist of two levels: Milestone -> Tasks. The Milestones themselves will be under the purview of a Feature, such as Rich Content Editor or Interactions 2.0, which may take months (or years) to complete. Milestones are "chunks" of continuously delivered work, and are usually accomplished sequentially. It is rare to have a team work on Milestones in parallel unless they are highly interrelated, though some overlap is expected when moving from one Milestone to another.
  211. > **Pro Tip:** Be incredibly wary of scope increases. Scope creep is real.
  212. > _Always_ use a Milestone's date as the affected factor when scope changes, and
  213. > clearly communicate the new scope's impact.
  214. For more info on Milestone timing, See: [How long should projects take?](#how-long-should-projects-take)
  215. ##### Types of Milestones
  216. Milestones are _major_ deliverables and are _functionally_ the same to each other, though they can be _semantically_ separated into Phases, Launches, and Versions. It's important not to dwell too much on these differences, but it can be helpful to name them accordingly for Product Managers and Marketing.
  217. | Term | Definition |
  218. | ------- | ---------------------------------------- |
  219. | Phase | Anything Marketing doesn't need to let users know about. These are nuts and bolts type milestones that don't introduce any major experiential changes to users. Phases take on the name of their goal, e.g. "IX2 Flux Integration", or "Storybook Components for Interactions 2.0". |
  220. | Launch | Anything Marketing *needs* to know about so they can drum up the eyeballs. This includes alphas, betas, and official launches, and will require many weeks of lead time to prep marketing materials. |
  221. | Version | This is another version of a launch for a feature *that has already launched*. So, for IX2, after the initial launch, we labeled the subsequent launches IX2.0.1, and so on. |
  222. ##### Task toward unknowns
  223. Milestones deadlines are hard to estimate, but Webflow asks that the Tech
  224. Lead do their best to place a _realistic_ date on them. This constraint might
  225. seem limiting at first, but we treat deadlines more as focal points (with
  226. mitigation strategies) than immovable _dead_-lines (See: [Help! We are behind schedule!](#help-we-are-behind-schedule)).
  227. Rather than rely on a Milestone's hazy, fog-covered finish line, it's much better to "task toward unknowns". Our features tend to forge new industry
  228. territory, the likes of which the JavaScript world has never seen, so it's often
  229. impossible to have a crystal ball view of upcoming work. Some of it will be
  230. clear, sure, but there will invariably be a portion of a specification that
  231. causes the best Tech Lead to scratch her head and say "Um, I have no idea how
  232. long this will take." Clear the haze. Shorten the forecast by breaking down the unknown into small tasks designed to uncover the unknown as soon as possible.
  233. Be adamant when prioritizing your tasks. Pivot when more information arises. Let your PM know on which of these tasks your team is currently working. Stacking these unknowns is how _actual_ Milestone deadlines are discovered.
  234. > **Pro Tip:** Sometimes new tasks arise from uncovering unknowns that weren't outlined in the original MTI. It's fine to include new tasks if they are absolutely necessary to complete the Milestone. Be sure to inform your Manager if they alter the Milestone's deadline.
  235. #### Meetings
  236. The Tech Lead should organize one ~30-minute project meeting per week,
  237. preferably at the week's start and early in the day, whose agenda looks like the
  238. following:
  239. 1. Perform a Mini-retrospective that asks:
  240. 1. What went well last week?
  241. 2. What didn't go so well last week?
  242. 3. How can we improve what didn't go well?
  243. 2. Ask each team member:
  244. 1. What's the current status of your task?
  245. 2. Are you blocked?
  246. 3. How can I help unblock you? [**Tech Lead**]
  247. 3. Assign new tasks to each team member
  248. 4. Communicate the project's status to the Product Manager
  249. 5. Answer any questions and engage in light and witty banter
  250. Limit team-wide meetings to this one weekly event. Hopping on a Slack call or a
  251. code pairing session should not be considered a "meeting" and should be employed
  252. liberally where needed.
  253. #### Weekly Status
  254. Every engineer is asked to report their `on-track` / `off-track` status each day
  255. to #status-frontend or #status-backend accordingly, and it is on the Tech Lead to confirm those daily (a Slack "reaction" :thumbsup: is always nice). This holds each engineer accountable to their weekly tasks and it allows the Tech Lead to step in if a task goes wildly `off-track` or beyond 5 days.
  256. > **Pro Tip:** Help your team members to focus on _one to three_ concurrent tasks at a time. Any more than that is difficult to track, so offer to help reduce or combine their tasks and figure out what's causing the fragmentation.
  257. #### Agile? Project Managers?
  258. You may be wondering, "Where's the methodology behind this way of managing
  259. projects?". It might resemble Agile, with its two-week forecasts and weekly
  260. "Scrum"-like meetings, but it lacks burn-down charts and Scrum Masters. While we
  261. love the agile philosophy, aim to move quickly, and pivot where possible,
  262. Webflow does not subscribe to a specific methodology. This is what works for us
  263. right now, and we are always open to reevaluating it as we go. :thumbsup:
  264. ## What are the different types of teams a Tech Lead can manage?
  265. Webflow arranges its talented engineers into _Action_ and _Permanent_ teams for
  266. which a single Tech Lead will be responsible.
  267. | Team | Description |
  268. | :-------- | ---------------------------------------- |
  269. | Action | Assemble around a feature (or prototype) and disband on its completion. |
  270. | Permanent | Assemble around a domain problem and continually work on it without ever disbanding, e.g. the Performance and Stabilization teams. Tech Leads and Team Members can rotate through these teams. |
  271. #### What size team should I expect?
  272. Team sizes vary (they can even be a league of one), but the general rule is a
  273. team will include _three_ members, including the Tech Lead. It is relatively
  274. easy to manage relationships with two individuals engaged in solving the same
  275. problems, but once someone is asked to manage a third, or fourth, or fifth
  276. relationship, the permutations of communication potentials grow drastically.
  277. This isn't isolated to the Tech Lead's relationship, but also to how the members
  278. of the team communicate with each other. Larger teams _can_ work, but the rule
  279. of three seems to be a good starting point.
  280. This isn't to say a _team_ must have only _three_ members. An Action Team might
  281. contain seven members, including a Tech Lead who can divide the team into two
  282. groups (of three) and focus each group on parallel tasks _within_ the feature's
  283. overall scope. It is then up to the Tech Lead to create a single Team Lead for
  284. each group and hold them accountable for their group's work. Bear in mind that
  285. each group should be focused on _feature_ efficiency and collaborate on solving
  286. problems _with_ each other so as to reduce the blocking latency commonly
  287. encountered when parallelizing individual resources.
  288. The aforementioned team structures can be comprised of Back-End _and_ Front-End
  289. engineers. Webflow wants to blur the lines between these engineering
  290. disciplines, as well as non-engineering disciplines, e.g. designers. Forming
  291. cross-discipline teams is the end-game for feature efficiency; whether or not
  292. you pursue it is up to you and the demands of your project.
  293. #### Team Efficiency and Organization
  294. There are two ways of designing a team. One of "Feature" efficiency, which
  295. favors groups that collaborate on solving closely related problems _together_,
  296. and another of "Resource" efficiency, which favors individuals working on wholly
  297. unrelated tasks that run in parallel. Both have their strengths, but we ask that
  298. the Tech Lead optimize for _feature_ efficiency where possible. See
  299. [Flow vs. Resource Efficiency](https://www.jrothman.com/mpd/agile/2015/09/resource-efficiency-vs-flow-efficiency-part-1-seeing-your-system/)
  300. for more information. [We've replaced "Flow" with "Feature" in this article as
  301. it's easy to conflate Flow with the "Flow State"]
  302. > **Pro Tip:** Parallelization requires well-defined scope. If you are leading a
  303. > project that is iterating on design specs _while_ iterative development
  304. > occurs, it is best to only optimize for _feature_ efficiency.
  305. ## Help! We are behind schedule!
  306. It's cool. Really. Go grab some coffee, or get some sun, and return to your desk
  307. when your inner self reflects the same glossy sheen as a calm pond (See: [How can I stay "centered"?](#how-can-i-stay-centered)).
  308. Pretty much every project encounters some unknown that threatens its delivery
  309. date. Instead of desperately trying to avoid this, try to _expect_ this. You
  310. need to build it into your estimates (See: [How can I make better estimates?](#how-can-i-make-better-estimates)).
  311. Recognize this as absolutely normal, and take comfort in the solidarity that all
  312. Tech Leads experience it. This is what separates the _good_ from the _great_.
  313. We equate missing deadlines with heart wrenching guilt. This is a morale
  314. killer. Morale is your team's most precious resource. Instead, it's best to
  315. think of "delays" as "deferred progress", and to pitch it as such. Webflow
  316. understands Software Development is tough, so we've got some tricks up our
  317. sleeves to help you frame missing a deadline as _progress_.
  318. #### A Word on Project Management
  319. Before we dive into our _Rework / Defer / Abandon_ deadline model, there are two
  320. key project management concepts that will help you understand _why_ we follow
  321. it.
  322. First, it is important to emphasize the need to _tie deliverables to fixed
  323. dates_. Progress is hard to measure without a visible target. We must measure
  324. progress toward something, even if that something is just a guess. Progress is
  325. the lifeblood of motivation.
  326. Second, there are four levers you can pull to help get a project back
  327. `on-track`. They are as follows
  328. | Lever | Description |
  329. | --------- | ---------------------------------------- |
  330. | Time | When the deliverable is launched |
  331. | Quality | The craftsmanship put into the deliverable |
  332. | Resources | The number of participants contributing to the deliverable |
  333. | Scope | The breadth of what the deliverable is and does |
  334. These four levers can change as a project evolves. They are the tools
  335. effective Project Managers reason with. That said, Webflow produces the highest
  336. possible quality product and will not sacrifice Quality for Time, Resources, or
  337. Scope, so we only have those three levers available to us, which we will
  338. expand on in the next section.
  339. > **Pro Tip:** The Tech Lead role is often an engineer's first foray into trying
  340. > to meet the bottom-line needs of a business. Their decisions must be framed in
  341. > the question: "How does this keep the company healthy?" If you've little or no
  342. > business acumen, have a look at
  343. > [Josh Kaufman's The Personal MBA](https://www.amazon.com/Personal-MBA-Master-Art-Business/dp/1591845572/ref=sr_1_1?s=books&ie=UTF8&qid=1513878441&sr=1-1&keywords=The+Personal+MBA).
  344. > It's a fantastic crash-course in modern business practices and will help you
  345. > make better decisions when considering Webflow's needs and the needs of your
  346. > team.
  347. #### Rework / Defer / Abandon (Mitigation Strategies for Deferred Progress)
  348. You have three options when confronted with a threatened deadline that should be
  349. discussed with your Product Manager. Here they are in sorted by order of
  350. consideration:
  351. * **Rework** the deliverable
  352. * **Defer** the deadline
  353. * **Abandon** the project
  354. ##### Rework
  355. Rework consists of asking two questions:
  356. 1. Can we add resources to the project to meet the deadline?
  357. 2. Can we change the scope of the deliverable to meet the deadline?
  358. Questioning your resources and scope should be the first tool when evaluating
  359. how to mitigate a missed deadline. Ask first if more resources can help the
  360. situation, though this is usually **_not the case_** unless the project was
  361. initially understaffed to begin with. Adding late-stage resources can
  362. [even push the deadline out farther](https://en.wikipedia.org/wiki/The_Mythical_Man-Month)!
  363. So, your next tool is to reduce scope.
  364. > **Pro Tip:** Reducing scope is often the #1 choice when trying to hit a deadline
  365. > while still providing business value. The likelihood a project requires more
  366. > resources to hit a deadline is probably in the 10% range. Reduce scope 90% of
  367. > the time.
  368. Reducing scope is usually feasible. As passionate software developers, we tend
  369. to bite off more than we can chew. This is your opportunity to use a fork and
  370. knife to slice up the deliverable into bite-sized pieces with more realistic
  371. expectations, and for you to communicate those expectations to other key
  372. stakeholders.
  373. ##### Defer
  374. If scope cannot be reduced, and adding resources isn't an option, the next
  375. _best_ option is to _push the deadline out_. Yes, you heard it right. It's to
  376. _move_ the deadline. "What's the point in deadlines, then, if they can just be
  377. moved all willy-nilly?" Well, we do our best to avoid moving deadlines, but
  378. sometimes it happens, and that's totally okay. Too much is at stake when we
  379. attempt to hit an unrealistic deadline, and among them are team burnout, poor
  380. product quality, reduced morale, and more.
  381. The important idea here is _not to lose sight of a delivery date_. That's all
  382. that matters. Projects will fall into limbo when a missed deadline stays (ahem)
  383. dead and the project careens toward the unknown. This is _worse_ than moving
  384. the deadline, so move it!
  385. ##### Abandon
  386. The final and rarest option is to abandon the project altogether.
  387. Consider this if you (or another stakeholder) discover the deliverable will
  388. negatively impact the company. Scrap it! Focus on _efficient_ work, not
  389. _productive_ work.
  390. ##### _An optional fourth strategy:_ Watch it closely
  391. There is a fourth option, too, when the threat of a missed deadline is no more
  392. than a subtle twang in your gut, and that is to **_watch it closely_**. Pay
  393. special attention when your intuition whispers something's off. It's important
  394. to get ahead of the problem, and this should be the moment where you
  395. preemptively strike. Make your manager aware of it.
  396. > **Pro Tip:** The key to making your and everyone else's life easier is to
  397. > master the art of _managing expectations_. It is wise to under-promise and
  398. > over-deliver as long as you remain candid and honest. Always state what is
  399. > true. Announce worries about missing deadlines or losing a key resource.
  400. > Announce wins about finishing work earlier than expected. Be as truthful as
  401. > you are skeptical about unknowns.
  402. ## How can I make better estimates?
  403. At the time of this writing, no person has discovered a magic eight-ball
  404. estimation method for predicting software development timelines. Some might try
  405. to sell you snake-oil and tell you otherwise, and some might say it's downright
  406. impossible. It's best to accept that software estimation is rarely accurate and
  407. work from there. This is at the core of the Agile Philosophy: iterate and
  408. discover, then deliver and improve. It's an art of discovery, not an art of
  409. delivery. Webflow follows an iterative process (See: [What's expected of me when managing a team?](#whats-expected-of-me-when-managing-a-team)) as outlined in other sections, so estimation is important, but
  410. not as important as uncovering unknowns. That said, here are some tactics to
  411. help estimate tasks:
  412. #### Pad estimates for the unexpected
  413. Development rarely unfolds as planned. Instead of _precise_ estimates, give your
  414. best guesstimate for a given task and multiply it times **_four_**, _especially_
  415. if that task involves uncovering an unknown. That might sound crazy — and
  416. sometimes it is; experience helps Tech Leads refine that equation — but it's a
  417. good starting point that leaves room for dastardly unknowns.
  418. #### Add up tasks toward unknowns
  419. Once you've created your Master Tracking Issue (See: [What's expected of me when managing a team?](#whats-expected-of-me-when-managing-a-team)), you can get a sense of how long the project might take. Be
  420. sure to identify which tasks are associated with _discovery_ (finding unknowns),
  421. and which have more concrete definitions. Once you've completed all the
  422. discovery tasks, you will have a _much_ better sense of the deadline's
  423. accuracy.
  424. #### The 80/20 Rule
  425. It is easy to overlook time-consuming nuances that slow the final 20% of a
  426. project. When you view your project holistically, break it up using the 80/20
  427. rule, and consider that the final 20% of a project might account for _another_
  428. 80% of the overall timeline. There are a number of reasons for this, but the
  429. final 20% is often filled with polishing the deliverable, and complex features
  430. require polish for _every_ feature and edge case, which compounds near the
  431. project's end.
  432. What does this mean for you? Just treat the 80% point in your project as the
  433. halfway marker. That will align expectations against the added effort nuance
  434. prescribes.
  435. #### Never forget QA
  436. When you estimate deadlines, set a date for _code completion_ so that QA can
  437. have time to discover any bugs or UX issues. Your estimates must consider this
  438. extra phase, and to consider QA's current workload.
  439. #### Cooldown: Bug fixes after delivery
  440. On delivery, plan to leave some time to fix any immediate bugs before starting new milestones. The amount of time can vary based on the deliverable's complexity, and a week is usually a good window. This is an opportunity to give your team some downtime before leaping into the next set of tasks, and it gives you a chance to tighten up the next milestone's MTI.
  441. ## How long should projects take?
  442. While the scope of a feature might require months and months of work, its
  443. versioned _milestones_ should aim for six-week timelines, including QA, so each
  444. milestone is _code complete_ around four weeks. This allows Marketing to
  445. evaluate a _proven_ set of features and put them in their pocket, so to speak,
  446. and queue them for announcement based on market trends. Breaking a large feature
  447. into six-week timelines can appear challenging at first, but we ask this for a
  448. few important reasons:
  449. 1. It is much easier to reason about smaller scope and timelines
  450. 2. It allows projects to pivot if its business value somehow proves meager
  451. 3. It allows groups of three to move faster
  452. A six-month project's _major_ Milestones may then look like this:
  453. 1. Alpha Launch (6 weeks)
  454. 2. Beta Launch (6 weeks)
  455. 3. Feature Launch v1.0 (6 weeks)
  456. 4. Feature Launch v1.0.1 (6 weeks) :checkered_flag:
  457. ## Should I branch off of feature branches or not?
  458. Not.*
  459. Do not branch off of `feature-branches`. Tech Leads should aim to have their team commit their `feature-branches` directly to `dev` rather than to another `feature-branch` that is kept up-to-date with `dev`. Long-lived `feature-branches` often introduce code dependencies and other programming
  460. patterns that require cherry-picking and other _hard-to-keep-in-sync-with-other-branches_ issues. Instead, the Tech Lead should place their project behind a *Feature Flag* and continually merge it with `dev`.
  461. To summarize, Webflow has two _main_ branches:
  462. 1. `dev`
  463. 2. `master`
  464. And a `feature-branch`
  465. 1. May branch from: `dev`
  466. 2. Must merge back into: `dev`
  467. ##### Feature flags
  468. We encourage all of our engineers to push code every day (if possible), and to
  469. prevent a new feature from stepping on the toes of our users, we suggest Tech
  470. Leads place those new features behind a "Feature Flag" that can be toggled with
  471. the
  472. ShortcutHelper.
  473. > *Okay, there _might_ be a case for a long-lived branch to which other branches commit. And by "might", we mean maybe 1% of the time where we must refactor a critical, widely-used portion of our infrastructure. So, basically never. :smile: Should the need for such a branch arise, please inform the _entire_ team, your product manager, and your engineering manager of your intent. You may be surprised about how the work could be organized into smaller, continually merged branches.
  474. ## How can I stay "centered"?
  475. Staying "centered" means you take care of yourself first and foremost and find a
  476. "happy" place from which to approach solving problems. Life is about performing
  477. as much meaningful work as it is about performing meaningful _human activities_.
  478. This means you will need to take a break from your daily tasks and engage in
  479. activities that keep you fresh and focused. Does reading a book help you? Does
  480. binge-watching some Netflix? Does exercise? Fresh air? Find a routine that keeps
  481. you on point in work _and_ in life, and don't be afraid to express those needs
  482. to your manager, and never fear to make time for them, even if it feels like it's
  483. cutting into your productivity.
  484. If you aren't centered, your team won't be centered. Lead by example.
  485. ## How do I stay organized?
  486. New Tech Leads feel overwhelmed, and if they don't, then they probably aren't
  487. performing some part of their job. :sweat_smile: (Okay, fine, some of us may be
  488. able to take the role in stride, but it's uncomfortable for most). The key
  489. to mitigating the dreaded stress of _too much_, is to learn the art of time
  490. management. This can take shape in many ways, and it boils down to your own
  491. preferences. If you've never picked up a book on time management, we recommend
  492. starting with
  493. [David Allen's Getting Things Done](ttps://www.amazon.com/Getting-Things-Done-Stress-Free-Productivity/dp/0143126563/ref=sr_1_1?s=books&ie=UTF8&qid=1513878379&sr=1-1&keywords=Getting+Things+Done).
  494. It's a great first step to learning how to transfer the cacophony of noise in
  495. your head elsewhere. If his method doesn't work for you, seek to find another
  496. and share it when you do.
  497. ## How much should I expect to code?
  498. This depends on the project, but a good estimate is that you will code 30% of
  499. the time (if not fewer), _review_ code 30% of the time (if not more), and serve
  500. your team with your remaining time.
  501. #### Code Reviews
  502. Since you are ultimately responsible for the quality of the deliverable, you
  503. will want to review and sign off on every PR. This can be incredibly time
  504. consuming on larger teams, so it's good to encourage your team to review _each
  505. other's_ code. That said, expect to perform _a lot_ of code reviews, and look at
  506. them as an opportunity to mentor junior team members, and with senior team
  507. members, to keep you on top of your skills.
  508. ## How do I provide status reports to All Hands and Lattice?
  509. Every Thursday at 11am PST (as of this writing), Webflow holds an "All Hands" meeting where
  510. the management team relays the status of all of Webflow's ongoing projects as well as large company goals and initiatives. It is the Tech Lead's responsibility to provide a progress update for their
  511. project to the Webflow Project Tracker Google document _prior_ to this
  512. meeting. This document is shared in the #all-hands channel in Slack. A template for the updates is located at the end of the Google document. Please follow it accordingly. The items in the template are
  513. 1. TDLR, or a brief blurb on the project's state of affairs.
  514. 1. MILESTONE ON-TRACK/OFF-TRACK, where you provide the track updates for each active milestone, their percent progess, and the percent change from the previous week (these are guesstimates). Also list out the next two weeks of tasks the team will work on and their expected delivery dates.
  515. 1. KEY DECISIONS, where you mention any big key decisions that lead to timeline changes, scope changes, and anything that relates to support/marketing, or change in resources.
  516. 1. RISKS, UNKNOWNS, AND BLOCKERS, where you mention any risks, unknowns, or blockers that appeared since the last week.
  517. #### Lattice
  518. Webflow uses Lattice to help track higher level company goals. In addition to your weekly All Hands updates, we will ask that you also update any Lattice goals that are assigned to you. If you do not have an account, reach out to your Engineering Manager for help.
  519. ## How do I keep my team motivated?
  520. Engendering a sense of progress, and giving sufficient room for creative problem
  521. solving without dictating _how_, motivates humans more than money, or any carrot
  522. and stick. We are intrinsically motivated creatures with simple heuristics: If
  523. you place realistic goals in front of us, the tools to do it, and a sense of
  524. purpose for why we should, we will move mountains.
  525. Science has given us some key insights into what motivates humans. Many of the
  526. concepts in this document are built on top of those insights, so you've already
  527. been employing tactics to keep your team motivated! That said, here are some of
  528. the underlying mechanics of our process.
  529. #### Autonomy, Mastery, and Purpose
  530. Daniel Pink, in his book
  531. [Drive](https://www.amazon.com/Drive-Surprising-Truth-About-Motivates/dp/1594484805/ref=sr_1_1?s=books&ie=UTF8&qid=1513878328&sr=1-1&keywords=drive+daniel+pink),
  532. dispelled the myth that humans are extrinsically motivated, or that is to say
  533. motivated by _external_ factors such as money or nicer offices, job titles, etc.
  534. Instead, he found that we are motivated by _internal_ (or intrinsic)
  535. factors, such as a being given a sense of belonging, opportunities to grow
  536. skills, and to do so on our own terms. These three intrinsic factors can be
  537. boiled down to Autonomy, Mastery, and Purpose, and are excellent starting points
  538. for dissecting the basics of motivation.
  539. Part of providing these key motivators falls on Webflow's shoulders, but a
  540. clever Tech Lead can use them to great effect, too. So, every week ask yourself
  541. these questions:
  542. 1. Am I giving my team enough room to solve problems on their own terms? Am I
  543. dishing out commands when I should be providing direction and intent?
  544. [**Autonomy**]
  545. 2. Am I placing my team members on the right tasks that can help them grow?
  546. [**Mastery**]
  547. 3. Am I aligning _why_ we are building this feature with _how_ Webflow wants to
  548. help the world? [**Purpose**]
  549. #### Provide Feedback
  550. Kim Scott, a Harvard grad that served as an executive at Google and Apple, sums
  551. up how to best manage the relationships and expectations with each individual on
  552. your team in her book
  553. [Radical Candor](https://www.amazon.com/Radical-Candor-Kick-Ass-Without-Humanity/dp/1250103509/ref=sr_1_1?ie=UTF8&qid=1513952244&sr=8-1&keywords=radical+candor).
  554. It turns out we _shouldn't_ water down how we feel and what we say to each
  555. other, but instead we should frame tough discussions in a personal and caring
  556. way. The basic premise of this axiom is to "Care personally, Challenge
  557. Directly", which means you must _empathize_ with your team and demonstrate to
  558. them that you care about their welfare, but still provide them critical feedback
  559. (that might hurt).
  560. By providing critical feedback early and often, _and_ by demonstrating how much
  561. you care for people, you will sidestep catastrophic challenges later down the
  562. road. Also, this doesn't just apply to _negative_ feedback, but also _positive_
  563. feedback, too. Both are crucial. Consider picking up her book for more
  564. information.
  565. > **Pro Tip:** The way in which we _frame_ feedback can make all the difference to how well it is received. Instead of attacking personal flaws, highlight the _behavior_ that lead to the feedback. Consider using the Situation, Behavior, Impact model for such framing. It works like this: Bring up the situation where the behavior occurred, highlight the behavior, then mention the impact, e.g. "During today's meeting, you interrupted Brian multiple times, and made Brian feel like he couldn't speak up until the meeting's end where he presented the winning idea. This made the meeting longer than it needed to be.". Here's a [great guide](https://www.mindtools.com/pages/article/situation-behavior-impact-feedback.htm) if you'd like to learn more.
  566. #### Flow
  567. It's important to stress the need for each of your team members to have ample
  568. opportunity to enter Flow. This, in and of itself, is enough to keep most people
  569. happy at work _and_ in life. It's such a critical factor in motivation and in
  570. work _efficiency_ that we've listed it here as a reminder.
  571. ## I have an under-performing member on my team. What do I do?
  572. Have you heard the old adage, "There are no bad employees, only bad managers?"
  573. Well, it's mostly true. Webflow hires talented engineers, so before you
  574. jump to any conclusions about what's wrong with an under performer, make sure
  575. you are servicing your team 100% (See: [How do I keep my team motivated?](#how-do-i-keep-my-team-motivated)).
  576. Each team member must be sufficiently motivated through ample opportunity for
  577. producing meaningful progress, autonomously, with room for mastery, and with a
  578. sense of purpose. Providing continual feedback is also an essential ingredient.
  579. You also must consider a team member's _inner work life._ It's okay to ask, "How
  580. are things? Everything all right outside of work?" You _should_ ask these
  581. questions often, but remember not to pry. Give your team members room to discuss
  582. personal issues while remembering they are _personal_.
  583. If you've done your best to foster the right environment for your team member
  584. to do their best work, and they _still_ aren't meeting your expectations, have a
  585. chat with your manager about what to do next.
  586. ## How can I avoid burning my team out?
  587. If a team can't meet a deadline, it's a _management_ problem, and not the team's
  588. problem. This means that, somewhere along the way, the project didn't go as
  589. planned and a course wasn't corrected. So, **_Rule Number 1_** to avoid burnout
  590. is "Manage the project and expectations well" (See: [Help! We are behind schedule!](#help-we-are-behind-schedule)).
  591. **_Rule number 2_**: Never ask more of your team than you would ask of yourself
  592. (and you mustn't ask yourself to work nights and weekends). Other organizations
  593. might ask their teams to pull longer hours when the going gets rough. This is a
  594. laser-focused bullet train to attrition and long-term inefficiencies. Webflow
  595. cares deeply about its team, not only professionally, but personally, so we must
  596. do our best to _manage our time well_.
  597. #### Crunch Time
  598. Oh, crunch time, you've haunted the best teams, and you are oh so hard to avoid.
  599. As a Tech Lead, you will invariably run up against a deadline that's _just_
  600. within reach and may require slightly more effort to push it out in the last
  601. stretch. By _slightly_, we mean your team might need to put in a few more hours
  602. over their 40-hour work week. Yes, that's right. Our version of "crunch" isn't
  603. crazy hours that bleed into the evening or weekend. It's just a _few_. When
  604. people operate at their peak performance, where they engage in the flow state
  605. 2-4 hours a day, _they are incapable_ of more work without drastic consequences.
  606. They should already be operating at peak efficiency, and asking more of them has
  607. severe diminishing returns and a detrimental impact to them personally, _and_ to
  608. Webflow as a company.
  609. Crunch time is real. Crunch time can be a symptom of poor management. We must do
  610. our best to limit these hyperactive periods to one or two times a year.
  611. ## Recommended Books
  612. [Flow](https://www.amazon.com/Flow-Psychology-Experience-Perennial-Classics/dp/0061339202/ref=sr_1_1?ie=UTF8&qid=1513878317&sr=8-1&keywords=flow)
  613. [Deep Work](https://www.amazon.com/Deep-Work-Focused-Success-Distracted/dp/1455586692/ref=sr_1_1?ie=UTF8&qid=1515804941&sr=8-1&keywords=deep+work)
  614. [Drive](https://www.amazon.com/Drive-Surprising-Truth-About-Motivates/dp/1594484805/ref=sr_1_1?s=books&ie=UTF8&qid=1513878328&sr=1-1&keywords=drive+daniel+pink)
  615. [Leaders Eat Last](https://www.amazon.com/Leaders-Eat-Last-Together-Others/dp/1591848016/ref=sr_1_1?s=books&ie=UTF8&qid=1513878339&sr=1-1&keywords=Leaders+Eat+Last)
  616. [The Manager's Path](https://www.amazon.com/Managers-Path-Leaders-Navigating-Growth/dp/1491973897/ref=sr_1_1?s=books&ie=UTF8&qid=1513878350&sr=1-1&keywords=The+Manager%27s+Path)
  617. [The Progress Principle](https://www.amazon.com/Progress-Principle-Ignite-Engagement-Creativity/dp/142219857X/ref=sr_1_1?s=books&ie=UTF8&qid=1513878365&sr=1-1&keywords=The+Progress+Principle)
  618. [Getting Things Done](https://www.amazon.com/Getting-Things-Done-Stress-Free-Productivity/dp/0143126563/ref=sr_1_1?s=books&ie=UTF8&qid=1513878379&sr=1-1&keywords=Getting+Things+Done)
  619. [Getting To Yes](https://www.amazon.com/Getting-Yes-Negotiating-Agreement-Without/dp/0143118757/ref=sr_1_1?s=books&ie=UTF8&qid=1513878391&sr=1-1&keywords=Getting+To+Yes)
  620. [Radical Candor](https://www.amazon.com/Radical-Candor-Kick-Ass-Without-Humanity/dp/1250103509/ref=sr_1_1?ie=UTF8&qid=1513952244&sr=8-1&keywords=radical+candor)
  621. [Search Inside Yourself](https://www.amazon.com/Search-Inside-Yourself-Unexpected-Achieving-ebook/dp/B0070XF474/ref=sr_1_1?s=digital-text&ie=UTF8&qid=1513878403&sr=1-1&keywords=Search+Inside+Yourself)
  622. [Now Discover Your Strengths](https://www.amazon.com/Discover-Your-Strengths-Marcus-Buckingham/dp/0743201140/ref=sr_1_1?ie=UTF8&qid=1513878430&sr=8-1&keywords=Now+Discover+Your+Strengths)
  623. [The Personal MBA](https://www.amazon.com/Personal-MBA-Master-Art-Business/dp/1591845572/ref=sr_1_1?s=books&ie=UTF8&qid=1513878441&sr=1-1&keywords=The+Personal+MBA)