diff --git a/docs/bets/Coding-Bets.md b/docs/bets/Coding-Bets.md
index 888d0e47e..f10cc2eea 100644
--- a/docs/bets/Coding-Bets.md
+++ b/docs/bets/Coding-Bets.md
@@ -9,6 +9,7 @@ featured:
element: 'Coding Bets'
tags:
- Bets
+ - Refactoring
sidebar_position: 2
tweet: yes
---
diff --git a/docs/complexity/Crystals-And-Code.md b/docs/complexity/Crystals-And-Code.md
index 983b270a3..b0fedb3a5 100644
--- a/docs/complexity/Crystals-And-Code.md
+++ b/docs/complexity/Crystals-And-Code.md
@@ -8,6 +8,7 @@ featured:
element: 'Crystals And Code'
tags:
- Complexity
+ - Refactoring
sidebar_position: 2
tweet: yes
---
diff --git a/docs/methods/Agile.md b/docs/methods/Agile.md
index 0ee995c28..73e4a1945 100644
--- a/docs/methods/Agile.md
+++ b/docs/methods/Agile.md
@@ -2,6 +2,7 @@
tags:
- Prototyping
- Coding
+ - Pair Programming
---
![Draft](/img/state/draft.png)
diff --git a/docs/methods/DevOps.md b/docs/methods/DevOps.md
index 9b4272826..4f57af151 100644
--- a/docs/methods/DevOps.md
+++ b/docs/methods/DevOps.md
@@ -1 +1,6 @@
+---
+tags:
+ - Automation
+---
+
![Draft](/img/state/draft.png)
diff --git a/docs/methods/Lean.md b/docs/methods/Lean.md
index bc61c2628..ec753a485 100644
--- a/docs/methods/Lean.md
+++ b/docs/methods/Lean.md
@@ -1,3 +1,7 @@
+---
+tags:
+ - Automation
+---
![Draft](/img/state/draft.png)
diff --git a/docs/practices/Glossary-Of-Practices.md b/docs/practices/Glossary-Of-Practices.md
index 4f4c0cedb..c31bf313e 100644
--- a/docs/practices/Glossary-Of-Practices.md
+++ b/docs/practices/Glossary-Of-Practices.md
@@ -77,7 +77,7 @@ See:
### Automation
-Converting a manual [Process](../risks/Process-Risk) into an automatic, computer-controlled one.
+Converting a manual [Process](../risks/Process-Risk) into an automatic, machine-controlled one.
See:
diff --git a/docs/practices/development/Automating.md b/docs/practices/development/Automating.md
deleted file mode 100644
index b846d4111..000000000
--- a/docs/practices/development/Automating.md
+++ /dev/null
@@ -1,14 +0,0 @@
-
-### Automating
-
-One of the key ways to measure whether your team is doing _useful work_ is to look at whether, in fact, it can be automated. And this is the spirit of [DevOps](DevOps) - the idea that people in general are poor at repeatable tasks, and anything people do repeatedly _should_ be automated.
-
-Repetitive work of any kind is a [Process Risk](../risks/Process-Risk.md), and can be mitigated at the expense of attendant [Complexity Risk](../risks/Complexity-Risk.md) and [Schedule Risk](../risks/Scarcity-Risk.md#schedule-risk).
-
-Since this is a trade-off, you have to be careful about how you _weigh_ the [Process Risk](../risks/Process-Risk.md): clearly, it exists _into the future_.
-
-You are making a bet that acting now will pay off in decreased [Process Risk](../risks/Process-Risk.md) over the lifetime of the project. This is a hard thing to judge:
- - How much [Process Risk](../risks/Process-Risk.md) are we carrying, week-to-week? (A good way to answer this is to look at past failures).
- - How much [Complexity Risk](../risks/Complexity-Risk.md) will we pick up?
- - How much [Schedule Risk](../risks/Scarcity-Risk.md#schedule-risk) (in spent developer effort) will we pick up?
- - How long will the mitigation last before the process changes again?
\ No newline at end of file
diff --git a/docs/practices/development/Automation.md b/docs/practices/development/Automation.md
new file mode 100644
index 000000000..240f7a3a2
--- /dev/null
+++ b/docs/practices/development/Automation.md
@@ -0,0 +1,41 @@
+---
+title: Automation
+tags:
+ - Automation
+practice:
+ aka:
+ - "Mechanisation"
+ - "Formalisation"
+ mitigates:
+ - tag: Implementation Risk
+ reason: "Reduces the variability in process completion"
+ - tag: Operational Risk
+ reason: "Introduces more consistency in process operations and removes opportunity for human error"
+ attendant:
+ - tag: Codebase Risk
+ reason: "More code means more software to manage"
+ - tag: Complexity Risk
+ reason: "Introducing code adds to the complexity of a project"
+ - tag: Feature Fit Risk
+ reason: "The automated process might not capture the variability of requirements of the original approach"
+ - tag: Invisibility Risk
+ reason: "The quality and performance characteristics may be obscured by automation."
+ - tag: Process Risk
+ reason: "Automation introduces a process"
+ related:
+ - /practices/development/Coding
+ - /practices/testing/Measurement
+---
+
+
+
+## Description
+
+> "Automation describes a wide range of technologies that reduce human intervention in processes, mainly by predetermining decision criteria, subprocess relationships, and related actions, as well as embodying those predeterminations in machines.": - [Automation, _Wikipedia_](https://en.wikipedia.org/wiki/Automation)
+
+One of the key ways to measure whether your team is doing _useful work_ is to look at whether, in fact, it can be automated. And this is the spirit of [DevOps](DevOps) - the idea that people in general are poor at repeatable tasks, and anything people do repeatedly _should_ be automated.
+
+
+## See Also
+
+
\ No newline at end of file
diff --git a/docs/practices/development/Coding.md b/docs/practices/development/Coding.md
index 05254ba93..ae9f64ceb 100644
--- a/docs/practices/development/Coding.md
+++ b/docs/practices/development/Coding.md
@@ -1,24 +1,27 @@
---
title: Coding
+tags:
+ - Coding
practice:
aka:
- "Software Development"
- "Computer Programming"
mitigates:
- - page: tags/Feature-Risk
+ - tag: Feature Risk
reason: "Build or improve some features which our clients will find useful."
attendant:
- - page: tags/Codebase-Risk
+ - tag: Codebase Risk
reason: "More code means more software to manage"
- - page: tags/Complexity-Risk
+ - tag: Complexity Risk
reason: "Introducing code adds to the complexity of a project"
- - page: tags/Implementation-Risk
+ - tag: Implementation Risk
reason: Adding working code also introduces bugs.
related:
- - /practices/Refactoring
- - /practices/Automating
- - /practices/Outsourcing
- - /practices/Pair-Programming
+ - /practices/development/Refactoring
+ - /practices/development/Automating
+ - /practices/coordination/Outsourcing
+ - /practices/development/Pair-Programming
+ - /practices/testing/testing
---
diff --git a/docs/practices/development/Development.md b/docs/practices/development/Development.md
deleted file mode 100644
index 9b4272826..000000000
--- a/docs/practices/development/Development.md
+++ /dev/null
@@ -1 +0,0 @@
-![Draft](/img/state/draft.png)
diff --git a/docs/practices/development/Pair-Programming.md b/docs/practices/development/Pair-Programming.md
index 7aa892e9f..be35b7803 100644
--- a/docs/practices/development/Pair-Programming.md
+++ b/docs/practices/development/Pair-Programming.md
@@ -1,25 +1,47 @@
+---
+title: Pair Programming
+tags:
+ - Pair Programming
+practice:
+ aka:
+ - "Mob Programming"
+ - "Pairing"
+ mitigates:
+ - tag: Staff Risk
+ reason: "Knowledge is shared across staff, reducing key person risk."
+ - tag: Agency Risk
+ reason: "Colleagues working together are able to keep each other honest."
+ - tag: Learning Curve Risk
+ reason: "Prototypes are a way of learning about a particular solution to a problem."
+ - tag: Communication Risk
+ reason: "A prototype often allows for communicating a design or idea in a way that a written document or diagram wouldn't."
+ - tag: Implementation Risk
+ reason: "More eyeballs means fewer bugs and a better implementation"
+ attendant:
+ - tag: Schedule Risk
+ reason: "Staff working together introduces redundancy which might slow down delivery speed."
+ - tag: Agency Risk
+ reason: "Staff might not like working in this arrangement."
+ related:
+ - /practices/Coding
+ - /practices/coordination/Review
+---
+
+
+## Description
-### Pair Programming / Mob Programming
-
-In the main, [Review](Review.md)) is the main way to mitigate [Coordination Risk](../risks/Coordination-Risk.md). For example:
- - [Code Reviews](Review.md)
- - [Stand Up Meetings](Review.md)
- - [Presentations & Demos](Review.md)
- - [Training](Review.md)
+> "Pair programming is a software development technique in which two programmers work together at one workstation. One, the driver, writes code while the other, the observer or navigator,[1] reviews each line of code as it is typed in. The two programmers switch roles frequently." - [Pair Programming, _Wikipedia_](https://en.wikipedia.org/wiki/Pair_programming)
-**Pair Programming** however _combines_ the review with the process of coding: there are now two heads at each terminal. What does this achieve?
+**Pair Programming** combines the [review](../coordination/Review.md) with [coding](Coding.md): there are now two heads at each terminal.
+
- Clearly, we mitigate [Key-Man Risk](../risks/Coordination-Risk.md) as we've got two people doing every job.
- Knowledge is transferred at the same time, too, mitigating [Specialist Risk](../risks/Coordination-Risk.md).
- Proponents also argue that this mitigates [Complexity Risk](../risks/Complexity-Risk.md), as the software will be better quality.
- Since the pair spend _so much time together_, the communication is very _high bandwidth_, so this mitigates [Communication Risk](../risks/Communication-Risk.md)
-
-But, conversely, there is a cost to **Pair Programming**:
- - Having two people doing the job _one person could do_ intimates [Schedule Risk](../risks/Scarcity-Risk.md#schedule-risk).
- - Could the same [Complexity Risk](../risks/Complexity-Risk.md) be mitigated just with more regular [Code Reviews](Review.md)?
- - Sometimes, asking members of a team to work so closely together is a recipe for disaster. [Team Risk](../risks/Coordination-Risk.md)
- - Not every pair programmer "shares" the keyboard time evenly, especially if ability levels aren't the same.
- - There is only one **Feedback loop**, so despite the fact you have two people, you can only [Meet Reality](../thinking/Meeting-Reality.md) serially.
- **Mob Programming** goes one stage further and suggests that we can write better software with _even more people around the keyboard_. So, what's the right number? Clearly, the usual trade-off applies: are you _mitigating_ more risk than you're _gaining_?
-
\ No newline at end of file
+**Mob Programming** goes one stage further and suggests that we can write better software with _even more people around the keyboard_. So, what's the right number? Clearly, the usual trade-off applies: are you _mitigating_ more risk than you're _gaining_?
+
+## See Also
+
+
\ No newline at end of file
diff --git a/docs/practices/development/Prototyping.md b/docs/practices/development/Prototyping.md
index 94f3c6be3..222a090ba 100644
--- a/docs/practices/development/Prototyping.md
+++ b/docs/practices/development/Prototyping.md
@@ -1,20 +1,22 @@
---
title: Prototyping
+tags:
+ - Prototyping
practice:
aka:
- "Spike Solution"
- "Proof of Concept (POC)"
mitigates:
- - page: tags/Complexity-Risk
+ - tag: Complexity Risk
reason: "Prototyping allows you to explore an idea or design without committing to it. If the design turns out to be over-complex, it can be avoided."
- - page: tags/Schedule-Risk
+ - tag: Schedule Risk
reason: "Prototyping aims to produce quick working examples to help understand a concept."
- - page: tags/Learning-Curve-Risk
+ - tag: Learning Curve Risk
reason: "Prototypes are a way of learning about a particular solution to a problem."
- - page: tags/Communication-Risk
+ - tag: Communication Risk
reason: "A prototype often allows for communicating a design or idea in a way that a written document or diagram wouldn't."
attendant:
- - page: tags/Complexity-Risk
+ - tag: Complexity Risk
reason: "Prototypes that turn into the chosen solution often take shortcuts in design that are not rectified."
related:
- /practices/MVP
diff --git a/docs/practices/development/Refactoring.md b/docs/practices/development/Refactoring.md
index 365428fca..79540b90d 100644
--- a/docs/practices/development/Refactoring.md
+++ b/docs/practices/development/Refactoring.md
@@ -1,8 +1,33 @@
-
-### Refactoring
+---
+title: Refactoring
+tags:
+ - Refactoring
+practice:
+ aka:
+ - "Factoring"
+ - "Separation of Concerns"
+ mitigates:
+ - tag: Complexity Risk
+ reason: "Refactoring is aimed at making code more orthogonal, less duplicative and clearer to understand"
+ - tag: Communication Risk
+ reason: "Well-factored code should be easier to understand."
+ attendant:
+ - tag: Schedule Risk
+ reason: "Refactoring in large chunks can take significant time to complete."
+ - tag: Feature Regression Risk
+ reason: "Done carelessly, refactoring can introduce new issues into the codebase"
+ related:
+ - /practices/Coding
+---
+
+
+
+## Description
The term "refactoring" probably stems from the mathematical concept of _(Factorization)[https://en.wikipedia.org/wiki/Factorization]_. Factorizing _polynomial equations_ or _numbers_ means to identify and make clear their distinct components.
+> "In computer programming and software design, code refactoring is the process of restructuring existing computer code—changing the factoring—without changing its external behavior." - [Refactoring, _Wikipedia_](https://en.wikipedia.org/wiki/Code_refactoring)
+
tbd: SoC
Most coders use the phrase "refactoring", and intuitively understand what it is. It shouldn't have been hard to find a clear explanation for this page, but sadly it was. There are some very woolly definitions of "refactoring" around, such as:
@@ -18,4 +43,15 @@ On **Refactoring**, Kent Beck says:
> "If a programmer sees a one-minute ugly way to get a test working and a ten-minute way to get it working with a simpler design, the correct choice is to spend the ten minutes. " -- Kent Beck, _Extreme Programming Explained_
-This is a bold, not-necessarily-true assertion. How does that ratio stack up when applied to _hours_ or _days_? But you can see how it's motivated: Kent is saying that the nine extra minutes of [Schedule Risk](../risks/Scarcity-Risk.md#schedule-risk) are _nothing_ compared to the carry cost of [Complexity Risk](../risks/Complexity-Risk.md) on the project.
\ No newline at end of file
+This is a bold, not-necessarily-true assertion. How does that ratio stack up when applied to _hours_ or _days_? But you can see how it's motivated: Kent is saying that the nine extra minutes of [Schedule Risk](../risks/Scarcity-Risk.md#schedule-risk) are _nothing_ compared to the carry cost of [Complexity Risk](../risks/Complexity-Risk.md) on the project.
+
+## External References
+
+- [Separation of Concerns](https://en.wikipedia.org/wiki/Separation_of_concerns) Wikipedia Page.
+- [Refactoring](https://martinfowler.com/books/refactoring.html) Book by Martin Fowler.
+
+
+## See Also
+
+
+
diff --git a/docs/practices/service/Tool-Adoption.md b/docs/practices/development/Tool-Adoption.md
similarity index 100%
rename from docs/practices/service/Tool-Adoption.md
rename to docs/practices/development/Tool-Adoption.md
diff --git a/docs/practices/testing/Measurement.md b/docs/practices/testing/Measurement.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/docs/risks/Complexity-Risk.md b/docs/risks/Complexity-Risk.md
index f5381504e..ea0f384d4 100644
--- a/docs/risks/Complexity-Risk.md
+++ b/docs/risks/Complexity-Risk.md
@@ -13,6 +13,7 @@ tags:
- Dead-End Risk
- Codebase Risk
- Risks
+ - Refactoring
redirect_from:
- /Complexity-Risk
---
diff --git a/src/theme/PracticeIntro/index.js b/src/theme/PracticeIntro/index.js
index e7297a3be..c7309b9b9 100644
--- a/src/theme/PracticeIntro/index.js
+++ b/src/theme/PracticeIntro/index.js
@@ -6,10 +6,13 @@ function formatReadableTag(page) {
return page.replaceAll("-", " ").substring(page.lastIndexOf("/")+1)
}
-const Risk = ({page, reason}) => {
- const title = formatReadableTag(page)
+function tagUrl(tag) {
+ return "/tags/"+tag.replaceAll(" ", "-")
+}
+
+const Risk = ({tag, reason}) => {
return (
-
{title}: {reason}
+ {tag}: {reason}
)
}
@@ -31,13 +34,13 @@ export default ({details}) => {
Addresses / Mitigates
{
- details.mitigates.map(i => )
+ details.mitigates.map(i => )
}
Attendant Risks
{
- details.attendant.map(i => )
+ details.attendant.map(i => )
}