[{"data":1,"prerenderedAt":1479},["ShallowReactive",2],{"handbook-\u002Fhandbook\u002Fengineering\u002Freleases\u002Fprocess":3,"handbook-nav":768},{"id":4,"title":5,"body":6,"description":16,"extension":761,"meta":762,"navigation":763,"path":764,"seo":765,"stem":766,"__hash__":767},"handbook\u002Fhandbook\u002Fengineering\u002Freleases\u002Fprocess.md","Release Process",{"type":7,"value":8,"toc":745},"minimark",[9,13,17,42,46,54,59,66,137,140,143,158,165,172,178,184,188,193,202,209,213,221,225,228,231,333,361,375,383,387,398,401,543,547,550,568,574,578,581,584,587,594,637,645,648,651,654,717,720,727,731,734,741],[10,11,5],"h1",{"id":12},"release-process",[14,15,16],"p",{},"We do two types of releases:",[18,19,20,33],"ul",{},[21,22,23,28,29],"li",{},[24,25,27],"a",{"href":26},"#scheduled-releases","Scheduled Releases"," - ",[30,31,32],"em",{},"for the planned release of the entire set of product repositories.",[21,34,35,28,39],{},[24,36,38],{"href":37},"#fix-releases","Fix Releases",[30,40,41],{},"for ad-hoc release of individual repositories.",[43,44,27],"h2",{"id":45},"scheduled-releases",[14,47,48,49,53],{},"We publish a new release of FlowFuse in line with our ",[24,50,52],{"href":51},"\u002Fhandbook\u002Fengineering\u002Fproject-management\u002F#cadence","release plan",". Each\nrelease has a Release Manager who oversees the process. This role rotates around\nthe team to ensure everyone is able to do it and that we don't have any single\npoints of failure in the process.",[55,56,58],"h3",{"id":57},"setup","Setup",[14,60,61,62,65],{},"The Release Manager should take the following steps at the ",[30,63,64],{},"start"," of the release\niteration:",[18,67,68,78,81],{},[21,69,70,71,77],{},"Create a Release checklist issue using the ",[24,72,76],{"href":73,"rel":74},"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fadmin\u002Fissues\u002Fnew?assignees=&labels=&template=release.md&title=Release%3A",[75],"nofollow","Release Checklist template",".",[21,79,80],{},"Assign the issue to the Release Manager",[21,82,83,84],{},"Ensure the following tools are installed and working:\n",[18,85,86,108,123,130],{},[21,87,88,89],{},"git command-line tools\n",[18,90,91,98],{},[21,92,93,94],{},"Ensure ssh key access is setup so git interactions do not require continual\npassword typing - ",[95,96,97],"code",{},"ssh -T git@github.com",[21,99,100,101,104,105],{},"Ensure you have git configured with an appropriate ",[95,102,103],{},"user.name"," and ",[95,106,107],{},"user.email",[21,109,110,115],{},[24,111,114],{"href":112,"rel":113},"https:\u002F\u002Fgithub.com\u002Fcli\u002Fcli",[75],"GitHub client",[18,116,117],{},[21,118,119,120],{},"Ensure the client is logged in using ",[95,121,122],{},"gh auth login",[21,124,125],{},[24,126,129],{"href":127,"rel":128},"https:\u002F\u002Fstedolan.github.io\u002Fjq\u002Fdownload\u002F",[75],"jq",[21,131,132],{},[24,133,136],{"href":134,"rel":135},"https:\u002F\u002Fmikefarah.gitbook.io\u002Fyq\u002F#install",[75],"yq",[14,138,139],{},"On release day, the Release Manager takes the lead in running the release process,\nfollowing the steps in the checklist.",[14,141,142],{},"The release is split into four phases:",[144,145,146,149,152,155],"ol",{},[21,147,148],{},"Phase One: Check parts not covered by the automation are up to date.",[21,150,151],{},"Phase Two: Run the release automation and verify each stage completes properly.",[21,153,154],{},"Phase Three: Steps to deploy the release to Staging\u002FProduction environments.",[21,156,157],{},"Phase Four: Publicise the release.",[14,159,160,161,77],{},"The Release Manager chooses when to start the release process. We usually aim to\nstart the release process at 10am\u002F11am (UK\u002FCET) as that gets to the end of Phase\nTwo before the team ",[24,162,164],{"href":163},"#launch-lunch","Launch Lunch",[14,166,167,168,171],{},"A huddle should be started in the ",[95,169,170],{},"#dept-engineering"," channel at the start of the process to\nenable others to contribute where needed.",[14,173,174,175,177],{},"It is also useful for the wider team if the Release Manager posts status updates\nto ",[95,176,170],{}," throughout the process.",[14,179,180,181,183],{},"If at any point a team member identifies a problem that needs checking before the\nrelease can continue, they should post a message to ",[95,182,170],{}," and join the huddle\nto ensure the Release Manage is aware.",[55,185,187],{"id":186},"phase-one","Phase One",[189,190,192],"h4",{"id":191},"check-development-board","Check Development Board",[14,194,195,196,201],{},"Check the ",[24,197,200],{"href":198,"rel":199},"https:\u002F\u002Fgithub.com\u002Forgs\u002FFlowFuse\u002Fprojects\u002F1\u002Fviews\u002F33",[75],"Development Board","\nfor any items still in the 'Verify' column. Check what actions need to be completed\nto resolve them.",[14,203,204,208],{},[205,206,207],"strong",{},"Note:"," Items should have already been verified by the engineering team before\nrelease day. Leaving verification to release day leaves no time to resolve any\nnewly discovered issues.",[189,210,212],{"id":211},"check-usage-ping-collector-is-up-to-date","Check Usage Ping Collector is up to date",[14,214,215,216,220],{},"Ensure ",[24,217,219],{"href":218},"","https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fusage-ping-collector"," has been updated. The CTO\ntracks this and will flag if an update is needed.",[189,222,224],{"id":223},"unmanaged-repositories","Unmanaged Repositories",[14,226,227],{},"Not all repositories are covered by the release automation and must be published\nseparately. This is typically done by the development team in the build up to the\nfull release and should be coordinated by the CTO or Senior Engineer prior to release\nday.",[14,229,230],{},"The Release Manager should verify the following projects are up to date and\nhave been published as needed.",[18,232,233,242,251,260,269,278,287,296,305,314,324],{},[21,234,235],{},[24,236,239],{"href":237,"rel":238},"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fdevice-agent",[75],[95,240,241],{},"flowfuse\u002Fdevice-agent",[21,243,244],{},[24,245,248],{"href":246,"rel":247},"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fdevice-agent\u002Ftree\u002Fmain\u002Finstaller#release-process",[75],[95,249,250],{},"flowfuse\u002Fdevice-agent\u002Finstaller",[21,252,253],{},[24,254,257],{"href":255,"rel":256},"https:\u002F\u002Fwww.github.com\u002Fflowfuse\u002Fnr-project-nodes",[75],[95,258,259],{},"flowfuse\u002Fnr-project-nodes",[21,261,262],{},[24,263,266],{"href":264,"rel":265},"https:\u002F\u002Fwww.github.com\u002Fflowfuse\u002Fnr-file-nodes",[75],[95,267,268],{},"flowfuse\u002Fnr-file-nodes",[21,270,271],{},[24,272,275],{"href":273,"rel":274},"https:\u002F\u002Fwww.github.com\u002Fflowfuse\u002Fnr-tools-plugin",[75],[95,276,277],{},"flowfuse\u002Fnr-tools-plugin",[21,279,280],{},[24,281,284],{"href":282,"rel":283},"https:\u002F\u002Fwww.github.com\u002Fflowfuse\u002Fnr-assistant",[75],[95,285,286],{},"flowfuse\u002Fnr-assistant",[21,288,289],{},[24,290,293],{"href":291,"rel":292},"https:\u002F\u002Fwww.github.com\u002Fflowfuse\u002Fnr-mqtt-nodes",[75],[95,294,295],{},"flowfuse\u002Fnr-mqtt-nodes",[21,297,298],{},[24,299,302],{"href":300,"rel":301},"https:\u002F\u002Fwww.github.com\u002Fflowfuse\u002Fnr-tables-nodes",[75],[95,303,304],{},"flowfuse\u002Fnr-tables-nodes",[21,306,307],{},[24,308,311],{"href":309,"rel":310},"https:\u002F\u002Fwww.github.com\u002Fflowfuse\u002Fnr-subflow-export",[75],[95,312,313],{},"flowfuse\u002Fnr-subflow-export",[21,315,316,323],{},[24,317,320],{"href":318,"rel":319},"https:\u002F\u002Fwww.github.com\u002Fflowfuse\u002Fverdaccio-ff-auth",[75],[95,321,322],{},"flowfuse\u002Fverdaccio-ff-auth"," (This is not published to npmjs at this time)",[21,325,326],{},[24,327,330],{"href":328,"rel":329},"https:\u002F\u002Fwww.github.com\u002Fflowfuse\u002Fmqtt-schema-agent",[75],[95,331,332],{},"flowfuse\u002Fmqtt-schema-agent",[14,334,335,336,343,344,347,348,351,352,351,355,351,358,77],{},"Verify ",[24,337,340],{"href":338,"rel":339},"https:\u002F\u002Fwww.github.com\u002F\u002Fflowfuse\u002Fnr-launcher",[75],[95,341,342],{},"flowfuse\u002Fflowfuse-nr-launcher"," ",[95,345,346],{},"package.json"," has been updated to pull in the latest versions of ",[95,349,350],{},"file-nodes","\u002F",[95,353,354],{},"persistent-context",[95,356,357],{},"project-nodes",[95,359,360],{},"nr-assistant",[14,362,363,364,369,370,374],{},"Verify that the helm\u002Fnode-red-container Dockerfiles point to the latest Node-RED release (e.g. 3.1.x) and that both the helm ",[24,365,368],{"href":366,"rel":367},"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fhelm\u002Fblob\u002Fmain\u002Fflowforge-container\u002Finstall-device-cache.sh",[75],"install-device-cache.sh"," and docker-compose ",[24,371,368],{"href":372,"rel":373},"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fdocker-compose\u002Fblob\u002Fmain\u002Fflowforge-docker\u002Finstall-device-cache.sh",[75]," have been updated.",[14,376,377,378,382],{},"If any need to be updated, refer to the section ",[24,379,381],{"href":380},"#unmanaged-releases","Unmanaged Releases"," for releasing these.",[55,384,386],{"id":385},"phase-two","Phase Two",[14,388,389,390,393,394,397],{},"This phase is largely automated using the ",[95,391,392],{},"create-release"," script in the ",[95,395,396],{},"admin"," repository.",[14,399,400],{},"Follow these steps to run the script:",[144,402,403,417,535],{},[21,404,405,406,413,414,77],{},"Clone the ",[24,407,410],{"href":408,"rel":409},"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fadmin",[75],[95,411,412],{},"FlowFuse\u002Fadmin"," repository if you do not already have it.\nEnsure you have the latest with a ",[95,415,416],{},"git pull",[21,418,419,420,423,424,426,427,430,431,452,455,456,77,459,461,462],{},"In the ",[30,421,422],{},"parent"," directory to where you have the ",[95,425,396],{}," checked out, run the\nfollowing command, replace ",[95,428,429],{},"1.x.y"," with the proper release version.",[432,433,437],"pre",{"className":434,"code":435,"language":436,"meta":218,"style":218},"language-bash shiki shiki-themes github-light github-dark",".\u002Fadmin\u002Fcreate-release 1.x.y\n","bash",[95,438,439],{"__ignoreMap":218},[440,441,444,448],"span",{"class":442,"line":443},"line",1,[440,445,447],{"class":446},"sScJk",".\u002Fadmin\u002Fcreate-release",[440,449,451],{"class":450},"sZZnC"," 1.x.y\n",[453,454],"br",{},"This will create a directory called ",[95,457,458],{},"release-1.x.y",[453,460],{},"Then, for each managed repository in turn it will:",[18,463,464,467,470,485,493,500,503,506,514,517,532],{},[21,465,466],{},"Checks if a matching GitHub release already exists, if so it moves on to the next repo.",[21,468,469],{},"Checks for any outstanding PRs and waits for confirmation to continue if it finds any.",[21,471,472,473],{},"Checks to see if the repo has already been cloned into the release directory.\n",[18,474,475,482],{},[21,476,477,478,481],{},"if it has been, ensures it is on ",[95,479,480],{},"main"," and pulls from origin",[21,483,484],{},"otherwise, clones it",[21,486,487,488],{},"Checks that all @flowfuse\u002F* dependencies are on npm at the matching version\n",[18,489,490],{},[21,491,492],{},"If any dependency is missing, it waits for you to ask it to check again.",[21,494,495,496,499],{},"Creates a clean ",[95,497,498],{},"release-x.y.z"," branch",[21,501,502],{},"Updates CHANGELOG, package.json and package-lock.json files and commits changes",[21,504,505],{},"Pushes changes back to GitHub",[21,507,508,509],{},"Opens a PR\n",[18,510,511],{},[21,512,513],{},"At this point, the PR should be reviewed to ensure all updates look correct\nand all tests are passing. Once merged, the process can continue.",[21,515,516],{},"Checks the outstanding PRs again - waits for confirmation to continue",[21,518,519,520,523,524],{},"Creates a ",[30,521,522],{},"draft"," GitHub release and provides its url.\n",[18,525,526,529],{},[21,527,528],{},"The Release Manager should review the draft - check the release notes look appropriate\nand take note of any first-time contributors from outside the FF team.",[21,530,531],{},"The script waits for you to confirm you have reviewed the draft",[21,533,534],{},"Publishes the release and moves onto the next repo",[21,536,537,538,542],{},"Digital Ocean Droplet requires a manual step once the GitHub Action has finished,\nfollow ",[24,539,541],{"href":540},"\u002Fhandbook\u002Fengineering\u002Freleases\u002Fdigital-ocean\u002F","these"," steps to have the new image reviewed and published",[55,544,546],{"id":545},"phase-three","Phase Three",[14,548,549],{},"Once everything has been published, the Release Manager should:",[144,551,552,565],{},[21,553,554,555,560,561],{},"Raise a \"FlowFuse Cloud Change Requests\" Issue in ",[24,556,559],{"href":557,"rel":558},"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002FCloudProject\u002Fissues\u002Fnew\u002Fchoose",[75],"CloudProject Project"," to request Production to be updated to the new version. Stack update procedure can be found ",[24,562,564],{"href":563},"\u002Fhandbook\u002Fengineering\u002Fops\u002Fproduction-stack-update\u002F","here",[21,566,567],{},"Notify the CTO\u002FSenior Engineer that the release is ready to publish to production.",[14,569,570,571,573],{},"Once Production has been updated and verified, the Release Manager should announce\nthe availability of the release in ",[95,572,170],{},". At this point, the marketing team\nwill take over for Phase Four",[55,575,577],{"id":576},"phase-four","Phase Four",[14,579,580],{},"The final phase is where we tell the world about our work. This activity is led\nby the PM and Marketing team.",[43,582,38],{"id":583},"fix-releases",[14,585,586],{},"Patch releases are done as needed and have a much lighter process to allow\nfixes to be released quickly.",[14,588,589,590,593],{},"The core ",[95,591,592],{},"flowfuse"," repository has some automation in place to help with this process.\nUntil that is rolled out across the other repositories, some of the backporting work\nmust be done manually.",[18,595,596,602,609,616,619,630],{},[21,597,598,599,601],{},"Changes must first be PR'd to the ",[95,600,480],{}," branch and reviewed in the normal manner.",[21,603,604,605,608],{},"Before merging, the PR should have the label ",[95,606,607],{},"backport"," added.",[21,610,611,612,615],{},"If in ",[95,613,614],{},"flowfuse\u002Fflowfuse",", when the PR is merged, an automation will run to create a new PR that backports\nthe change to the maintenance branch. Otherwise, the backport PR must be manually created.",[21,617,618],{},"The backport PR must be reviewed and merged in the normal manner.",[21,620,621,622,625,626,629],{},"Once all of the required backport PRs are merged, raise a PR on the ",[95,623,624],{},"maintenance"," branch\nto update the version and ",[95,627,628],{},"CHANGELOG.md"," file with suitable details.",[21,631,632,633,636],{},"Create the GitHub release with the appropriate ",[95,634,635],{},"vX.Y.Z"," tag.",[14,638,639,640,644],{},"Finally, create two ",[24,641,643],{"href":642},"\u002Fhandbook\u002Foperations\u002Fchange\u002F","change requests",", one for\nstaging and one for production to upgrade to the latest version.",[55,646,381],{"id":647},"unmanaged-releases",[14,649,650],{},"The Unmanaged Repositories have a simpler release process. They are released\nas needed in coordination with the CTO\u002FSenior Engineer.",[14,652,653],{},"All release activity should be highlighted in #dept-engineering so the team is aware.",[144,655,656,659,665,671,689,695,707,714],{},[21,657,658],{},"Check that all changes have been merged to main",[21,660,661,662,664],{},"Update the ",[95,663,346],{}," version number",[21,666,667,670],{},[95,668,669],{},"cd"," into the directory of the package you want to release",[21,672,673,674,677,678,681,682,685,686,688],{},"Run the ",[95,675,676],{},"generate-changelog"," script, found in the ",[95,679,680],{},"flowfuse\u002Fadmin"," repository. Run this\nwhilst in the folder\u002Frepository that you are releasing. This\ngenerates a list of the PRs merged since the last tagged release. Note: this\nscript require the ",[95,683,684],{},"gh"," cli to be installed and logged in.\nUpdate ",[95,687,628],{}," with the output of the script.",[21,690,691,692],{},"Run ",[95,693,694],{},"npm install",[21,696,697,698,700,701,104,704,706],{},"Open a new PR with the ",[95,699,346],{},", ",[95,702,703],{},"package-lock.json",[95,705,628],{}," changes. Get the PR reviewed\nby someone else and then merged.",[21,708,709,710,713],{},"Create a new GitHub Release with the appropriate version number eg ",[95,711,712],{},"v0.1.1",". It is\nadvised to use the \"Generate Release Notes\" option to create the release notes and title.",[21,715,716],{},"Once the release is created, the GitHub Action will take care of publishing to\nNPM. Check the action to ensure it completes.",[43,718,164],{"id":719},"launch-lunch",[14,721,722,723,77],{},"To celebrate the launch of a new version of FlowFuse, we organize a lunch on\nthe release day. See also the ",[24,724,726],{"href":725},"..\u002F..\u002Fpeopleops\u002Fcompensation#launch-lunch","peopleops section",[43,728,730],{"id":729},"retrospective","Retrospective",[14,732,733],{},"The day after each release, a one hour meeting is conducted which anyone from the company can join. The purpose of this meeting is to reflect on the past four weeks of development effort, the release process and any other thoughts or comments that can help us refine processes moving forward.",[14,735,736,737,740],{},"In the retrospective, the CTO or Engineering Manager will also cover any new items that have been added to the ",[24,738,200],{"href":739},"..\u002Fproject-management#development-board"," and any relevant plans for engineering resource to be assigned to that work.",[742,743,744],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":218,"searchDepth":746,"depth":746,"links":747},2,[748,756,759,760],{"id":45,"depth":746,"text":27,"children":749},[750,752,753,754,755],{"id":57,"depth":751,"text":58},3,{"id":186,"depth":751,"text":187},{"id":385,"depth":751,"text":386},{"id":545,"depth":751,"text":546},{"id":576,"depth":751,"text":577},{"id":583,"depth":746,"text":38,"children":757},[758],{"id":647,"depth":751,"text":381},{"id":719,"depth":746,"text":164},{"id":729,"depth":746,"text":730},"md",{"navTitle":5},true,"\u002Fhandbook\u002Fengineering\u002Freleases\u002Fprocess",{"title":5,"description":16},"handbook\u002Fengineering\u002Freleases\u002Fprocess","hgZqZpNC3LjaBrEpPmAdztWsheT91sNPzCOasiAxPQI",[769],{"title":770,"path":771,"stem":772,"children":773},"Handbook","\u002Fhandbook","handbook",[774,777,898,928,1123,1199,1258,1384],{"title":775,"path":771,"stem":776},"FlowFuse Handbook","handbook\u002Findex",{"title":778,"path":779,"stem":780,"children":781},"Company","\u002Fhandbook\u002Fcompany","handbook\u002Fcompany\u002Findex",[782,783,787,791,795,813,817,821,825,890,894],{"title":778,"path":779,"stem":780},{"title":784,"path":785,"stem":786},"Board meetings","\u002Fhandbook\u002Fcompany\u002Fboard","handbook\u002Fcompany\u002Fboard",{"title":788,"path":789,"stem":790},"Communication","\u002Fhandbook\u002Fcompany\u002Fcommunication","handbook\u002Fcompany\u002Fcommunication",{"title":792,"path":793,"stem":794},"How we make decisions","\u002Fhandbook\u002Fcompany\u002Fdecisions","handbook\u002Fcompany\u002Fdecisions",{"title":796,"path":797,"stem":798,"children":799},"Guides","\u002Fhandbook\u002Fcompany\u002Fguides","handbook\u002Fcompany\u002Fguides\u002Findex",[800,801,805,809],{"title":796,"path":797,"stem":798},{"title":802,"path":803,"stem":804},"How to use Git","\u002Fhandbook\u002Fcompany\u002Fguides\u002Fgit","handbook\u002Fcompany\u002Fguides\u002Fgit",{"title":806,"path":807,"stem":808},"Google Workspace","\u002Fhandbook\u002Fcompany\u002Fguides\u002Fgworkspace","handbook\u002Fcompany\u002Fguides\u002Fgworkspace",{"title":810,"path":811,"stem":812},"Markdown Guide","\u002Fhandbook\u002Fcompany\u002Fguides\u002Fmarkdown","handbook\u002Fcompany\u002Fguides\u002Fmarkdown",{"title":814,"path":815,"stem":816},"Organizational Structure","\u002Fhandbook\u002Fcompany\u002Forganizational-structure","handbook\u002Fcompany\u002Forganizational-structure",{"title":818,"path":819,"stem":820},"Principles","\u002Fhandbook\u002Fcompany\u002Fprinciples","handbook\u002Fcompany\u002Fprinciples",{"title":822,"path":823,"stem":824},"Remote Work","\u002Fhandbook\u002Fcompany\u002Fremote","handbook\u002Fcompany\u002Fremote",{"title":826,"path":827,"stem":828,"children":829},"Security","\u002Fhandbook\u002Fcompany\u002Fsecurity","handbook\u002Fcompany\u002Fsecurity\u002Findex",[830,831,835,839,843,847,851,855,859,863,867,871,875,879,882,886],{"title":826,"path":827,"stem":828},{"title":832,"path":833,"stem":834},"Access Control Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Faccess-control","handbook\u002Fcompany\u002Fsecurity\u002Faccess-control",{"title":836,"path":837,"stem":838},"AI Development and Customer Data Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fai-development-and-customer-data","handbook\u002Fcompany\u002Fsecurity\u002Fai-development-and-customer-data",{"title":840,"path":841,"stem":842},"Asset Management Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fasset-management","handbook\u002Fcompany\u002Fsecurity\u002Fasset-management",{"title":844,"path":845,"stem":846},"Business Continuity & Disaster Recovery Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fbusiness-continuity","handbook\u002Fcompany\u002Fsecurity\u002Fbusiness-continuity",{"title":848,"path":849,"stem":850},"Computer Security","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fcomputer-security","handbook\u002Fcompany\u002Fsecurity\u002Fcomputer-security",{"title":852,"path":853,"stem":854},"Cryptography Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fcryptography","handbook\u002Fcompany\u002Fsecurity\u002Fcryptography",{"title":856,"path":857,"stem":858},"Data Management Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fdata-management","handbook\u002Fcompany\u002Fsecurity\u002Fdata-management",{"title":860,"path":861,"stem":862},"Human Resources Security Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fhuman-resources","handbook\u002Fcompany\u002Fsecurity\u002Fhuman-resources",{"title":864,"path":865,"stem":866},"Incident Response Plan","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fincident-response","handbook\u002Fcompany\u002Fsecurity\u002Fincident-response",{"title":868,"path":869,"stem":870},"Information Security Policy and Acceptable Use Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Finformation-security","handbook\u002Fcompany\u002Fsecurity\u002Finformation-security",{"title":872,"path":873,"stem":874},"Information Security Roles and Responsibilities","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Finformation-security-roles","handbook\u002Fcompany\u002Fsecurity\u002Finformation-security-roles",{"title":876,"path":877,"stem":878},"Operations Security Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Foperations-security","handbook\u002Fcompany\u002Fsecurity\u002Foperations-security",{"title":856,"path":880,"stem":881},"\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Frisk-management","handbook\u002Fcompany\u002Fsecurity\u002Frisk-management",{"title":883,"path":884,"stem":885},"Secure Development Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fsecure-development","handbook\u002Fcompany\u002Fsecurity\u002Fsecure-development",{"title":887,"path":888,"stem":889},"Third-Party Risk Management Policy","\u002Fhandbook\u002Fcompany\u002Fsecurity\u002Fthird-party-risk-management","handbook\u002Fcompany\u002Fsecurity\u002Fthird-party-risk-management",{"title":891,"path":892,"stem":893},"Strategy","\u002Fhandbook\u002Fcompany\u002Fstrategy","handbook\u002Fcompany\u002Fstrategy",{"title":895,"path":896,"stem":897},"Values","\u002Fhandbook\u002Fcompany\u002Fvalues","handbook\u002Fcompany\u002Fvalues",{"title":899,"path":900,"stem":901,"children":902},"Design","\u002Fhandbook\u002Fdesign","handbook\u002Fdesign\u002Findex",[903,904,908,912,916,920,924],{"title":899,"path":900,"stem":901},{"title":905,"path":906,"stem":907},"Art Requests","\u002Fhandbook\u002Fdesign\u002Fart-requests","handbook\u002Fdesign\u002Fart-requests",{"title":909,"path":910,"stem":911},"FlowFuse Branding Guidelines","\u002Fhandbook\u002Fdesign\u002Fbranding","handbook\u002Fdesign\u002Fbranding",{"title":913,"path":914,"stem":915},"Design Thinking","\u002Fhandbook\u002Fdesign\u002Fdesign-thinking","handbook\u002Fdesign\u002Fdesign-thinking",{"title":917,"path":918,"stem":919},"Process","\u002Fhandbook\u002Fdesign\u002Fprocess","handbook\u002Fdesign\u002Fprocess",{"title":921,"path":922,"stem":923},"Tools","\u002Fhandbook\u002Fdesign\u002Ftools","handbook\u002Fdesign\u002Ftools",{"title":925,"path":926,"stem":927},"Videos","\u002Fhandbook\u002Fdesign\u002Fvideos","handbook\u002Fdesign\u002Fvideos",{"title":929,"path":930,"stem":931,"children":932},"Engineering","\u002Fhandbook\u002Fengineering","handbook\u002Fengineering\u002Findex",[933,934,952,956,978,1016,1020,1079,1083,1102,1106,1120],{"title":929,"path":930,"stem":931},{"title":935,"path":936,"stem":937,"children":938},"Contributing","\u002Fhandbook\u002Fengineering\u002Fcontributing","handbook\u002Fengineering\u002Fcontributing\u002Findex",[939,940,944,948],{"title":935,"path":936,"stem":937},{"title":941,"path":942,"stem":943},"Certified Nodes","\u002Fhandbook\u002Fengineering\u002Fcontributing\u002Fcertified-nodes","handbook\u002Fengineering\u002Fcontributing\u002Fcertified-nodes",{"title":945,"path":946,"stem":947},"Setting up a local FF Tables test environment","\u002Fhandbook\u002Fengineering\u002Fcontributing\u002Fff-tables","handbook\u002Fengineering\u002Fcontributing\u002Fff-tables",{"title":949,"path":950,"stem":951},"FlowFuse Team NPM Registry","\u002Fhandbook\u002Fengineering\u002Fcontributing\u002Fteam-npm-registry","handbook\u002Fengineering\u002Fcontributing\u002Fteam-npm-registry",{"title":953,"path":954,"stem":955},"Dependency Updates","\u002Fhandbook\u002Fengineering\u002Fdependency-updates","handbook\u002Fengineering\u002Fdependency-updates",{"title":957,"path":958,"stem":959,"children":960},"Front-End","\u002Fhandbook\u002Fengineering\u002Ffrontend","handbook\u002Fengineering\u002Ffrontend\u002Findex",[961,962,966,970,974],{"title":957,"path":958,"stem":959},{"title":963,"path":964,"stem":965},"Data Attributes","\u002Fhandbook\u002Fengineering\u002Ffrontend\u002Fdata-attributes","handbook\u002Fengineering\u002Ffrontend\u002Fdata-attributes",{"title":967,"path":968,"stem":969},"Front-End Layouts","\u002Fhandbook\u002Fengineering\u002Ffrontend\u002Flayouts","handbook\u002Fengineering\u002Ffrontend\u002Flayouts",{"title":971,"path":972,"stem":973},"Services","\u002Fhandbook\u002Fengineering\u002Ffrontend\u002Fservices","handbook\u002Fengineering\u002Ffrontend\u002Fservices",{"title":975,"path":976,"stem":977},"Front-End Testing","\u002Fhandbook\u002Fengineering\u002Ffrontend\u002Ftesting","handbook\u002Fengineering\u002Ffrontend\u002Ftesting",{"title":979,"path":980,"stem":981,"children":982},"Platform Ops","\u002Fhandbook\u002Fengineering\u002Fops","handbook\u002Fengineering\u002Fops\u002Findex",[983,984,988,992,996,1000,1004,1008,1012],{"title":979,"path":980,"stem":981},{"title":985,"path":986,"stem":987},"FlowFuse Dedicated","\u002Fhandbook\u002Fengineering\u002Fops\u002Fdedicated","handbook\u002Fengineering\u002Fops\u002Fdedicated",{"title":989,"path":990,"stem":991},"Dependencies within the CI\u002FCD process","\u002Fhandbook\u002Fengineering\u002Fops\u002Fdeployment","handbook\u002Fengineering\u002Fops\u002Fdeployment",{"title":993,"path":994,"stem":995},"Incident Response","\u002Fhandbook\u002Fengineering\u002Fops\u002Fincident-response","handbook\u002Fengineering\u002Fops\u002Fincident-response",{"title":997,"path":998,"stem":999},"Observability","\u002Fhandbook\u002Fengineering\u002Fops\u002Fobservability","handbook\u002Fengineering\u002Fops\u002Fobservability",{"title":1001,"path":1002,"stem":1003},"Production Environment","\u002Fhandbook\u002Fengineering\u002Fops\u002Fproduction","handbook\u002Fengineering\u002Fops\u002Fproduction",{"title":1005,"path":1006,"stem":1007},"How to Update Stacks on Production","\u002Fhandbook\u002Fengineering\u002Fops\u002Fproduction-stack-update","handbook\u002Fengineering\u002Fops\u002Fproduction-stack-update",{"title":1009,"path":1010,"stem":1011},"FlowFuse Expert","\u002Fhandbook\u002Fengineering\u002Fops\u002Fself-hosted-assistant","handbook\u002Fengineering\u002Fops\u002Fself-hosted-assistant",{"title":1013,"path":1014,"stem":1015},"Staging Environment","\u002Fhandbook\u002Fengineering\u002Fops\u002Fstaging","handbook\u002Fengineering\u002Fops\u002Fstaging",{"title":1017,"path":1018,"stem":1019},"Packaging Guidelines","\u002Fhandbook\u002Fengineering\u002Fpackaging","handbook\u002Fengineering\u002Fpackaging",{"title":1021,"path":1022,"stem":1023,"children":1024},"Product","\u002Fhandbook\u002Fengineering\u002Fproduct","handbook\u002Fengineering\u002Fproduct\u002Findex",[1025,1026,1030,1034,1038,1042,1046,1052,1056,1059,1063,1067,1071,1075],{"title":1021,"path":1022,"stem":1023},{"title":1027,"path":1028,"stem":1029},"Blueprints","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fblueprints","handbook\u002Fengineering\u002Fproduct\u002Fblueprints",{"title":1031,"path":1032,"stem":1033},"Node-RED Dashboard 2.0 - Project","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fdashboard","handbook\u002Fengineering\u002Fproduct\u002Fdashboard",{"title":1035,"path":1036,"stem":1037},"Product Feedback","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Ffeedback","handbook\u002Fengineering\u002Fproduct\u002Ffeedback",{"title":1039,"path":1040,"stem":1041},"Glossary","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fglossary","handbook\u002Fengineering\u002Fproduct\u002Fglossary",{"title":1043,"path":1044,"stem":1045},"Product Metrics","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fmetrics","handbook\u002Fengineering\u002Fproduct\u002Fmetrics",{"title":1047,"path":1048,"stem":1049,"children":1050},"Personas","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fpersonas","handbook\u002Fengineering\u002Fproduct\u002Fpersonas\u002Findex",[1051],{"title":1047,"path":1048,"stem":1049},{"title":1053,"path":1054,"stem":1055},"Pricing Principles","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fpricing","handbook\u002Fengineering\u002Fproduct\u002Fpricing",{"title":818,"path":1057,"stem":1058},"\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fprinciples","handbook\u002Fengineering\u002Fproduct\u002Fprinciples",{"title":1060,"path":1061,"stem":1062},"Product Strategy","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fstrategy","handbook\u002Fengineering\u002Fproduct\u002Fstrategy",{"title":1064,"path":1065,"stem":1066},"Product Growth","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Ftelemetry","handbook\u002Fengineering\u002Fproduct\u002Ftelemetry",{"title":1068,"path":1069,"stem":1070},"Versioning","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fversioning","handbook\u002Fengineering\u002Fproduct\u002Fversioning",{"title":1072,"path":1073,"stem":1074},"Market Segments","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fverticals","handbook\u002Fengineering\u002Fproduct\u002Fverticals",{"title":1076,"path":1077,"stem":1078},"Vision","\u002Fhandbook\u002Fengineering\u002Fproduct\u002Fvision","handbook\u002Fengineering\u002Fproduct\u002Fvision",{"title":1080,"path":1081,"stem":1082},"Project Management","\u002Fhandbook\u002Fengineering\u002Fproject-management","handbook\u002Fengineering\u002Fproject-management",{"title":1084,"path":1085,"stem":1086,"children":1087},"Releases","\u002Fhandbook\u002Fengineering\u002Freleases","handbook\u002Fengineering\u002Freleases\u002Findex",[1088,1089,1093,1097,1098],{"title":1084,"path":1085,"stem":1086},{"title":1090,"path":1091,"stem":1092},"Dashboard 2.0 Release Process","\u002Fhandbook\u002Fengineering\u002Freleases\u002Fdashboard-2","handbook\u002Fengineering\u002Freleases\u002Fdashboard-2",{"title":1094,"path":1095,"stem":1096},"Digital Ocean Release Process","\u002Fhandbook\u002Fengineering\u002Freleases\u002Fdigital-ocean","handbook\u002Fengineering\u002Freleases\u002Fdigital-ocean",{"title":5,"path":764,"stem":766},{"title":1099,"path":1100,"stem":1101},"Writing Changelog Posts","\u002Fhandbook\u002Fengineering\u002Freleases\u002Fwriting-changelog","handbook\u002Fengineering\u002Freleases\u002Fwriting-changelog",{"title":1103,"path":1104,"stem":1105},"Security Reporting Policy","\u002Fhandbook\u002Fengineering\u002Fsecurity","handbook\u002Fengineering\u002Fsecurity",{"title":1107,"path":1108,"stem":1109,"children":1110},"Support","\u002Fhandbook\u002Fengineering\u002Fsupport","handbook\u002Fengineering\u002Fsupport\u002Findex",[1111,1112,1116],{"title":1107,"path":1108,"stem":1109},{"title":1113,"path":1114,"stem":1115},"Support Triage Duty","\u002Fhandbook\u002Fengineering\u002Fsupport\u002Ftriage","handbook\u002Fengineering\u002Fsupport\u002Ftriage",{"title":1117,"path":1118,"stem":1119},"Troubleshooting","\u002Fhandbook\u002Fengineering\u002Fsupport\u002Ftroubleshooting","handbook\u002Fengineering\u002Fsupport\u002Ftroubleshooting",{"title":921,"path":1121,"stem":1122},"\u002Fhandbook\u002Fengineering\u002Ftools","handbook\u002Fengineering\u002Ftools",{"title":1124,"path":1125,"stem":1126,"children":1127},"Marketing department","\u002Fhandbook\u002Fmarketing","handbook\u002Fmarketing\u002Findex",[1128,1129,1133,1137,1151,1155,1159,1163,1167,1171,1175,1179,1183,1187,1191,1195],{"title":1124,"path":1125,"stem":1126},{"title":1130,"path":1131,"stem":1132},"Blog","\u002Fhandbook\u002Fmarketing\u002Fblog","handbook\u002Fmarketing\u002Fblog",{"title":1134,"path":1135,"stem":1136},"Brand Personality, Tone of Voice & Character","\u002Fhandbook\u002Fmarketing\u002Fbrand-voice","handbook\u002Fmarketing\u002Fbrand-voice",{"title":1138,"path":1139,"stem":1140,"children":1141},"Community","\u002Fhandbook\u002Fmarketing\u002Fcommunity","handbook\u002Fmarketing\u002Fcommunity\u002Findex",[1142,1143,1147],{"title":1138,"path":1139,"stem":1140},{"title":1144,"path":1145,"stem":1146},"Community Guidelines","\u002Fhandbook\u002Fmarketing\u002Fcommunity\u002Fcommunity-guidelines","handbook\u002Fmarketing\u002Fcommunity\u002Fcommunity-guidelines",{"title":1148,"path":1149,"stem":1150},"Forums And Support","\u002Fhandbook\u002Fmarketing\u002Fcommunity\u002Fforums-and-support","handbook\u002Fmarketing\u002Fcommunity\u002Fforums-and-support",{"title":1152,"path":1153,"stem":1154},"Customer Stories","\u002Fhandbook\u002Fmarketing\u002Fcustomer-stories","handbook\u002Fmarketing\u002Fcustomer-stories",{"title":1156,"path":1157,"stem":1158},"FlowFuse for Education","\u002Fhandbook\u002Fmarketing\u002Feducation","handbook\u002Fmarketing\u002Feducation",{"title":1160,"path":1161,"stem":1162},"Marketing Email","\u002Fhandbook\u002Fmarketing\u002Femail","handbook\u002Fmarketing\u002Femail",{"title":1164,"path":1165,"stem":1166},"Events","\u002Fhandbook\u002Fmarketing\u002Fevents","handbook\u002Fmarketing\u002Fevents",{"title":1168,"path":1169,"stem":1170},"How the marketing team works at FlowFuse","\u002Fhandbook\u002Fmarketing\u002Fhow-we-work","handbook\u002Fmarketing\u002Fhow-we-work",{"title":1172,"path":1173,"stem":1174},"Lead Activation","\u002Fhandbook\u002Fmarketing\u002Flead-activation","handbook\u002Fmarketing\u002Flead-activation",{"title":1176,"path":1177,"stem":1178},"Lead Generation","\u002Fhandbook\u002Fmarketing\u002Fleads","handbook\u002Fmarketing\u002Fleads",{"title":1180,"path":1181,"stem":1182},"Messaging","\u002Fhandbook\u002Fmarketing\u002Fmessaging","handbook\u002Fmarketing\u002Fmessaging",{"title":1184,"path":1185,"stem":1186},"Marketing Programs","\u002Fhandbook\u002Fmarketing\u002Fprograms","handbook\u002Fmarketing\u002Fprograms",{"title":1188,"path":1189,"stem":1190},"Social Media Channels","\u002Fhandbook\u002Fmarketing\u002Fsocial-media","handbook\u002Fmarketing\u002Fsocial-media",{"title":1192,"path":1193,"stem":1194},"FlowFuse Webinars","\u002Fhandbook\u002Fmarketing\u002Fwebinars","handbook\u002Fmarketing\u002Fwebinars",{"title":1196,"path":1197,"stem":1198},"Marketing Website","\u002Fhandbook\u002Fmarketing\u002Fwebsite","handbook\u002Fmarketing\u002Fwebsite",{"title":1200,"path":1201,"stem":1202,"children":1203},"Operations","\u002Fhandbook\u002Foperations","handbook\u002Foperations\u002Findex",[1204,1205,1209,1213,1217,1238,1242,1246,1250,1254],{"title":1200,"path":1201,"stem":1202},{"title":1206,"path":1207,"stem":1208},"Tax & Compliance","\u002Fhandbook\u002Foperations\u002Faccounting","handbook\u002Foperations\u002Faccounting",{"title":1210,"path":1211,"stem":1212},"Accounts","\u002Fhandbook\u002Foperations\u002Faccounts","handbook\u002Foperations\u002Faccounts",{"title":1214,"path":1215,"stem":1216},"Billing","\u002Fhandbook\u002Foperations\u002Fbilling","handbook\u002Foperations\u002Fbilling",{"title":218,"path":1218,"stem":1219,"children":1220},"\u002Fhandbook\u002Foperations\u002Fceo-ops","handbook\u002Foperations\u002Fceo-ops\u002Findex",[1221,1222,1226,1230,1234],{"title":218,"path":1218,"stem":1219},{"title":1223,"path":1224,"stem":1225},"Calendar Management","\u002Fhandbook\u002Foperations\u002Fceo-ops\u002Fcalendar-management","handbook\u002Foperations\u002Fceo-ops\u002Fcalendar-management",{"title":1227,"path":1228,"stem":1229},"Inbox Management","\u002Fhandbook\u002Foperations\u002Fceo-ops\u002Finbox-management","handbook\u002Foperations\u002Fceo-ops\u002Finbox-management",{"title":1231,"path":1232,"stem":1233},"Task Managment","\u002Fhandbook\u002Foperations\u002Fceo-ops\u002Ftask-managment","handbook\u002Foperations\u002Fceo-ops\u002Ftask-managment",{"title":1235,"path":1236,"stem":1237},"Travel Booking","\u002Fhandbook\u002Foperations\u002Fceo-ops\u002Ftravel-booking","handbook\u002Foperations\u002Fceo-ops\u002Ftravel-booking",{"title":1239,"path":1240,"stem":1241},"Change","\u002Fhandbook\u002Foperations\u002Fchange","handbook\u002Foperations\u002Fchange",{"title":1243,"path":1244,"stem":1245},"Commission Payment","\u002Fhandbook\u002Foperations\u002Fcommission-payment","handbook\u002Foperations\u002Fcommission-payment",{"title":1247,"path":1248,"stem":1249},"Data at FlowFuse","\u002Fhandbook\u002Foperations\u002Fdata","handbook\u002Foperations\u002Fdata",{"title":1251,"path":1252,"stem":1253},"Signatures","\u002Fhandbook\u002Foperations\u002Fsignatures","handbook\u002Foperations\u002Fsignatures",{"title":1255,"path":1256,"stem":1257},"Vendors","\u002Fhandbook\u002Foperations\u002Fvendors","handbook\u002Foperations\u002Fvendors",{"title":1259,"path":1260,"stem":1261,"children":1262},"People Operations","\u002Fhandbook\u002Fpeopleops","handbook\u002Fpeopleops\u002Findex",[1263,1264,1268,1272,1276,1280,1284,1302,1364,1368,1372,1376,1380],{"title":1259,"path":1260,"stem":1261},{"title":1265,"path":1266,"stem":1267},"Coaching Plans","\u002Fhandbook\u002Fpeopleops\u002Fcoaching-plans","handbook\u002Fpeopleops\u002Fcoaching-plans",{"title":1269,"path":1270,"stem":1271},"Code of Conduct","\u002Fhandbook\u002Fpeopleops\u002Fcode-of-conduct","handbook\u002Fpeopleops\u002Fcode-of-conduct",{"title":1273,"path":1274,"stem":1275},"Compensation","\u002Fhandbook\u002Fpeopleops\u002Fcompensation","handbook\u002Fpeopleops\u002Fcompensation",{"title":1277,"path":1278,"stem":1279},"Compliance & Training (Mineral)","\u002Fhandbook\u002Fpeopleops\u002Fcompliance","handbook\u002Fpeopleops\u002Fcompliance",{"title":1281,"path":1282,"stem":1283},"Expenses","\u002Fhandbook\u002Fpeopleops\u002Fexpenses","handbook\u002Fpeopleops\u002Fexpenses",{"title":1285,"path":1286,"stem":1287,"children":1288},"Hiring","\u002Fhandbook\u002Fpeopleops\u002Fhiring","handbook\u002Fpeopleops\u002Fhiring\u002Findex",[1289,1290,1294,1298],{"title":1285,"path":1286,"stem":1287},{"title":1291,"path":1292,"stem":1293},"Working with Recruiters","\u002Fhandbook\u002Fpeopleops\u002Fhiring\u002Frecruiters","handbook\u002Fpeopleops\u002Fhiring\u002Frecruiters",{"title":1295,"path":1296,"stem":1297},"Screening Call","\u002Fhandbook\u002Fpeopleops\u002Fhiring\u002Fscreening-call","handbook\u002Fpeopleops\u002Fhiring\u002Fscreening-call",{"title":1299,"path":1300,"stem":1301},"Star Questions","\u002Fhandbook\u002Fpeopleops\u002Fhiring\u002Fstar-questions","handbook\u002Fpeopleops\u002Fhiring\u002Fstar-questions",{"title":1303,"path":1304,"stem":1305,"children":1306},"Job Descriptions","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Findex",[1307,1308,1312,1316,1320,1324,1328,1332,1336,1340,1344,1348,1352,1356,1360],{"title":1303,"path":1304,"stem":1305},{"title":1309,"path":1310,"stem":1311},"Account Executive","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Faccount-executive","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Faccount-executive",{"title":1313,"path":1314,"stem":1315},"CEO","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fceo","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fceo",{"title":1317,"path":1318,"stem":1319},"Chief of Staff","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fchief-of-staff","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fchief-of-staff",{"title":1321,"path":1322,"stem":1323},"CTO","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fcto","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fcto",{"title":1325,"path":1326,"stem":1327},"Developer Relations Advocate","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fdeveloper-relations-advocate","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fdeveloper-relations-advocate",{"title":1329,"path":1330,"stem":1331},"Engineering Manager","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fengineering-manager","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fengineering-manager",{"title":1333,"path":1334,"stem":1335},"Fullstack Engineer","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Ffullstack-engineer","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Ffullstack-engineer",{"title":1337,"path":1338,"stem":1339},"Fullstack Engineer (AI-Focused)","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Ffullstack-engineer-ai","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Ffullstack-engineer-ai",{"title":1341,"path":1342,"stem":1343},"Head of Marketing","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fhead-of-marketing","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fhead-of-marketing",{"title":1345,"path":1346,"stem":1347},"Product Manager","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fproduct-manager","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fproduct-manager",{"title":1349,"path":1350,"stem":1351},"Product Marketer","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fproduct-marketer","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fproduct-marketer",{"title":1353,"path":1354,"stem":1355},"Solutions Engineer","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fsolutions-engineer","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fsolutions-engineer",{"title":1357,"path":1358,"stem":1359},"Technical Product Manager","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Ftechnical-product-manager","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Ftechnical-product-manager",{"title":1361,"path":1362,"stem":1363},"VP of Sales","\u002Fhandbook\u002Fpeopleops\u002Fjob-descriptions\u002Fvp-sales","handbook\u002Fpeopleops\u002Fjob-descriptions\u002Fvp-sales",{"title":1365,"path":1366,"stem":1367},"Holiday and Leave","\u002Fhandbook\u002Fpeopleops\u002Fleave","handbook\u002Fpeopleops\u002Fleave",{"title":1369,"path":1370,"stem":1371},"PeopleOps policies","\u002Fhandbook\u002Fpeopleops\u002Forganization","handbook\u002Fpeopleops\u002Forganization",{"title":1373,"path":1374,"stem":1375},"Performance Review","\u002Fhandbook\u002Fpeopleops\u002Fperformance-review","handbook\u002Fpeopleops\u002Fperformance-review",{"title":1377,"path":1378,"stem":1379},"Summit","\u002Fhandbook\u002Fpeopleops\u002Fsummit","handbook\u002Fpeopleops\u002Fsummit",{"title":1381,"path":1382,"stem":1383},"Travel","\u002Fhandbook\u002Fpeopleops\u002Ftravel","handbook\u002Fpeopleops\u002Ftravel",{"title":1385,"path":1386,"stem":1387,"children":1388},"Sales department","\u002Fhandbook\u002Fsales","handbook\u002Fsales\u002Findex",[1389,1390,1396,1400,1404,1408,1412,1416,1420,1424,1441,1445,1457,1461,1467,1471,1475],{"title":1385,"path":1386,"stem":1387},{"title":1391,"path":1392,"stem":1393,"children":1394},"FY 2026 SALES COMPENSATION PLAN","\u002Fhandbook\u002Fsales\u002Fcommission-plan","handbook\u002Fsales\u002Fcommission-plan\u002Findex",[1395],{"title":1391,"path":1392,"stem":1393},{"title":1397,"path":1398,"stem":1399},"Customer Success","\u002Fhandbook\u002Fsales\u002Fcustomer-success","handbook\u002Fsales\u002Fcustomer-success",{"title":1401,"path":1402,"stem":1403},"Self Hosted Dashboard v2 Multi User Plugin","\u002Fhandbook\u002Fsales\u002Fdashboard-v2","handbook\u002Fsales\u002Fdashboard-v2",{"title":1405,"path":1406,"stem":1407},"Edge Connectivity Sales Process","\u002Fhandbook\u002Fsales\u002Fedge-connect-process","handbook\u002Fsales\u002Fedge-connect-process",{"title":1409,"path":1410,"stem":1411},"Engagements","\u002Fhandbook\u002Fsales\u002Fengagements","handbook\u002Fsales\u002Fengagements",{"title":1413,"path":1414,"stem":1415},"Forecast Review","\u002Fhandbook\u002Fsales\u002Fforecast-review","handbook\u002Fsales\u002Fforecast-review",{"title":1417,"path":1418,"stem":1419},"Hubspot","\u002Fhandbook\u002Fsales\u002Fhubspot","handbook\u002Fsales\u002Fhubspot",{"title":1421,"path":1422,"stem":1423},"Legal","\u002Fhandbook\u002Fsales\u002Flegal","handbook\u002Fsales\u002Flegal",{"title":218,"path":1425,"stem":1426,"children":1427},"\u002Fhandbook\u002Fsales\u002Fmeetings","handbook\u002Fsales\u002Fmeetings\u002Findex",[1428,1429,1433,1437],{"title":218,"path":1425,"stem":1426},{"title":1430,"path":1431,"stem":1432},"Demo","\u002Fhandbook\u002Fsales\u002Fmeetings\u002Fdemo","handbook\u002Fsales\u002Fmeetings\u002Fdemo",{"title":1434,"path":1435,"stem":1436},"Discovery","\u002Fhandbook\u002Fsales\u002Fmeetings\u002Fdiscovery","handbook\u002Fsales\u002Fmeetings\u002Fdiscovery",{"title":1438,"path":1439,"stem":1440},"Poc","\u002Fhandbook\u002Fsales\u002Fmeetings\u002Fpoc","handbook\u002Fsales\u002Fmeetings\u002Fpoc",{"title":1442,"path":1443,"stem":1444},"Sales Team Operating Principles","\u002Fhandbook\u002Fsales\u002Foperating-principles","handbook\u002Fsales\u002Foperating-principles",{"title":1446,"path":1447,"stem":1448,"children":1449},"Commercial Organization","\u002Fhandbook\u002Fsales\u002Forg","handbook\u002Fsales\u002Forg\u002Findex",[1450,1451],{"title":1446,"path":1447,"stem":1448},{"title":1452,"path":1453,"stem":1454,"children":1455},"Account Executives","\u002Fhandbook\u002Fsales\u002Forg\u002Faccount-executives","handbook\u002Fsales\u002Forg\u002Faccount-executives\u002Findex",[1456],{"title":1452,"path":1453,"stem":1454},{"title":1458,"path":1459,"stem":1460},"Partnerships","\u002Fhandbook\u002Fsales\u002Fpartnerships","handbook\u002Fsales\u002Fpartnerships",{"title":1462,"path":1463,"stem":1464,"children":1465},"Processes","\u002Fhandbook\u002Fsales\u002Fprocesses","handbook\u002Fsales\u002Fprocesses\u002Findex",[1466],{"title":1462,"path":1463,"stem":1464},{"title":1468,"path":1469,"stem":1470},"Professional Services","\u002Fhandbook\u002Fsales\u002Fprofessional-services","handbook\u002Fsales\u002Fprofessional-services",{"title":1472,"path":1473,"stem":1474},"Regions","\u002Fhandbook\u002Fsales\u002Fregions","handbook\u002Fsales\u002Fregions",{"title":1476,"path":1477,"stem":1478},"Sales Deck","\u002Fhandbook\u002Fsales\u002Fsales-deck","handbook\u002Fsales\u002Fsales-deck",1780070545133]