Difference between revisions of "HowTo:Organize UBIK Development"
(→Dividing the project into tickets) |
m (→An Epic for every topic) |
||
(7 intermediate revisions by the same user not shown) | |||
Line 7: | Line 7: | ||
<!-- DO NOT REMOVE THIS -->{{Template:HowTo/Begin}}<!-- DO NOT REMOVE THIS --> | <!-- DO NOT REMOVE THIS -->{{Template:HowTo/Begin}}<!-- DO NOT REMOVE THIS --> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
= Project Structure Plan = | = Project Structure Plan = | ||
Line 26: | Line 16: | ||
Tickets can be managed with any Issue Tracking or Project Management system. | Tickets can be managed with any Issue Tracking or Project Management system. | ||
− | ==== An Epic for every | + | ==== An Epic for every work package==== |
− | The project should be segmented into Epics first. An Epic is a large work package corresponding to a topic or an abstract use-case. | + | The project should be segmented into Epics first. An Epic is a large work package corresponding to a topic or an abstract use-case, with a time-limited scope. |
For example, Operator Rounds (using the mobile application to do maintenance in a plant) are a classical use-case that can be managed with {{UBIK}}. | For example, Operator Rounds (using the mobile application to do maintenance in a plant) are a classical use-case that can be managed with {{UBIK}}. | ||
+ | However, for the sake of project management, it makes sense to make sure Epics have a limited temporal scope as well. This means that they should be doable within a short period in time. The benefit of this is that you can collect moments of success more frequently, and you can sell those to the customer, too. | ||
+ | For example, you could divide the Operator Rounds Epic into two stages, Operator Rounds I and Operator Rounds II. | ||
+ | Further, you can try to create elementary work packages that do not have any dependency in the middle, but only as a whole. This way you can avoid an Epic being blocked in the middle of its implementation, making it easier to deal with if it is blocked. Also, this proceeding allows you to model dependencies more clearly and plan accordingly. | ||
+ | |||
+ | [[Category:Best Practices (internal)|Organize UBIK Development]] | ||
+ | [[Category:How-To|Organize UBIK Development]] | ||
+ | [[Category:Resources (internal)|Organize UBIK Development]] | ||
==== A Feature for every requirement ==== | ==== A Feature for every requirement ==== | ||
A use-case consists of multiple Features, i.e., functional parts or requirements for that use-case. | A use-case consists of multiple Features, i.e., functional parts or requirements for that use-case. | ||
In the example of Operator Rounds, one such Feature could be the basic data model, or presentation of {{UBIK}} MRO work packages on the mobile client. | In the example of Operator Rounds, one such Feature could be the basic data model, or presentation of {{UBIK}} MRO work packages on the mobile client. | ||
+ | The main idea of a Feature is to create a work package on a level I can still discuss with the customer, because it is not too technical or detailed. | ||
+ | |||
+ | [[Category:Best Practices (internal)|Organize UBIK Development]] | ||
+ | [[Category:How-To|Organize UBIK Development]] | ||
+ | [[Category:Resources (internal)|Organize UBIK Development]] | ||
==== A User Story for every task group ==== | ==== A User Story for every task group ==== | ||
− | Every Feature consists of one or many User Stories | + | Every Feature consists of one or many User Stories. |
+ | A User Story is a task that can be implemented within one or two weeks (it can be split up in sub-tasks if necessary). | ||
+ | While this is the perfect scope for a project engineer to implement, it might be too technical to discuss with the customer, and that's okay, because we have the Feature for that. | ||
+ | |||
A User Story should be formulated using the following pattern: | A User Story should be formulated using the following pattern: | ||
"As a <user>, I want <requirement>, because <reason>." | "As a <user>, I want <requirement>, because <reason>." | ||
+ | This can be also reflected in the Feature ticket, mostly. | ||
− | + | For most features, we need to do several steps: | |
+ | * Find out the requirements | ||
+ | * Make a functional design (FD) | ||
+ | * Make a technical design (TD) | ||
+ | * Do the implementation and testing | ||
− | + | Hence, for the Feature "Presentation of MRO objects on the client", there could be multiple successive stories like: | |
+ | * Req/FD: MRO on the client | ||
+ | * TD: MRO on the client | ||
+ | * Impl.: ACM and Views for MRO on the client | ||
+ | * Impl.: Client UI customizing for work packages | ||
+ | All of them are rather technical, but all are necessary to implement the Feature. | ||
Every User Story requires a definition-of-done. Those are the acceptance criteria, which can be used to decide whether the Story was done or not. One of these acceptance criteria should always be the peer review, i.e., going over the results with a colleague to check for completeness and optimization on a constructive basis. | Every User Story requires a definition-of-done. Those are the acceptance criteria, which can be used to decide whether the Story was done or not. One of these acceptance criteria should always be the peer review, i.e., going over the results with a colleague to check for completeness and optimization on a constructive basis. | ||
Line 50: | Line 65: | ||
[[Category:How-To|Organize UBIK Development]] | [[Category:How-To|Organize UBIK Development]] | ||
[[Category:Resources (internal)|Organize UBIK Development]] | [[Category:Resources (internal)|Organize UBIK Development]] | ||
+ | |||
+ | = Functional Spec & Effort Estimation = | ||
+ | |||
+ | Before working on the implementation of a {{UBIK}} project, it is essential to have a very good understanding of the effort involved. {{UBIK}} projects can be highly complex and much depends on the customer's requirements and a common agreement on a proposed solution. | ||
+ | For the sake of a successful project, a very clear functional specification is paramount. Without it, it is impossible to estimate the effort, and thus the costs, of a {{UBIK}} project adequately. | ||
+ | Also, the effort should not be underestimated; unknown factors are guaranteed to distort even the best theoretical plan into a more complex reality. | ||
+ | Without an adequate time frame and budget, the climate in the project will become one of stress and conflict with the customer. | ||
+ | We recommend PERT as a method for effort estimation. | ||
+ | |||
+ | Effort can be estimated both on task-level and on more abstract levels: For every task, three estimates are provided by the team (optimistic, most likely, and pessimistic), and for every milestone, we can calculate respective sums from the individual tasks. Then, we can use PERT for the final estimate. | ||
= Requirement Supply Chain = | = Requirement Supply Chain = | ||
Line 65: | Line 90: | ||
In general, we recommend adding the supply chain part(s) of a story to the title as a prefix. E.g., "Req.: Story A". | In general, we recommend adding the supply chain part(s) of a story to the title as a prefix. E.g., "Req.: Story A". | ||
− | |||
− | |||
− | |||
− | |||
= Staging & Manual Test Plans = | = Staging & Manual Test Plans = | ||
Line 92: | Line 113: | ||
* Use-Cases: Provide an overview about the functional side of the project | * Use-Cases: Provide an overview about the functional side of the project | ||
* Data Model: Provide an overiew of the data model | * Data Model: Provide an overiew of the data model | ||
− | * | + | * Architecture: A big picture of the customizing architecture. |
+ | ** Top-level topology: E.g., are there multiple sites? What products and client applications are used? Are there interfaces to other systems? | ||
+ | ** Custom code: E.g., is there a plugin, and what does it do? Are any meta classes customized, and to do what? | ||
* Infrastructure: Servers, URLs, safe credentials storage (e.g., KeePass), etc. for the respective environment. | * Infrastructure: Servers, URLs, safe credentials storage (e.g., KeePass), etc. for the respective environment. | ||
** Development Environment: Infrastructure details about the dev environment. | ** Development Environment: Infrastructure details about the dev environment. | ||
** Integration Environment: Infrastructure details about the int environment. | ** Integration Environment: Infrastructure details about the int environment. | ||
** Production Environment: Infrastructure details about the prod environment. | ** Production Environment: Infrastructure details about the prod environment. | ||
− | + | ||
+ | |||
+ | |||
+ | |||
+ | |||
= Code Management = | = Code Management = | ||
Line 118: | Line 145: | ||
==See also== | ==See also== | ||
* [[HowTo:Transfer_Meta_Data_between_Environments]] | * [[HowTo:Transfer_Meta_Data_between_Environments]] | ||
+ | * [[HowTo:Design_a_Customizing]] | ||
[[Category:Best Practices (internal)|Organize UBIK Development]] | [[Category:Best Practices (internal)|Organize UBIK Development]] | ||
[[Category:How-To|Organize UBIK Development]] | [[Category:How-To|Organize UBIK Development]] | ||
[[Category:Resources (internal)|Organize UBIK Development]] | [[Category:Resources (internal)|Organize UBIK Development]] |
Latest revision as of 11:16, 13 November 2023
In this article, we aim to provide a guide and best practices for organizing the development of a UBIK® project.
We're going to assume that the customer's requirements were already collected and use-cases have been identified. These definitions are the basis for more detailed concepts to be developed throughout the project.
For customizing UBIK®, we recommend to use the following strategy.