[{"data":1,"prerenderedAt":1586},["ShallowReactive",2],{"navigation_docs":3,"-engineering-project-management":348,"-engineering-project-management-surround":1581},[4,8,68,98,216,245,259,280,344],{"title":5,"path":6,"stem":7},"Introduction","\u002Fintroduction","0.introduction",{"title":9,"icon":10,"path":11,"stem":12,"children":13,"page":63},"Company","i-lucide-building-2","\u002Fcompany","1.company",[14,18,22,26,30,34,38,42,46,50,64],{"title":15,"path":16,"stem":17},"About","\u002Fcompany\u002Fabout","1.company\u002F0.about",{"title":19,"path":20,"stem":21},"Values","\u002Fcompany\u002Fvalues","1.company\u002F1.values",{"title":23,"path":24,"stem":25},"Communication","\u002Fcompany\u002Fcommunication","1.company\u002Fcommunication",{"title":27,"path":28,"stem":29},"Competition","\u002Fcompany\u002Fcompetition","1.company\u002Fcompetition",{"title":31,"path":32,"stem":33},"Hybrid Working","\u002Fcompany\u002Fhybrid-working","1.company\u002Fhybrid-working",{"title":35,"path":36,"stem":37},"Manchester Office","\u002Fcompany\u002Foffice","1.company\u002Foffice",{"title":39,"path":40,"stem":41},"Operations","\u002Fcompany\u002Foperations","1.company\u002Foperations",{"title":43,"path":44,"stem":45},"Policies","\u002Fcompany\u002Fpolicies","1.company\u002Fpolicies",{"title":47,"path":48,"stem":49},"Product Strategy","\u002Fcompany\u002Fproduct-strategy","1.company\u002Fproduct-strategy",{"title":51,"path":52,"stem":53,"children":54,"page":63},"Products","\u002Fcompany\u002Fproducts","1.company\u002Fproducts",[55,59],{"title":56,"path":57,"stem":58},"Capability Exchange","\u002Fcompany\u002Fproducts\u002Fcapability-exchange","1.company\u002Fproducts\u002Fcapability-exchange",{"title":60,"path":61,"stem":62},"ESProfiler Platform","\u002Fcompany\u002Fproducts\u002Fesprofiler","1.company\u002Fproducts\u002Fesprofiler",false,{"title":65,"path":66,"stem":67},"Security","\u002Fcompany\u002Fsecurity","1.company\u002Fsecurity",{"title":69,"icon":70,"path":71,"stem":72,"children":73,"page":63},"People Ops","i-lucide-users","\u002Fpeople-ops","2.people-ops",[74,78,82,86,90,94],{"title":75,"path":76,"stem":77},"Compensation","\u002Fpeople-ops\u002Fcompensation","2.people-ops\u002Fcompensation",{"title":79,"path":80,"stem":81},"Education","\u002Fpeople-ops\u002Feducation","2.people-ops\u002Feducation",{"title":83,"path":84,"stem":85},"Expenses","\u002Fpeople-ops\u002Fexpenses","2.people-ops\u002Fexpenses",{"title":87,"path":88,"stem":89},"Holiday & Leave","\u002Fpeople-ops\u002Fleave","2.people-ops\u002Fleave",{"title":91,"path":92,"stem":93},"Onboarding","\u002Fpeople-ops\u002Fonboarding","2.people-ops\u002Fonboarding",{"title":95,"path":96,"stem":97},"Recruitment","\u002Fpeople-ops\u002Frecruitment","2.people-ops\u002Frecruitment",{"title":99,"icon":100,"path":101,"stem":102,"children":103,"page":63},"Engineering","i-lucide-rocket","\u002Fengineering","3.engineering",[104,147,151,171,192,196,204,208,212],{"title":105,"path":106,"stem":107,"children":108,"page":63},"Contributing","\u002Fengineering\u002Fcontributing","3.engineering\u002Fcontributing",[109,113,117,121,125,138],{"title":110,"path":111,"stem":112},"Development Setup","\u002Fengineering\u002Fcontributing\u002Fdevelopment-setup","3.engineering\u002Fcontributing\u002F1.development-setup",{"title":114,"path":115,"stem":116},"Engineering Operations","\u002Fengineering\u002Fcontributing\u002Fengineering-operations","3.engineering\u002Fcontributing\u002F2.engineering-operations",{"title":118,"path":119,"stem":120},"Documentation","\u002Fengineering\u002Fcontributing\u002Fdocumentation","3.engineering\u002Fcontributing\u002F3.documentation",{"title":122,"path":123,"stem":124},"Agentic Coding","\u002Fengineering\u002Fcontributing\u002Fagentic-coding","3.engineering\u002Fcontributing\u002Fagentic-coding",{"title":126,"path":127,"stem":128,"children":129,"page":63},"Back End","\u002Fengineering\u002Fcontributing\u002Fback-end","3.engineering\u002Fcontributing\u002Fback-end",[130,134],{"title":131,"path":132,"stem":133},"API Guidelines","\u002Fengineering\u002Fcontributing\u002Fback-end\u002Fapi-guidelines","3.engineering\u002Fcontributing\u002Fback-end\u002Fapi-guidelines",{"title":135,"path":136,"stem":137},"LLM Prompts & Langfuse Integration","\u002Fengineering\u002Fcontributing\u002Fback-end\u002Fllm-prompts","3.engineering\u002Fcontributing\u002Fback-end\u002Fllm-prompts",{"title":139,"path":140,"stem":141,"children":142,"page":63},"Front End","\u002Fengineering\u002Fcontributing\u002Ffront-end","3.engineering\u002Fcontributing\u002Ffront-end",[143],{"title":144,"path":145,"stem":146},"Testing","\u002Fengineering\u002Fcontributing\u002Ffront-end\u002Ftesting","3.engineering\u002Fcontributing\u002Ffront-end\u002Ftesting",{"title":148,"path":149,"stem":150},"Production Database","\u002Fengineering\u002Fdatabase-connection","3.engineering\u002Fdatabase-connection",{"title":152,"path":153,"stem":154,"children":155},"Deployment","\u002Fengineering\u002Fdeployment","3.engineering\u002Fdeployment",[156,159,163,167],{"title":56,"path":157,"stem":158},"\u002Fengineering\u002Fdeployment\u002Fcapability-exchange","3.engineering\u002Fdeployment\u002Fcapability-exchange",{"title":160,"path":161,"stem":162},"Langfuse Deployment","\u002Fengineering\u002Fdeployment\u002Fecs-langfuse-deployment","3.engineering\u002Fdeployment\u002Fecs-langfuse-deployment",{"title":164,"path":165,"stem":166},"ESP Platform Configuration","\u002Fengineering\u002Fdeployment\u002Fesp-platform-configuration","3.engineering\u002Fdeployment\u002Fesp-platform-configuration",{"title":168,"path":169,"stem":170},"Platform","\u002Fengineering\u002Fdeployment\u002Fplatform","3.engineering\u002Fdeployment\u002Fplatform",{"title":172,"path":173,"stem":174,"children":175,"page":63},"Github","\u002Fengineering\u002Fgithub","3.engineering\u002Fgithub",[176,180,184,188],{"title":177,"path":178,"stem":179},"Packages","\u002Fengineering\u002Fgithub\u002Fpackages","3.engineering\u002Fgithub\u002Fpackages",{"title":181,"path":182,"stem":183},"Personal Access Token","\u002Fengineering\u002Fgithub\u002Fpersonal-access-token","3.engineering\u002Fgithub\u002Fpersonal-access-token",{"title":185,"path":186,"stem":187},"Troubleshooting","\u002Fengineering\u002Fgithub\u002Ftroubleshooting","3.engineering\u002Fgithub\u002Ftroubleshooting",{"title":189,"path":190,"stem":191},"Workflows","\u002Fengineering\u002Fgithub\u002Fworkflows","3.engineering\u002Fgithub\u002Fworkflows",{"title":193,"path":194,"stem":195},"Platform Ops","\u002Fengineering\u002Fplatform-ops","3.engineering\u002Fplatform-ops",{"title":168,"path":197,"stem":198,"children":199,"page":63},"\u002Fengineering\u002Fplatform","3.engineering\u002Fplatform",[200],{"title":201,"path":202,"stem":203},"useAPI","\u002Fengineering\u002Fplatform\u002Fuse-api","3.engineering\u002Fplatform\u002Fuse-api",{"title":205,"path":206,"stem":207},"Project Management","\u002Fengineering\u002Fproject-management","3.engineering\u002Fproject-management",{"title":209,"path":210,"stem":211},"Releases","\u002Fengineering\u002Frelease","3.engineering\u002Frelease",{"title":213,"path":214,"stem":215},"Tools","\u002Fengineering\u002Ftools","3.engineering\u002Ftools",{"title":217,"icon":218,"path":219,"stem":220,"children":221,"page":63},"Design","i-lucide-palette","\u002Fdesign","4.design",[222,226,230,234,238,241],{"title":223,"path":224,"stem":225},"Design Thinking","\u002Fdesign\u002Fdesign-thinking","4.design\u002F1.design-thinking",{"title":227,"path":228,"stem":229},"Figma","\u002Fdesign\u002Ffigma-structure","4.design\u002F2.figma-structure",{"title":231,"path":232,"stem":233},"Design & Development","\u002Fdesign\u002Fdesign-and-development","4.design\u002F3.design-and-development",{"title":235,"path":236,"stem":237},"Branding","\u002Fdesign\u002Fbranding","4.design\u002F4.branding",{"title":213,"path":239,"stem":240},"\u002Fdesign\u002Ftools","4.design\u002F5.tools",{"title":242,"path":243,"stem":244},"Customer Success","\u002Fdesign\u002Fworking-with-customers","4.design\u002F6.working-with-customers",{"title":246,"icon":247,"path":248,"stem":249,"children":250,"page":63},"Sales","i-lucide-dollar-sign","\u002Fsales","4.sales",[251,255],{"title":252,"path":253,"stem":254},"Customer Onboarding","\u002Fsales\u002Fonboarding","4.sales\u002Fonboarding",{"title":256,"path":257,"stem":258},"Sales Tools","\u002Fsales\u002Ftools","4.sales\u002Ftools",{"title":260,"icon":261,"path":262,"stem":263,"children":264,"page":63},"Marketing","i-lucide-book-image","\u002Fmarketing","5.marketing",[265,269,273,276],{"title":266,"path":267,"stem":268},"Content","\u002Fmarketing\u002Fcontent","5.marketing\u002Fcontent",{"title":270,"path":271,"stem":272},"Messaging","\u002Fmarketing\u002Fmessaging","5.marketing\u002Fmessaging",{"title":213,"path":274,"stem":275},"\u002Fmarketing\u002Ftools","5.marketing\u002Ftools",{"title":277,"path":278,"stem":279},"Website","\u002Fmarketing\u002Fwebsite","5.marketing\u002Fwebsite",{"title":281,"icon":282,"path":283,"stem":284,"children":285,"page":63},"AI & Data Ops","i-lucide-database","\u002Fdata-ops","6.data-ops",[286,294,298,323,340],{"title":56,"path":287,"stem":288,"children":289,"page":63},"\u002Fdata-ops\u002Fcapability-exchange","6.data-ops\u002FCapability Exchange",[290],{"title":291,"path":292,"stem":293},"Leaderboard Calculation","\u002Fdata-ops\u002Fcapability-exchange\u002Fleaderboard-calculation","6.data-ops\u002FCapability Exchange\u002Fleaderboard-calculation",{"title":295,"path":296,"stem":297},"Account Portal (CAS)","\u002Fdata-ops\u002Faccount-portal","6.data-ops\u002Faccount-portal",{"title":299,"path":300,"stem":301,"children":302,"page":63},"Data Management","\u002Fdata-ops\u002Fdata-management","6.data-ops\u002Fdata-management",[303,307,311,315,319],{"title":304,"path":305,"stem":306},"Adding Products","\u002Fdata-ops\u002Fdata-management\u002Fadding-products","6.data-ops\u002Fdata-management\u002Fadding-products",{"title":308,"path":309,"stem":310},"Adding Vendors","\u002Fdata-ops\u002Fdata-management\u002Fadding-vendors","6.data-ops\u002Fdata-management\u002Fadding-vendors",{"title":312,"path":313,"stem":314},"Framework Mapping","\u002Fdata-ops\u002Fdata-management\u002Fframework-mapping","6.data-ops\u002Fdata-management\u002Fframework-mapping",{"title":316,"path":317,"stem":318},"Refreshing Vendors","\u002Fdata-ops\u002Fdata-management\u002Frefreshing-vendors","6.data-ops\u002Fdata-management\u002Frefreshing-vendors",{"title":320,"path":321,"stem":322},"Reviewing Draft Vendors","\u002Fdata-ops\u002Fdata-management\u002Freviewing-draft-vendors","6.data-ops\u002Fdata-management\u002Freviewing-draft-vendors",{"title":324,"path":325,"stem":326,"children":327,"page":63},"LLM Ops","\u002Fdata-ops\u002Fllm-ops","6.data-ops\u002Fllm-ops",[328,332,336],{"title":329,"path":330,"stem":331},"Agents","\u002Fdata-ops\u002Fllm-ops\u002Fagents","6.data-ops\u002Fllm-ops\u002F1.agents",{"title":333,"path":334,"stem":335},"ESPi Architecture & Query Flow","\u002Fdata-ops\u002Fllm-ops\u002Fespi-architecture","6.data-ops\u002Fllm-ops\u002F2.espi-architecture",{"title":337,"path":338,"stem":339},"Evaluating Agents","\u002Fdata-ops\u002Fllm-ops\u002Fevaluations","6.data-ops\u002Fllm-ops\u002F3.evaluations",{"title":341,"path":342,"stem":343},"Message Queues","\u002Fdata-ops\u002Fmessage-queues","6.data-ops\u002Fmessage-queues",{"title":345,"path":346,"stem":347},"Glossary","\u002Fglossary","glossary",{"id":349,"title":205,"body":350,"description":1574,"extension":1575,"links":1576,"meta":1577,"navigation":1578,"path":206,"seo":1579,"stem":207,"__hash__":1580},"docs\u002F3.engineering\u002Fproject-management.md",{"type":351,"value":352,"toc":1536},"minimark",[353,358,385,389,393,410,414,419,426,441,444,471,479,484,491,499,504,507,528,541,545,548,557,578,582,586,594,597,644,647,650,654,661,665,668,694,698,701,718,729,733,736,743,747,750,760,763,767,770,776,782,786,795,844,847,850,853,878,882,885,941,945,955,958,961,1005,1013,1017,1020,1050,1054,1057,1067,1076,1080,1083,1086,1119,1122,1128,1170,1174,1177,1227,1230,1255,1258,1293,1297,1343,1346,1355,1358,1364,1368,1377,1380,1414,1425,1434,1438,1441,1445,1448,1453,1456,1460,1465,1469,1479,1483,1486,1490,1493,1504,1514,1518,1521,1524],[354,355,357],"h2",{"id":356},"useful-links","Useful Links",[359,360,361,371,378],"ul",{},[362,363,364],"li",{},[365,366,370],"a",{"href":367,"rel":368},"https:\u002F\u002Fgithub.com\u002Forgs\u002FES-Profiler\u002Fprojects\u002F2",[369],"nofollow","Development Board",[362,372,373],{},[365,374,377],{"href":375,"rel":376},"https:\u002F\u002Fgithub.com\u002Forgs\u002FES-Profiler\u002Fprojects\u002F4",[369],"Product Roadmap",[362,379,380],{},[365,381,384],{"href":382,"rel":383},"https:\u002F\u002Fgithub.com\u002Forgs\u002FES-Profiler\u002Fprojects\u002F8\u002Fviews\u002F1",[369],"Changelog Board",[354,386,388],{"id":387},"responsibilities","Responsibilities",[390,391,392],"p",{},"It is the responsibility of the Chief Product Officer (CPO) to manage and plan the work being conducted by the development team.",[390,394,395,396,400,401,404,405,409],{},"The CPO will account for the number of developers available in a given sprint to define the ",[397,398,399],"strong",{},"capacity",". Each item planned will have an associated number of ",[397,402,403],{},"points"," assigned to it, to define an estimated ",[365,406,408],{"href":407},"#sizing-work-items","sizing",".",[354,411,413],{"id":412},"planning","Planning",[415,416,418],"h3",{"id":417},"scheduling-sprint-planning","Scheduling & Sprint Planning",[390,420,421,422,425],{},"ESProfiler operates with a 2-week sprint cycle. Sprints are used for ",[397,423,424],{},"rough planning and timelines"," — they help us estimate capacity and sketch when work is likely to happen. They are not a hard boundary on what can be worked on.",[390,427,428,429,432,433,436,437,440],{},"The ",[365,430,370],{"href":367,"rel":431},[369]," shows work across ",[397,434,435],{},"all sprints",". Use the ",[397,438,439],{},"Iteration\u002FSprint"," filter on the left of the board to narrow the view when you need a particular sprint.",[390,442,443],{},"Sprints have the following structure:",[359,445,446,449,452,455,466],{},[362,447,448],{},"2-weeks long",[362,450,451],{},"Begin on a Monday",[362,453,454],{},"End on a Friday",[362,456,457,458,462,463],{},"Naming convention will be kept simple with a incremental number system, e.g. ",[459,460,461],"code",{},"Sprint 1",", ",[459,464,465],{},"Sprint 2",[362,467,468,469,409],{},"Capacity defined as a number of ",[365,470,403],{"href":407},[390,472,473,474,478],{},"We estimate capacity as the number of days available given any vacations, bank holidays, etc. that the team will be taking off. Then, given the capacity, we assign a set number of ",[365,475,477],{"href":476},"#sizing-issues","story points"," worth of work to the team, with the aim of completing that within the 2-week window.",[480,481,483],"h4",{"id":482},"sprint-review","Sprint Review",[390,485,486,487,490],{},"In the last days of the sprint, the project manger should keep a close eye on the progress of the planned items, in particular items sat \"In Review\" on the ",[365,488,370],{"href":489},"#development-board",". These should be treated as priority and reviews should be chased.",[390,492,493,494,498],{},"Every other week the Engineering Team conduct a sprint review as part of our ",[365,495,497],{"href":496},"#retrospective","weekly retrospective meeting",". The purpose of this review is to check-in on the progress of the planned items, validate sprint velocity and cover the major plans for the next sprint.",[500,501,503],"h5",{"id":502},"sprint-velocity","Sprint Velocity",[390,505,506],{},"We measure sprint velocity as the number of story points closed out in the two week sprint. The easiest place to find this data is in two places:",[359,508,509,517],{},[362,510,511,516],{},[365,512,515],{"href":513,"rel":514},"https:\u002F\u002Fgithub.com\u002Forgs\u002FES-Profiler\u002Fprojects\u002F2\u002Finsights\u002F2",[369],"Development Board Insights"," - shows a top-level view with a green line for planned items and a purple line for the closed\u002Fcompleted items.",[362,518,519,524,525,527],{},[365,520,523],{"href":521,"rel":522},"https:\u002F\u002Fgithub.com\u002Forgs\u002FES-Profiler\u002Fprojects\u002F2\u002Fviews\u002F1",[369],"Development Board Kanban Board"," - Shows a breakdown of the status of items across all sprints. Use the ",[397,526,439],{}," filter on the left to focus on a particular sprint. At the top of the columns you can see \"Size (Points)\" which will show you the number of story points for each status. This is useful where the first insights board shows X points closed; this view shows that Y may be in review (and therefore indicate how many more we could close with a limited amount of work).",[390,529,530,531,536,537,409],{},"The sprint velocity should be recorded in the ",[365,532,535],{"href":533,"rel":534},"https:\u002F\u002Fdocs.google.com\u002Fdocument\u002Fd\u002F1EfeqJecqEbHrcy9Sb0zSA4bfUdZb7sxEtpBkiIN6FMA\u002F",[369],"retrospective meeting notes",". If the sprint velocity is an outlier to previous sprints then it's worth an investigation on ",[538,539,540],"em",{},"why",[500,542,544],{"id":543},"next-sprint-planning","Next Sprint Planning",[390,546,547],{},"This should be a high-level review of the upcoming items for the next two weeks. A valuable action here is to also mention the higher level items that each member of the team will be owning too.",[390,549,550,551,556],{},"Items planned for the next sprint can be found on the ",[365,552,555],{"href":553,"rel":554},"https:\u002F\u002Fgithub.com\u002Forgs\u002FES-Profiler\u002Fprojects\u002F2\u002Fviews\u002F8",[369],"Next Sprint"," tab of the Development Board on GitHub. In addition to the pre-scheduled items, there will also likely be rollover of items that are unfinished from the current sprint too.",[390,558,559,560,565,566,569,570,573,574,577],{},"At the end of a sprint, use ",[365,561,564],{"href":562,"rel":563},"https:\u002F\u002Fgithub.com\u002Forgs\u002FES-Profiler\u002Fprojects\u002F2\u002Fviews\u002F16",[369],"this view"," to migrate issues that were not started — still marked ",[397,567,568],{},"Todo"," — into the new sprint. The PM may temporarily change the filter on that view to also move some ",[397,571,572],{},"In Development"," or ",[397,575,576],{},"In Design"," items, then restore the default filter afterwards.",[415,579,581],{"id":580},"meetings","Meetings",[480,583,585],{"id":584},"retrospective","Retrospective",[390,587,588,589,593],{},"Every Friday afternoon the Engineering Team will meet for a retrospective to review the week. Team members are encouraged to add items to the ",[365,590,592],{"href":533,"rel":591},[369],"retrospective agenda"," in advance of the meeting.",[390,595,596],{},"The top-level of the retrospective includes:",[359,598,599,605,611,617,623,629],{},[362,600,601,604],{},[397,602,603],{},"Management Updates:"," Any news, updates, or announcements from the management team.",[362,606,607,610],{},[397,608,609],{},"What went bad?:"," List items that went poorly this week. Try not to get into a blame-game. The key focus here is understanding what changes we can make to ensure it doesn't happen again.",[362,612,613,616],{},[397,614,615],{},"What can be improved?:"," List points of friction, something that annoyed you that didn't need too. Ideas for process improvements, automations, etc. Anything that can get the team operating more effectively.",[362,618,619,622],{},[397,620,621],{},"What went well?:"," List items that went well this week. Try to be positive and constructive, but also honest about what worked well. Praise and thank you team mates where it's deserved.",[362,624,625,628],{},[397,626,627],{},"Action Items:"," As the meeting progresses, list any action items that have been agreed upon to address the items that went poorly or could be improved.",[362,630,631,634,635,639,640,409],{},[397,632,633],{},"Sprint Review:"," Our sprint cadence is ",[365,636,638],{"href":637},"#scheduling-sprint-planning","two weeks",", so every other week we will conduct a ",[365,641,643],{"href":642},"#sprint-review","sprint review",[415,645,209],{"id":646},"releases",[390,648,649],{},"TBC",[354,651,653],{"id":652},"work-items-issues","Work Items \u002F Issues",[390,655,656,657,660],{},"GitHub operates on the principle of an issue (formerly known as ",[538,658,659],{},"work items"," when we worked in Jira). These track individual pieces of work to be done by team members. They can represent larger roadmap items as part of product roadmap planning, down to small bugs reported on the platform.",[415,662,664],{"id":663},"types","Types",[390,666,667],{},"Each Issue has a \"type\", which helps us coordinate hierarchy and categorisation of issues.",[359,669,670,676,682,688],{},[362,671,672,675],{},[397,673,674],{},"Initiatives:"," The Strategy. Long-term goals and ideas. These can be new applications, signficant feature sets, or other large-scale projects. These may not have fixed outcomes, and can evolve over time, but help define our long term roadmap.",[362,677,678,681],{},[397,679,680],{},"Story:"," The Delivery. A user-focused and scoped piece of work. These are generally requiring multiple elements to be implemented in order to be completed that would span across multiple projects, e.g. front-end and back-end services.",[362,683,684,687],{},[397,685,686],{},"Tasks:"," The Action. Focussed, sized, actionable items that have a clear, achievable outcome. These are scoped to single projects.",[362,689,690,693],{},[397,691,692],{},"Bugs:"," Issues that are reported by customers or internal users that need to be resolved.",[480,695,697],{"id":696},"stories","Stories",[390,699,700],{},"Stories should contain a user-centric description of a feature or set of features that are to be implemented. They should follow the structure of:",[702,703,704],"blockquote",{},[390,705,706,709,710,713,714,717],{},[397,707,708],{},"As a"," [user persona],\n",[397,711,712],{},"I want to"," [achieve a goal],\n",[397,715,716],{},"So that"," [benefit to the user]",[390,719,720,721,724,725,728],{},"Stories should be unique, the ",[459,722,723],{},"I want"," statement especially should be something that the user ",[538,726,727],{},"cannot"," achieve right now, but can achieve with the Story being implemented.",[480,730,732],{"id":731},"tasks","Tasks",[390,734,735],{},"Tasks should be sized such that they are assignable and actionable by a single person. They are scoped to a single project.",[390,737,738,739,409],{},"Tasks should have enough detail in them so that whomever is assigned can start working on it immediately, and do so without needing additional context or clarification. If additional details are required, questions and comments should be added to the tasks themselves per our ",[365,740,742],{"href":741},"..\u002F..\u002Fcompany\u002Fcommunication#asynchronous-communication","Asynchronous Communication guidelines",[415,744,746],{"id":745},"hierarchy","Hierarchy",[390,748,749],{},"The hierarchy of work items is as follows, where the top-level item is the Initiative, and the bottom-level item is the Task. It is possible to have issues from the lower levels that do not have a parent item, e.g. a Bug report, or small chore task.",[359,751,752,755,757],{},[362,753,754],{},"Initiatives",[362,756,697],{},[362,758,759],{},"Tasks \u002F Bugs",[390,761,762],{},"In GitHub there is no enforcements of hierarchy, you can have Initiatives under other Initiatives, or Tasks directly under Initiatives too. This is fine, but generally speaking a \"smaller\" issue type should not be parent of a \"larger\" issue type, i.e. a Task being the parent of a Story.",[354,764,766],{"id":765},"creating-issues","Creating Issues",[390,768,769],{},"You can click the \"+\" button at the top-right of GitHub's navigation, then select \"New Issue\" in order to create a new Issue, or you can click the \"New Issue\" button in the top-right of the repository you are working in.",[390,771,772,773,775],{},"Issues should provide enough detail that they are actionable. If additional details are required, questions and comments should be added to the tasks themselves per our ",[365,774,742],{"href":741},", not in other communication channels, this ensures that other observers of the item also have access to the information.",[390,777,778,779,781],{},"New issues will automatically be added into the ",[365,780,370],{"href":489}," when created, and assigned the \"Needs Triage\" label so that the project management team can review and plan accordingly.",[415,783,785],{"id":784},"repositories","Repositories",[390,787,788,789,794],{},"On the ",[365,790,793],{"href":791,"rel":792},"https:\u002F\u002Fgithub.com\u002FES-Profiler",[369],"home page"," of the ESProfiler Org, we have added a collection of quick links:",[359,796,797,805,812,820,828,836],{},[362,798,799,804],{},[365,800,803],{"href":801,"rel":802},"https:\u002F\u002Fgithub.com\u002FES-Profiler\u002Fplatform-frontend\u002Fissues\u002Fnew",[369],"+ New Front-End Issue",": Used for tracking an issues for front-end development in any of the projects\u002Fproducts",[362,806,807,804],{},[365,808,811],{"href":809,"rel":810},"https:\u002F\u002Fgithub.com\u002FES-Profiler\u002Fplatform-api\u002Fissues\u002Fnew",[369],"+ New Back-End Issue",[362,813,814,819],{},[365,815,818],{"href":816,"rel":817},"https:\u002F\u002Fgithub.com\u002FES-Profiler\u002Fdesign\u002Fissues\u002Fnew",[369],"+ New Design Issue",": If you need a visual asset created, or there is UX\u002FUI work that needs to be done, please raise it here.",[362,821,822,827],{},[365,823,826],{"href":824,"rel":825},"https:\u002F\u002Fgithub.com\u002FES-Profiler\u002Fproduct-planning\u002Fissues\u002Fnew",[369],"+ New Planning Issue",": Any initiatives or stories that span across both front-end and back-end development resource.",[362,829,830,835],{},[365,831,834],{"href":832,"rel":833},"https:\u002F\u002Fgithub.com\u002FES-Profiler\u002Fadmin\u002Fissues\u002Fnew",[369],"+ New Admin Issue",": Tasks that are not directly code-related, but are still tasks or initiatives that members of the team need to undertake.",[362,837,838,843],{},[365,839,842],{"href":840,"rel":841},"https:\u002F\u002Fgithub.com\u002FES-Profiler\u002Fwebsite\u002Fissues\u002Fnew",[369],"+ New Website Issue",": Whilst our website is managed through Webflow, if you spot problems on the public facing website, please raise them here.",[390,845,846],{},"If the issue you want to raise doesn't fit into any of these buckets, please search for an appropriate repository. If you still can't find an appropriate place, raise it with management.",[415,848,664],{"id":849},"types-1",[390,851,852],{},"Each issue should be assigned one of the following types:",[359,854,855,861,867,872],{},[362,856,857,860],{},[397,858,859],{},"Bug:"," Something isn't working.",[362,862,863,866],{},[397,864,865],{},"Initiative:"," A long-term goal or idea that is not yet scoped or defined.",[362,868,869,871],{},[397,870,680],{}," A user-focused and scoped piece of work that is to be implemented.",[362,873,874,877],{},[397,875,876],{},"Task:"," A focussed, sized, actionable item that has a clear, achievable outcome.",[415,879,881],{"id":880},"labels","Labels",[390,883,884],{},"Issues can be assigned labels to better distinguish items from one another and assist with filtering and prioritisation. The available labels in GitHub are:",[359,886,887,893,899,905,911,917,923,929,935],{},[362,888,889,892],{},[397,890,891],{},"Front-End:"," This task involves front-end development work.",[362,894,895,898],{},[397,896,897],{},"Back-End:"," This task involves back-end development work.",[362,900,901,904],{},[397,902,903],{},"Needs Triage:"," This is a new item, and needs review from the project management team.",[362,906,907,910],{},[397,908,909],{},"Onboarding:"," This task covers work being done as part of onboarding a new customer, e.g. discovery",[362,912,913,916],{},[397,914,915],{},"Data:"," This task involved data-engineering or data-science work",[362,918,919,922],{},[397,920,921],{},"Documentation:"," Improvements or additions to internal or external documentation.",[362,924,925,928],{},[397,926,927],{},"Design:"," Visual or User Experience design task.",[362,930,931,934],{},[397,932,933],{},"Customer Request:"," An issue raised by a customer that needs to be addressed.",[362,936,937,940],{},[397,938,939],{},"Duplicate:"," This issue already has significant overlap with another, and should be closed as a duplicate.",[415,942,944],{"id":943},"sizing-issues","Sizing Issues",[390,946,947,948,950,951,954],{},"Work items are sized in ",[397,949,403],{},". These are ",[538,952,953],{},"estimated"," sizings helped to provide guidance on how long items should take. These help with project planning and ensuring we have planned to our capacity. These do not set deadlines, and should be sized in isolation of other work items.",[390,956,957],{},"Initial sizings will be done at the Story level, then, when individual tasks are created, each task will have an associated number of points assigned to it, to provide a more accurate estimate of the total effort required.",[390,959,960],{},"Sizings should use the following scale:",[359,962,963,969,975,981,987,993,999],{},[362,964,965,968],{},[397,966,967],{},"Tiny - 0.5:"," This is used for small, quick tasks that can be completed less than half a day.",[362,970,971,974],{},[397,972,973],{},"Extra Small - 1:"," Work items that are estimated to take about 1 day.",[362,976,977,980],{},[397,978,979],{},"Small - 2:"," Work items that are estimated to take about 2 days.",[362,982,983,986],{},[397,984,985],{},"Medium - 3:"," Work items that are estimated to take about 3 days.",[362,988,989,992],{},[397,990,991],{},"Large - 5:"," Work items that are estimated to take about 3-5 days.",[362,994,995,998],{},[397,996,997],{},"Extra Large - 8:"," Work items that are estimated to take about 5-8 days.",[362,1000,1001,1004],{},[397,1002,1003],{},"Huge - 13:"," Work items that are estimated to take more than 8 days.",[390,1006,1007,1008,1012],{},"When creating issues, and sizing them, consider our company value, ",[365,1009,1011],{"href":1010},"..\u002Fcompany\u002Fvalues#iteration-iteration-iteration","Iteration, Iteration, Iteration",". We want to make sure work is broken down into smaller, achievable and measurable chunks.",[415,1014,1016],{"id":1015},"prioritisation","Prioritisation",[390,1018,1019],{},"Each issue can be assigned a priority when attached to a project board to help product management and engineers decide where to focus their efforts when looking for new work to do. The priorities used are:",[359,1021,1022,1028,1034,1040],{},[362,1023,1024,1027],{},[397,1025,1026],{},"Critical:"," This is used for urgent changes that require engineering to drop all other tasks. Most commonly this will be associated against platform-breaking problems that need to be resolved as soon as possible.",[362,1029,1030,1033],{},[397,1031,1032],{},"High:"," These items should be front and center in Product Planning. This should be used for pulling attention to the most important items in sprint planning and the backlog.",[362,1035,1036,1039],{},[397,1037,1038],{},"Medium:"," Should be getting into the product sooner rather than later, but there is not an immediate urgency.",[362,1041,1042,1045,1046,1049],{},[397,1043,1044],{},"Low:"," ",[538,1047,1048],{},"(default)"," These are items are up for consideration, and could be addressed at some point, but there is no urgency.",[415,1051,1053],{"id":1052},"assigning-issues","Assigning Issues",[390,1055,1056],{},"The product management team will often assign larger issues to the appropriate team member based on the skills and availability of the team. This will also account for the points sizing of the issue, and the capacity of the team, to ensure a balanced workload across the team.",[390,1058,1059,1060,1063,1064,1066],{},"Items marked ",[397,1061,1062],{},"Up Next"," on the ",[365,1065,370],{"href":489}," are the higher-priority, pressing items for a particular person. If you have items in that status assigned to you, treat those as the next work to pick up.",[390,1068,1069,1070,1075],{},"If, as a developer, you have finished your assigned tasks and are looking for the next item to work on, open the ",[365,1071,1074],{"href":1072,"rel":1073},"https:\u002F\u002Fgithub.com\u002Forgs\u002FES-Profiler\u002Fprojects\u002F2\u002Fviews\u002F15",[369],"Available Work Items"," view on the Development Board. That list is the work to pick up next. If there are still no available tasks, reach out to the product management team.",[354,1077,1079],{"id":1078},"github-projects","GitHub Projects",[390,1081,1082],{},"A very useful feature in GitHub are Projects. They allow us to collate work from across our various repositories into a single view for project management purposes. Each Project can define it's own properties which any assigned issues can then inherit and define.",[390,1084,1085],{},"At ESProfiler, we have three primary Project Boards:",[359,1087,1088,1095,1107],{},[362,1089,1090,1094],{},[365,1091,1093],{"href":375,"rel":1092},[369],"Product Roadmap Board",": Used for tracking the long-term roadmap of the product, focussing on Initiatives.",[362,1096,1097,1100,1101,1103,1104,1106],{},[365,1098,370],{"href":367,"rel":1099},[369],": Used for tracking active development work across ",[397,1102,435],{},". Sprints on this board are for rough planning and timelines; filter by ",[397,1105,439],{}," on the left when you need a particular window.",[362,1108,1109,1113,1114,1118],{},[365,1110,1112],{"href":382,"rel":1111},[369],"Changelog Entries",": Used for tracking items that need a ",[365,1115,1117],{"href":1116},"..\u002Fmarketing\u002Fcontent#changelog","changelog"," entry on the website to advertise a newly added feature.",[415,1120,1093],{"id":1121},"product-roadmap-board",[390,1123,428,1124,1127],{},[365,1125,377],{"href":375,"rel":1126},[369]," adds the following additional properties to an issue:",[359,1129,1130,1141,1152,1158,1164],{},[362,1131,1132,1135,1136,1140],{},[397,1133,1134],{},"Product Pillar:"," We use ",[365,1137,1139],{"href":1138},"..\u002F..\u002Fcompany\u002Fproduct#product-pillars","Product Pillars"," to help categorise development effort and our roadmap.",[362,1142,1143,1146,1147,1151],{},[397,1144,1145],{},"Status:"," The current ",[365,1148,1150],{"href":1149},"#product-roadmap-statuses","status"," of the issue, this is used to track the progress of the issue and is used to determine the next status.",[362,1153,1154,1157],{},[397,1155,1156],{},"Sub-issue Progress:"," This is a built-in GitHub property that allows for tracking of progress on any child issues.",[362,1159,1160,1163],{},[397,1161,1162],{},"Start Date:"," The date this work is scheduled to begin.",[362,1165,1166,1169],{},[397,1167,1168],{},"Target Completion:"," The date we hope to have this issue concluded and deployed into production.",[480,1171,1173],{"id":1172},"product-roadmap-statuses","Product Roadmap Statuses",[390,1175,1176],{},"The available statuses for a given issue are:",[359,1178,1179,1185,1191,1197,1203,1209,1215,1221],{},[362,1180,1181,1184],{},[397,1182,1183],{},"Under Consideration:"," This is a new item that has not been scoped or discussed yet",[362,1186,1187,1190],{},[397,1188,1189],{},"Todo:"," This item has not yet been started",[362,1192,1193,1196],{},[397,1194,1195],{},"Planned:"," This item has been scheduled on the Development Board",[362,1198,1199,1202],{},[397,1200,1201],{},"In Design:"," Design (visual or UX) work on this item has started.",[362,1204,1205,1208],{},[397,1206,1207],{},"In Development:"," Active development effort has started on this work item.",[362,1210,1211,1214],{},[397,1212,1213],{},"On Hold:"," This item is blocked from progress by external factors, e.g. a dependency is not yet complete.",[362,1216,1217,1220],{},[397,1218,1219],{},"Done:"," This item has no outstanding tasks remaining and is completed.",[362,1222,1223,1226],{},[397,1224,1225],{},"Declined:"," Upon consideration from the planning team, this idea was declined, or has been cancelled.",[415,1228,370],{"id":1229},"development-board",[390,1231,428,1232,1235,1236,1238,1239,1242,1243,1246,1247,1249,1250,573,1252,1254],{},[365,1233,370],{"href":367,"rel":1234},[369]," shows work for all sprints. Use the ",[397,1237,439],{}," filter on the left of the board to focus on a particular sprint. The ",[365,1240,1074],{"href":1072,"rel":1241},[369]," view lists items ready for developers to pick up when they are looking for their next piece of work. At the end of a sprint, ",[365,1244,564],{"href":562,"rel":1245},[369]," is used to move unstarted (",[397,1248,568],{},") items into the next sprint; the PM can temporarily widen the filter to include ",[397,1251,572],{},[397,1253,576],{}," items as well.",[390,1256,1257],{},"The board adds the following additional properties to an issue:",[359,1259,1260,1266,1273,1277,1287],{},[362,1261,1262,1265],{},[397,1263,1264],{},"Sprint:"," The assigned Sprint used for rough planning and timelines. It is not a hard constraint on when the work can start.",[362,1267,1268,1146,1270,1151],{},[397,1269,1145],{},[365,1271,1150],{"href":1272},"#development-board-statuses",[362,1274,1275,1157],{},[397,1276,1156],{},[362,1278,1279,1282,1283,1286],{},[397,1280,1281],{},"Size (Points):"," The estimated number of points this issue represents in resource planning. See our sizing ",[365,1284,1285],{"href":407},"guidelines"," for more information.",[362,1288,1289,1292],{},[397,1290,1291],{},"Area:"," Which part\u002Farea of the product does this issue classify under, e.g. Discovery, Universal Framework Mapper, ESPi, Commercials",[480,1294,1296],{"id":1295},"development-board-statuses","Development Board Statuses",[359,1298,1299,1303,1309,1313,1317,1321,1327,1333,1337],{},[362,1300,1301,1190],{},[397,1302,1189],{},[362,1304,1305,1308],{},[397,1306,1307],{},"Up Next:"," A higher-priority, pressing item for a particular person. Use this to signal what they should pick up next among their assigned work.",[362,1310,1311,1214],{},[397,1312,1213],{},[362,1314,1315,1202],{},[397,1316,1201],{},[362,1318,1319,1208],{},[397,1320,1207],{},[362,1322,1323,1326],{},[397,1324,1325],{},"In Review:"," Initial development is complete, and the item is being reviewed for QA.",[362,1328,1329,1332],{},[397,1330,1331],{},"In Staging:"," The solution to this issue is available to test in our Staging environment.",[362,1334,1335,1220],{},[397,1336,1219],{},[362,1338,1339,1342],{},[397,1340,1341],{},"Cancelled:"," This item has been cancelled and is no longer being worked on.",[415,1344,384],{"id":1345},"changelog-board",[390,1347,428,1348,1351,1352,1354],{},[365,1349,384],{"href":382,"rel":1350},[369]," tracks features that have been (or are being) added to the product and need an equivalent ",[365,1353,1117],{"href":1116}," entry on our website.",[390,1356,1357],{},"Changelog entries are how we advertise new features to customers and the wider audience. When a new feature is shipped, the corresponding work item should be added to this board so that a concise changelog post can be published — ideally with screenshots, and focussed on the value being offered to users.",[390,1359,1360,1361,1363],{},"This board is separate from the ",[365,1362,370],{"href":489},". Completing the engineering work is not the same as advertising it; items stay on the Changelog Board until the website entry has been written and published.",[354,1365,1367],{"id":1366},"branching-strategy","Branching Strategy",[390,1369,1370,1375],{},[1371,1372],"img",{"alt":1373,"src":1374},"ESProfiler branching strategy","\u002Fimages\u002Fengineering\u002Fproject-mgmt\u002Fbranching-strategy.png",[538,1376,1373],{},[390,1378,1379],{},"When working on a new feature or bug fix on a project you should use the following branching strategy to keep consistency with the development practices of the team:",[359,1381,1382,1389,1399,1409],{},[362,1383,1384,1385,1388],{},"Create a new branch from the ",[459,1386,1387],{},"main"," branch.",[362,1390,1391,1392,573,1395,1398],{},"Use the issue number as the prefix for the branch name, e.g. ",[459,1393,1394],{},"1234-add-new-feature",[459,1396,1397],{},"1234-fix-the-bug",". The text should be a very top-level summary of the changes you are making, 2-3 words at most.",[362,1400,1401,1402,1404,1405,409],{},"You can then create a pull request against the ",[459,1403,1387],{}," branch following the guidance ",[365,1406,1408],{"href":1407},"#create-pull-requests","below",[362,1410,1411,1412,409],{},"For larger features, you are advised to break down your work into multiple PRs for easier reviewing. For this, you can branch from your own feature-branch, and open PRs against that feature branch. Then once all reviewed and signed-off, open a PR against ",[459,1413,1387],{},[390,1415,1416,1417,1421,1422,1424],{},"You can run ",[365,1418,1420],{"href":1419},".\u002Fcontributing\u002Fdevelopment-setup","\"DevEnvPro\""," in order to pull from dependent branches you need, e.g. the ",[459,1423,1387],{}," branch, or in-development branches for the back-end, if you're working from the front-end.",[390,1426,1427,1430,1431,1433],{},[365,1428,209],{"href":1429},".\u002Freleases"," are then conducted against the ",[459,1432,1387],{}," branch, and utilising Git tagging to cut the release.",[354,1435,1437],{"id":1436},"closing-issues","Closing Issues",[390,1439,1440],{},"Issues are considered completed when transitioned to the \"Done\" status and\u002For closed. For development tasks issues should have a 1:1 relationship with a Pull Request.",[415,1442,1444],{"id":1443},"linking-a-pull-request","Linking a Pull Request",[390,1446,1447],{},"When you open a Pull Request in GitHub, you should always link it to the corresponding issue in GitHub. This can be done by adding the following text to the Pull Request description:",[702,1449,1450],{},[390,1451,1452],{},"Closes ESPX-1234",[390,1454,1455],{},"If you want to simply link or reference an issue without closing the respective issue, you can just paste in the URL link to the issue. This will make a shortcut link, but not close the connected issue automatically.",[354,1457,1459],{"id":1458},"create-pull-requests","Create Pull Requests",[390,1461,1462,1463,1388],{},"Pull Requests should be marked as \"Draft\" until the work item, and it's dependencies are complete and ready to go. A Pull Request should only be considered \"Ready for Review\" when it can be merged and pushed to the ",[459,1464,1387],{},[415,1466,1468],{"id":1467},"titles","Titles",[390,1470,1471,1472,1475,1476,409],{},"Pull Reuest title should offer a one line summary of the changes made in the Pull Request. This should be a concise and to the point description of the changes made. Pull Request titles are automatically used in our generated release notes, so, at a glance should be a good summary of the changes made. There is ",[397,1473,1474],{},"no need"," to include reference to issues or work items in the title, e.g. ",[459,1477,1478],{},"#20 These are the changes I made",[415,1480,1482],{"id":1481},"descriptions","Descriptions",[390,1484,1485],{},"Pull Request descriptions should provide a more detailed description of the changes made. This should include any additional context or information, especially for the assigned reviewer of the Pull Request to understand the changes made and the rationale behind them.",[480,1487,1489],{"id":1488},"linking-closing-issues","Linking & Closing Issues",[390,1491,1492],{},"Where possible, descriptions should include links to any relevant issues or work items that are related to the changes made. You should use the following phrases where appropriate:",[359,1494,1495,1498,1501],{},[362,1496,1497],{},"\"Closes #20\" - This will automatically close the issue when the Pull Request is merged.",[362,1499,1500],{},"\"Fixes #20\" - This will automatically close the issue when the Pull Request is merged.",[362,1502,1503],{},"\"Part of #20\" - This will create a link to the relevant issue, but not close it when this PR is merged.",[390,1505,1506,1507,1510,1511,409],{},"You can use ",[459,1508,1509],{},"#XXX"," syntax if the issue is in the same repo as the PR, otherwise, you can just paste in the full URl pointing to the relevant issue, e.g. ",[459,1512,1513],{},"Closes \u003CURL to Issue>",[415,1515,1517],{"id":1516},"sizing-pull-requests","Sizing Pull Requests",[390,1519,1520],{},"In the majority of cases, you do not need to \"Assign\" or add a sizing to a Pull Request. By linking to an issue, that is handled automatically.",[390,1522,1523],{},"However, for adhoc, often smaller pieces of work, where you may not have an issue to attach, you can instead do the following steps in order to attach story points to the work you have completed:",[1525,1526,1527,1530,1533],"ol",{},[362,1528,1529],{},"Assign the PR to yourself",[362,1531,1532],{},"Add the \"Development Board\" project",[362,1534,1535],{},"Set the current iteration\u002Fsprint and assign an appropriate sizing in the Development Board panel.",{"title":1537,"searchDepth":1538,"depth":1538,"links":1539},"",2,[1540,1541,1542,1548,1552,1560,1565,1566,1569],{"id":356,"depth":1538,"text":357},{"id":387,"depth":1538,"text":388},{"id":412,"depth":1538,"text":413,"children":1543},[1544,1546,1547],{"id":417,"depth":1545,"text":418},3,{"id":580,"depth":1545,"text":581},{"id":646,"depth":1545,"text":209},{"id":652,"depth":1538,"text":653,"children":1549},[1550,1551],{"id":663,"depth":1545,"text":664},{"id":745,"depth":1545,"text":746},{"id":765,"depth":1538,"text":766,"children":1553},[1554,1555,1556,1557,1558,1559],{"id":784,"depth":1545,"text":785},{"id":849,"depth":1545,"text":664},{"id":880,"depth":1545,"text":881},{"id":943,"depth":1545,"text":944},{"id":1015,"depth":1545,"text":1016},{"id":1052,"depth":1545,"text":1053},{"id":1078,"depth":1538,"text":1079,"children":1561},[1562,1563,1564],{"id":1121,"depth":1545,"text":1093},{"id":1229,"depth":1545,"text":370},{"id":1345,"depth":1545,"text":384},{"id":1366,"depth":1538,"text":1367},{"id":1436,"depth":1538,"text":1437,"children":1567},[1568],{"id":1443,"depth":1545,"text":1444},{"id":1458,"depth":1538,"text":1459,"children":1570},[1571,1572,1573],{"id":1467,"depth":1545,"text":1468},{"id":1481,"depth":1545,"text":1482},{"id":1516,"depth":1545,"text":1517},"A comprehensive overview of project management processes and procedures that guide product development at ESProfiler.","md",null,{},true,{"title":205,"description":1574},"DvP7rpi-pMMylSrSKVQABC5axbNCX4RzPacAI_Ggtrw",[1582,1584],{"title":201,"path":202,"stem":203,"description":1583,"children":-1},"Guide to defining API endpoints, Data Models, Query Models, and using the reactive useAPI composable in the ES-Profiler platform frontend.",{"title":209,"path":210,"stem":211,"description":1585,"children":-1},"This guide will walk you through the process of releasing a new version of the backend services or frontend applications and websites.",1789726606043]