diff --git a/project management/css/remark.css b/project management/css/remark.css index 28f573f15459596ac4fe29baefac7e245bbb7b28..e391beb14a1899f980a64befc9c984ccc7762a71 100644 --- a/project management/css/remark.css +++ b/project management/css/remark.css @@ -53,4 +53,193 @@ blockquote > *:last-child { .color-red { color: red -} \ No newline at end of file +} + +.ml-2 { + margin-left: 2em +} + +.inverted { + background-color: black; + color: white; +} + +.pyro > .before, .pyro > .after { + position: absolute; + width: 5px; + height: 5px; + border-radius: 50%; + box-shadow: -120px -218.66667px blue, 248px -16.66667px #00ff84, 190px 16.33333px #002bff, -113px -308.66667px #ff009d, -109px -287.66667px #ffb300, -50px -313.66667px #ff006e, 226px -31.66667px #ff4000, 180px -351.66667px #ff00d0, -12px -338.66667px #00f6ff, 220px -388.66667px #99ff00, -69px -27.66667px #ff0400, -111px -339.66667px #6200ff, 155px -237.66667px #00ddff, -152px -380.66667px #00ffd0, -50px -37.66667px #00ffdd, -95px -175.66667px #a6ff00, -88px 10.33333px #0d00ff, 112px -309.66667px #005eff, 69px -415.66667px #ff00a6, 168px -100.66667px #ff004c, -244px 24.33333px #ff6600, 97px -325.66667px #ff0066, -211px -182.66667px #00ffa2, 236px -126.66667px #b700ff, 140px -196.66667px #9000ff, 125px -175.66667px #00bbff, 118px -381.66667px #ff002f, 144px -111.66667px #ffae00, 36px -78.66667px #f600ff, -63px -196.66667px #c800ff, -218px -227.66667px #d4ff00, -134px -377.66667px #ea00ff, -36px -412.66667px #ff00d4, 209px -106.66667px #00fff2, 91px -278.66667px #000dff, -22px -191.66667px #9dff00, 139px -392.66667px #a6ff00, 56px -2.66667px #0099ff, -156px -276.66667px #ea00ff, -163px -233.66667px #00fffb, -238px -346.66667px #00ff73, 62px -363.66667px #0088ff, 244px -170.66667px #0062ff, 224px -142.66667px #b300ff, 141px -208.66667px #9000ff, 211px -285.66667px #ff6600, 181px -128.66667px #1e00ff, 90px -123.66667px #c800ff, 189px 70.33333px #00ffc8, -18px -383.66667px #00ff33, 100px -6.66667px #ff008c; + -moz-animation: 1s bang ease-out infinite backwards, 1s gravity ease-in infinite backwards, 5s position linear infinite backwards; + -webkit-animation: 1s bang ease-out infinite backwards, 1s gravity ease-in infinite backwards, 5s position linear infinite backwards; + -o-animation: 1s bang ease-out infinite backwards, 1s gravity ease-in infinite backwards, 5s position linear infinite backwards; + -ms-animation: 1s bang ease-out infinite backwards, 1s gravity ease-in infinite backwards, 5s position linear infinite backwards; + animation: 1s bang ease-out infinite backwards, 1s gravity ease-in infinite backwards, 5s position linear infinite backwards; } + +.pyro > .after { + -moz-animation-delay: 1.25s, 1.25s, 1.25s; + -webkit-animation-delay: 1.25s, 1.25s, 1.25s; + -o-animation-delay: 1.25s, 1.25s, 1.25s; + -ms-animation-delay: 1.25s, 1.25s, 1.25s; + animation-delay: 1.25s, 1.25s, 1.25s; + -moz-animation-duration: 1.25s, 1.25s, 6.25s; + -webkit-animation-duration: 1.25s, 1.25s, 6.25s; + -o-animation-duration: 1.25s, 1.25s, 6.25s; + -ms-animation-duration: 1.25s, 1.25s, 6.25s; + animation-duration: 1.25s, 1.25s, 6.25s; } + +@-webkit-keyframes bang { + from { + box-shadow: 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white; } } +@-moz-keyframes bang { + from { + box-shadow: 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white; } } +@-o-keyframes bang { + from { + box-shadow: 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white; } } +@-ms-keyframes bang { + from { + box-shadow: 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white; } } +@keyframes bang { + from { + box-shadow: 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white, 0 0 white; } } +@-webkit-keyframes gravity { + to { + transform: translateY(200px); + -moz-transform: translateY(200px); + -webkit-transform: translateY(200px); + -o-transform: translateY(200px); + -ms-transform: translateY(200px); + opacity: 0; } } +@-moz-keyframes gravity { + to { + transform: translateY(200px); + -moz-transform: translateY(200px); + -webkit-transform: translateY(200px); + -o-transform: translateY(200px); + -ms-transform: translateY(200px); + opacity: 0; } } +@-o-keyframes gravity { + to { + transform: translateY(200px); + -moz-transform: translateY(200px); + -webkit-transform: translateY(200px); + -o-transform: translateY(200px); + -ms-transform: translateY(200px); + opacity: 0; } } +@-ms-keyframes gravity { + to { + transform: translateY(200px); + -moz-transform: translateY(200px); + -webkit-transform: translateY(200px); + -o-transform: translateY(200px); + -ms-transform: translateY(200px); + opacity: 0; } } +@keyframes gravity { + to { + transform: translateY(200px); + -moz-transform: translateY(200px); + -webkit-transform: translateY(200px); + -o-transform: translateY(200px); + -ms-transform: translateY(200px); + opacity: 0; } } +@-webkit-keyframes position { + 0%, 19.9% { + margin-top: 10%; + margin-left: 40%; } + + 20%, 39.9% { + margin-top: 40%; + margin-left: 30%; } + + 40%, 59.9% { + margin-top: 20%; + margin-left: 70%; } + + 60%, 79.9% { + margin-top: 30%; + margin-left: 20%; } + + 80%, 99.9% { + margin-top: 30%; + margin-left: 80%; } } +@-moz-keyframes position { + 0%, 19.9% { + margin-top: 10%; + margin-left: 40%; } + + 20%, 39.9% { + margin-top: 40%; + margin-left: 30%; } + + 40%, 59.9% { + margin-top: 20%; + margin-left: 70%; } + + 60%, 79.9% { + margin-top: 30%; + margin-left: 20%; } + + 80%, 99.9% { + margin-top: 30%; + margin-left: 80%; } } +@-o-keyframes position { + 0%, 19.9% { + margin-top: 10%; + margin-left: 40%; } + + 20%, 39.9% { + margin-top: 40%; + margin-left: 30%; } + + 40%, 59.9% { + margin-top: 20%; + margin-left: 70%; } + + 60%, 79.9% { + margin-top: 30%; + margin-left: 20%; } + + 80%, 99.9% { + margin-top: 30%; + margin-left: 80%; } } +@-ms-keyframes position { + 0%, 19.9% { + margin-top: 10%; + margin-left: 40%; } + + 20%, 39.9% { + margin-top: 40%; + margin-left: 30%; } + + 40%, 59.9% { + margin-top: 20%; + margin-left: 70%; } + + 60%, 79.9% { + margin-top: 30%; + margin-left: 20%; } + + 80%, 99.9% { + margin-top: 30%; + margin-left: 80%; } } +@keyframes position { + 0%, 19.9% { + margin-top: 10%; + margin-left: 40%; } + + 20%, 39.9% { + margin-top: 40%; + margin-left: 30%; } + + 40%, 59.9% { + margin-top: 20%; + margin-left: 70%; } + + 60%, 79.9% { + margin-top: 30%; + margin-left: 20%; } + + 80%, 99.9% { + margin-top: 30%; + margin-left: 80%; } } \ No newline at end of file diff --git a/project management/illustrations.bmpr b/project management/illustrations.bmpr index 140405f02e0c3f2fd24bfe2f4e2a8aabddc6450e..019fecfde35b33c40220fcb6ddcfe815e1fd310f 100644 Binary files a/project management/illustrations.bmpr and b/project management/illustrations.bmpr differ diff --git a/project management/images/effort_increase_with_new_feature.png b/project management/images/effort_increase_with_new_feature.png new file mode 100644 index 0000000000000000000000000000000000000000..a8eec14cd7b7aaf42af34c5b7b1ff06050cc9dee Binary files /dev/null and b/project management/images/effort_increase_with_new_feature.png differ diff --git a/project management/images/effort_increases_exponential.png b/project management/images/effort_increases_exponential.png index 3583b2e15f915f7788a2a5a2c8fe9b8ac06c224b..a3c0cda52ffd2c7bab03e746c11432629d440df4 100644 Binary files a/project management/images/effort_increases_exponential.png and b/project management/images/effort_increases_exponential.png differ diff --git a/project management/project management.html b/project management/project management.html index 7fa4eea37e933b6a97c46731bf6172d65dbaa625..4a03ac9b5107e242486efa427f734e66df235ea1 100644 --- a/project management/project management.html +++ b/project management/project management.html @@ -44,7 +44,7 @@ Nearly universally referenced issues: - Inaccurate estimates - Unexpected risks -[Source 1](https://www.atspoke.com/blog/it/reasons-for-it-project-failure/), [Source 2](https://www.orellfuessli.ch/shop/home/artikeldetails/ID39325699.html), PMO Survey 2020 +[Source 1](https://www.atspoke.com/blog/it/reasons-for-it-project-failure/), [Source 2](https://www.orellfuessli.ch/shop/home/artikeldetails/ID39325699.html), [Source 4](https://www.gartner.com/en/documents/2892218), PMO Survey 2020 <img src="images/project-fail-reasons.png" width="100%"> @@ -158,13 +158,22 @@ Projects: https://famoser.ch/ --- -# Targets of this course +# This course -**Know what makes a good project.** High-level view about a suitable environment for you and your project. +Parts: +- **Know what makes a good project**: High-level view about a suitable environment for your project. +- **Plan a successful project**: How to create a convincing project plan. +- **Execute a successful project**: How to execute & finish your project. -**Plan a successful project.** How to create a convincing and actionable project plan. - -**Execute a successful project.** Concrete resources how to execute and finish a project. +Targets: +- You can detect favorable environments for projects +- You feel confident estimating features +- You can create a realistic project schedule +- You can finish a project + - on time + - within budget + - within schedule + - which satisfies customer expectations. --- @@ -207,7 +216,7 @@ stakeholder(s): - have realistic expectations? - personally support with time and money? -> E-Learning Platform +> E-Learning Platform. --- @@ -240,12 +249,15 @@ class: center, middle Steps: - Understand problem to be solved +- Develop solution concepts - Formulate requirements - Estimate cost, reward - Schedule implementation - Analyse risks - Feedback & repeat +> Target: Avoid as much work as possible while still solving the problem. + Reduced uncertainty as much as possible? Contract with customer & start! @@ -261,40 +273,112 @@ Listen carefully: - Proposed solutions - Tedious tasks (=sucks) +You task is to solve their *problem*. + --- # Formulate requirements -Decompose concept to suitable abstraction level. - -functional & non-function requirements +Decompose concept to suitable abstraction level. +Do not neglect non-functional requirements (performance, usability, ...). -YAGNI: Effort increases in O(exponential) due to complexity. +YAGNI: You Ain't Gonna Need It. +**Effort increases in O(exponential) due to complexity.** (*baseless claim alert*) + +<img src="images/effort_increases_exponential.png" width="30%"> +<img class="ml-2" src="images/effort_increase_with_new_feature.png" width="30%"> -<img src="images/effort_increases_exponential.png" width="50%"> --- # Estimate requirements -Cannot predict the future -> how to estimate cost? -Can estimate relative complexity! +Cannot predict the future, but **can estimate relative complexity**. +Technology / mastery independent! + +Tips: +- Use coarse-grained numbers (Fibonaccy; 1 1 2 3 5 8 13 ...) +- With more unknowns, tend to increase complexity + +Same for rewards. +Reward / Complexity = Payoff. + +| Feature | Complexity | Reward | Payoff | +| :------ | ---------: | -----: | -----: | +| Sign-Up | 8 | 5 | 0.625 | +| Confirm E-Mail | | | | +| Login | | | | +| Password Recover | | | | +| Add Additional E-Mails | | | | + -technology / mastery independent +--- + +# Estimate requirements -Tipps: -- Use coarse-grained numbers (Fibonaccy) +Cannot predict the future, but **can estimate relative complexity**. +Technology / mastery independent! + +Tips: +- Use coarse-grained numbers (Fibonaccy; 1 1 2 3 5 8 13 ...) - With more unknowns, tend to increase complexity Same for rewards. +Reward / Complexity = Payoff. + + +| Feature | Complexity | Reward | Payoff | +| :------ | ---------: | -----: | -----: | +| Sign-Up | 8 | 5 | 0.625 | +| Confirm E-Mail | 13 | 3 | 0.23 | +| Login | 5 | 8 | 1.6 | +| Password Recover | 21 | 5 | 0.24 | +| Add Additional E-Mails | 21 | 3 | 0.14 | + --- # Schedule implementation -Combine features into sensible packages. -Resolve dependencies. -Decide upon milestones (properly spaces, measurable). +Convert complexity into implementation effort. + +| Feature | Complexity | Expected | Measured | +| :------ | ---------: | -------: | -------: | +| Sign-Up | 8 | - | 3h | +| Confirm E-Mail | 13 | 5h | ? | +| Login | 5 | 2h | ? | +| Password Recover | 21 | 8h | ? | +| Add Additional E-Mails | 21 | 8h | ? | + +Multiplication factors: +- Technology (low for established, high for often changing) +- Complexity (increasing factor with more total features) +- Special requirements (translatable, performance, ...) + +> 26h \* 1.1 (PHP only) \* 1.1 (translatable) = 31.5h +> 26h \* 1.5 (PHP + JavaScript frontend) \* 1.1 (translatable) = 43h + +--- + +# Schedule implementation + +Combine functionality into **features** (=sensible packages). +Resolve dependencies & reduce uncertainty. + +> Login 31.5h +> Submit vote 23h +> Electionsmanagement 10h +> Candidatemanagement 16.5h +> Vote count 8.5h + +**Milestones** should be properly spaced & measurable. + +> 1. Deployment of skeleton to server +> 2. Public voting area +> 3. Administration area +> 4. Feedback of trial election processed + + --- @@ -302,9 +386,9 @@ Decide upon milestones (properly spaces, measurable). For overall project & for each feature collect risks. -> Users prefer different tool -> Team-member quits project before completion -> Server too slow for estimated data size +> Compromise of election data +> Users reject tool due to security reasons +> Server deployment too constrained For each risk: - Avoid: Eliminate the risk (avoid feature / use different solutions) @@ -317,102 +401,126 @@ For each risk: # Contract -Formulate a constract about the project. +Formulate a contract. Content: - Vision ("Sales-pitch") - Requirements on suitable abstraction level - Schedule & Milestones - Price & Payment agreements -- Legal: Intellectual Property, Bugfixing, Maintenance -- (Maintenance for 10% - 20% yearly effort) + +Advanced: +- Recommend options based on payoff +- Maintenance for 10% - 20% yearly effort +- Legal: Intellectual Property, Bugfixing Courses: - [E-Business Recht](http://www.vvz.ethz.ch/Vorlesungsverzeichnis/lerneinheit.view?lerneinheitId=139975&semkez=2020W) (HS) - [Contract Design](http://www.vvz.ethz.ch/Vorlesungsverzeichnis/lerneinheit.view?lerneinheitId=141671&semkez=2020W) (HS) -- [Introduction into Negotiaton](http://www.vvz.ethz.ch/Vorlesungsverzeichnis/lerneinheit.view?lerneinheitId=135075&semkez=2020S) (FS) +- [Introduction into Negotiation](http://www.vvz.ethz.ch/Vorlesungsverzeichnis/lerneinheit.view?lerneinheitId=135075&semkez=2020S) (FS) -**Up until now, an estimated 10 - 30% of total project effort has been spend!** +--- -Do not work for free: For bigger projects, sell requirements engineering or proof of concept. +# Value of a good plan ---- +**Up until now, an estimated 10 - 30% of total project effort has been spend!** +Is it worth it? -class: center, middle +Yes! +- Align expectations (cost, schedule, result) +- Decrease cost by not implementing lower-value features +- Decrease risk of project failure -# Execute a successful project +It feels good: +- Make promises you can keep +- Customers / Users will be satisfied (and so will you!) +- You get done, get payed and move on. -<i>No surprises.</i> +*Hint: You can also sell this work as "requirements engineering" or "proof of concept"*. --- -# Review progress & risks +class: center, middle + +# Execute a successful project -Take corrective action early +<i>Core idea: No surprises.</i> --- -# Manage expections +# Continuous tasks -You're 1# job! +*manage expectations*. Keep customer up to date with relevant developments. Incorporate doubts, recent developments and feedback -Communicate progress to stakeholders. +> "The milestone is completed, and the next meeting can go along as planned." +> "Next big maintenance will be completed in 8 months." ---- +*track progress*. Check if estimation matches measurements, and high-risk tasks proceed as expected. Take corrective action as early as sensible! -# Manage changes +> Substantial increase in effort for feature: Systematic or one-time? +> High-risk tasks: Solution in sight or stuck? -keep stakeholders informed -manage expectations -measure progress & react early -control change -control risks +*long-term planning*. Resolve dependencies for future tasks. + +> Hosting is ready in one week; delivery is due in two months. Hence can schedule meeting in four weeks to get feedback for final product. --- # Rollout -incremental updates & releases help to adapt rapidly (saving time with shortcuts, skipping unneeded functionality, improving through early feedback) -big bang is more efficient with no unknown unknowns (the longer the project, the smaller the chance) +Strategies: +- **Incremental**: Multiple releases, i.e. for each feature. *Additional effort due to shims for future features / release tasks.* +- **Big Bang**: Single release at the end. *No feedback till the end*. -maintenance needs to be considered +**Incremental updates usually beats Big Bang**: The earlier issues are found / feedback is incorporated, the cheaper it is. +<hr/> ---- +Changing `person.gender` from `Boolean` to `Text`: -# Getting it Done +| Start | End | +| :------ | ---------: | +| Add field to table | Add field to table | +| | Find all usages of field | +| | Re-understand how and why it is used | +| | Find new solution & adapt code | +| | Re-test usage & all related features | -getting it done -bugs after launch +--- +class: center, middle, inverted -# After the project +<div class="pyro"> + <div class="before"></div> + <div class="after"></div> +</div> + +# Done! --- -# during project +class: center, middle -continuously overview risks -manage cost -manage expectations +# Some closing notes --- # About changes -Changes happen: Deal with it. +Changes happen, deal with it. -Proposals: -- Incorporate in project execution plan. -- Clarify expectiations. -- Finish (sub-)projects quickly. -- Define how & when changes are applied (and who pays for it). +Tools: +- Schedule features early with uncertainty. +- Explicitly acceptance test features / milestones. +- Clarify expectations (changes in cost / schedule). +- Define process how & when changes are applied (and who pays for it). +Baseless claim: Ignoring change requests is as much a project failure as unapproved delays / cost overruns over it. --- # About people -People are strange, but predictable. +Important factor of project not in your control! Get to know all involved persons: - Motivation (agenda?) @@ -422,56 +530,76 @@ Get to know all involved persons: Likely True Facts About Peopleâ„¢: - People are predictable -- People can't be changed +- People change very slowly (too slow for your project) - People are good (or at least persuade themselves that they are) +Analysis approaches: [4 Colors](https://www.thecolourworks.com/insights-discovery-colour-types-guide/), [Big 5](https://www.simplypsychology.org/big-five-personality.html), [16 Personalities](https://www.16personalities.com/) (*(un)soundness alert*) + --- -# About bad people +# Getting it done -With some, you will not get along! +*Getting it done* is hard! +- Tedious tasks procrastinated till the end +- Some level of perfection needs to be reached +- Bugs right before / immediately after launch likely -Powerful combination: -- Ignorance (don't care about everybody their work affects) -- Incompetence (don't have relevant experience) -- Arrogance (don't consider inputs) -- Rhetorics (can defend their shortcomings) +Why most private projects never finish... -Options: -- Fight (usually a bad idea) -- Co-exist (sometimes not possible) -- Run (sometimes required) +Tools: +- Assign buffer before release to get it down +- Keep days around release free +- Rollout incrementally to reduce severity of effects +- Set expectations of customer over risk of release --- -# Agile development - -For developer teams in enterprises. +# Enterprise project management -For engineers, not programmers. - -Agile: +agile management: - https://scrumguides.org/scrum-guide.html - https://www.scaledagileframework.com/ +Measure / estimate: +- Function points: Points depending on input / output complexity. [IBM, 1979](https://researcher.watson.ibm.com/researcher/view_group.php?id=7298) +- Use Case points: Translate components of use case diagram into sizes metrics. Adjust for complexity and technical factors. [Objective Systems, 1993](https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.604.7842&rep=rep1&type=pdf) + +[Project Management Course](http://www.vvz.ethz.ch/Vorlesungsverzeichnis/lerneinheit.view?lerneinheitId=149690&semkez=2021S&ansicht=KATALOGDATEN&lang=en): +- project management models (PMBOK, ...) +- agile management methods (SCRUM, Lean, Kanban, ...) + --- -# Measure size of bigger software projects +# Summary + +**Favorable project environment**: Established vision & agreement over it. Sensible and stable business case. Sufficient experience, trust and capabilities. + +**Project plan**: Solve business problem with as little work as possible. Use relative complexity / rewards to estimate. Schedule to reduce risk & uncertainty early. Analyse & control risk. -**Function points**: Assign points depending on complexity of inputs / outputs. +**Execution**: Manage expectations & progress. Rollout incrementally & incorporate feedback early. Deal humbly with changes and people. Get It Done. + +--- -**Use Case points**: Translate components of use case diagram into sizes metrics. Adjust for complexity and technical factors. +class: center, middle -*Attention: Studies usually use small data models / overclaim.* +# Appendix ---- +--- -# Resources +# About bad people -Some resources used for this presentation: -- Azzeh, Mohammad, and Ali Bou Nassif. "Analyzing the relationship between project productivity and environment factors in the use case points method." Journal of Software: Evolution and Process 29.9 (2017): e1882. -- https://www.gartner.com/en/documents/2892218 +With some, you will not get along! +Powerful combination: +- Ignorance (don't care about everybody their work affects) +- Incompetence (don't have relevant experience) +- Arrogance (don't consider inputs) +- Rhetorics (can defend their shortcomings) + +Options: +- Fight (usually a bad idea) +- Co-exist (sometimes not possible) +- Run (sometimes required) </textarea> <script src="js/remark.min.js" type="text/javascript"></script> <script src="js/remark.driver.js" type="text/javascript"></script>