Skip to content

Commit 7541531

Browse files
committed
Fixing software dependency risk
1 parent 2e16e18 commit 7541531

File tree

13 files changed

+28
-40
lines changed

13 files changed

+28
-40
lines changed

docs/practices/Development-And-Coding/Library-Adoption.md renamed to docs/practices/Development-And-Coding/Dependency-Adoption.md

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
---
2-
title: Library Adoption
3-
description: Implementing code to use libraries or adhere to specific standards.
2+
title: Dependency Adoption
3+
description: Making use of software libraries or services as a dependency.
44
tags:
5-
- Library Adoption
5+
- Dependency Adoption
66
- Practice
77
featured:
88
class: c
9-
element: '<action>Use Library</action>'
9+
element: '<action>Use Dependency</action>'
1010
practice:
1111
aka:
1212
- "Runtime Adoption"
@@ -38,15 +38,13 @@ practice:
3838

3939
## Description
4040

41-
> "Standardization is the process of implementing and developing technical standards based on the consensus of different parties, including firms, users, interest groups, standards organizations, and governments." - [Standardization, _Wikipedia_](https://en.wikipedia.org/wiki/Standardization)
42-
43-
Adoption of standards and libraries involves implementing and adhering to established standards and integrating widely-used libraries in software development. This practice helps in ensuring consistency, reliability, and maintainability of the software by leveraging proven solutions.
41+
Making use of third-party libraries or services in your code.
4442

4543
See:
4644

4745
- [Languages and Dependencies](/risks/Complexity-Risk#languages-and-dependencies)
48-
- [Software Libraries (Software Dependency Risk)](/risks/Software-Dependency-Risk#2-software-libraries)
49-
- [Software-as-a-Service (Software Dependency Risk)](/risks/Software-Dependency-Risk#3--software-as-a-service)
46+
- [Software Libraries (On Software Dependencies)](/risks/On-Software-Dependencies#2-software-libraries)
47+
- [Software-as-a-Service (On Software Dependencies)](/risks/On-Software-Dependencies#3--software-as-a-service)
5048

5149

5250
## See Also

docs/practices/Development-And-Coding/Standardisation.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ practice:
4444
Standardisation involves creating, implementing, and enforcing standards and guidelines to ensure consistency, compatibility, and quality across software projects. This practice helps in maintaining uniformity, reducing complexity, and improving communication among team members and stakeholders.
4545

4646
See:
47-
- [Unwritten Software (Software Dependency Risk)](/risks/Software-Dependency-Risk#unwritten-software)
47+
- [Unwritten Software (On Software Dependencies)](/risks/On-Software-Dependencies#unwritten-software)
4848

4949

5050
## See Also

docs/risks/Complexity-Risk/Complexity-Risk.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ Although modern languages include plenty of concurrency primitives (such as the
8181

8282
Languages such as [Clojure](https://clojure.org) introduce [persistent collections](https://en.wikipedia.org/wiki/Persistent_data_structure) to alleviate concurrency issues. The basic premise is that any time you want to _change_ the contents of a collection, you get given back a _new collection_. So, any collection instance is immutable once created. The trade-off is again speed to mitigate [Complexity Risk](/tags/Complexity-Risk).
8383

84-
An important lesson here is that choice of language can reduce complexity: and we'll come back to this in [Software Dependency Risk](/risks/Software-Dependency-Risk).
84+
An important lesson here is that choice of language can reduce complexity: and we'll come back to this in [On Software Dependencies](/risks/On-Software-Dependencies).
8585

8686
### 5. Networking / Security
8787

@@ -93,7 +93,7 @@ There are plenty of [Complexity Risk](/tags/Complexity-Risk) perils in _anything
9393
9494
Luckily, most good languages include cryptographic libraries that you can include to mitigate these [Complexity Risks](/tags/Complexity-Risk) from your own code-base.
9595

96-
This is a strong argument for the use of libraries. But when should you use a library and when should you code-your-own? This is covered further in the section on [Software Dependency Risk](/risks/Software-Dependency-Risk).
96+
This is a strong argument for the use of libraries. But when should you use a library and when should you code-your-own? This is covered further in the section on [On Software Dependencies](/risks/On-Software-Dependencies).
9797

9898
### 6. The Pursuit Of Perfection
9999

docs/risks/Dependency-Risks/Deadline-Risk/Deadline-Risk.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ The data processing team needs a new account report to be ready at the start of
5656
- [Schedule Risk](/tags/Schedule-Risk) is _continuous_, like money. i.e. you want to waste as little of it as possible. Every extra day you take compounds [Schedule Risk](/tags/Schedule-Risk) additively. A day wasted at the start of the project is much the same as a day wasted at the end.
5757
- [Deadline Risk](/tags/Deadline-Risk) is _binary_. The impact of [Deadline Risk](/tags/Deadline-Risk) is either zero (you make it in time) or one (you are late and miss the flight). You don't particularly get a reward for being early.
5858

59-
So, these are two separate concepts, both useful in software development and other fields. Next up, something more specific: [Software Dependency Risk](/risks/Software-Dependency-Risk).
59+
So, these are two separate concepts, both useful in software development and other fields.
6060

6161
## Example Threats
6262

docs/risks/Dependency-Risks/Lock-In-Risk/Ecosystems.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ The above chart is an example of this: look at how the number of public classes
6262

6363
#### Backward Compatibility
6464

65-
As we saw in [Software Dependency Risk](/tags/Software-Dependency-Risk), The art of good design is to afford the greatest increase in functionality with the smallest increase in complexity possible, and this usually means [Refactoring](https://en.wikipedia.org/wiki/Refactoring). But, this is at odds with [Backward Compatibility](/risks/Protocol-Risk#backward-compatibility).
65+
The art of good design is to afford the greatest increase in functionality with the smallest increase in complexity possible, and this usually means [Refactoring](https://en.wikipedia.org/wiki/Refactoring). But, this is at odds with [Backward Compatibility](/risks/Protocol-Risk#backward-compatibility).
6666

6767
Each new version has a greater functional scope than the one before (pushing back [Lock-In Risk](/tags/Lock-In-Risk)), making the platform more attractive to build solutions in. But this increases the [Complexity Risk](/tags/Complexity-Risk) as there is more functionality to deal with.
6868

docs/risks/Dependency-Risks/Lock-In-Risk/Lock-In-Risk.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ The choice of approach presents us with [Lock-In Risk](/tags/Lock-In-Risk) optio
4747

4848
After having chosen either 'a', 'b' or even our own approach, we have significant sunk costs and are committed to the implementation - changing to another option is going to be expensive and means we have to re-trace our steps.
4949

50-
This is a toy example, but in real life this dilemma occurs when we choose between database vendors, cloud hosting platforms, operating systems, software libraries etc. and is a big factor in our analysis of [Software Dependency Risks](/tags/Software-Dependency-Risk).
50+
This is a toy example, but in real life this dilemma occurs when we choose between database vendors, cloud hosting platforms, operating systems, software libraries etc. and is a big factor in our analysis of [Software Dependency Risks](/risks/On-Software-Dependencies).
5151

5252
## Everyday Lock-In Risks
5353

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,16 @@
11
---
2-
title: Software Dependency Risks
3-
description: Specific risks due to relying on software as a dependency.
4-
5-
slug: /risks/Software-Dependency-Risks
6-
featured:
7-
class: c
8-
element: '<risk class="software-dependency" />'
9-
sidebar_position: 4
2+
title: On Software Dependencies
3+
description: Discussion of Dependency Risks due to software.
4+
5+
slug: /risks/On-Software-Dependencies
6+
sidebar_position: 10
107
tweet: yes
118
tags:
12-
- Software Dependency Risk
9+
- Dependency Risk
1310
---
1411

1512
In this section, we're going to look specifically at _Software_ dependencies, although many of the concerns we'll raise here apply equally to all the other types of dependency we outlined in [Dependency Risk](/tags/Dependency-Risk).
1613

17-
![Software Dependency Risk](/img/generated/risks/software-dependency/software-dependency-risk.svg)
18-
1914
In this section we will look at:
2015

2116
- **How Dependencies Provide Features**. It might seem obvious, but the purpose of adding a software dependency is to _reduce some other kind of risk_.
@@ -24,9 +19,9 @@ In this section we will look at:
2419
- **Different Types of Software Dependencies**. In a software project there are a number of ways you could depend on _other software_. Here, we break it down into some specific types (write-your-own, libraries and services) and look at the risk characteristics of each.
2520
- Finally, we look at how software dependencies are **Funded** - that is, how they survive over time. Here we focus on Open Source, Commercial and Ad-Supported options, and the risks introduced by each.
2621

27-
## Software Dependencies as Features
22+
## Software Dependencies Mitigate Risks
2823

29-
[Software Dependencies](/tags/Software-Dependency-Risk) allows us to construct dependency networks to give us all kinds of features and mitigate all kinds of risk. That is, the features we are looking for in a dependency _are to mitigate some kind of risk_.
24+
[Software Dependencies](/tags/Dependency-Adoption) allows us to construct dependency networks to give us all kinds of features and mitigate all kinds of risk. That is, the features we are looking for in a dependency _are to mitigate some kind of risk_.
3025

3126
For example, I might start using [WhatsApp](https://en.wikipedia.org/wiki/WhatsApp) because I want to be able to send my friends photos and text messages. However, it's likely that those same features allow us to mitigate [Coordination Risk](/tags/Coordination-Risk) when we're next trying to meet up.
3227

@@ -42,7 +37,7 @@ Let's look at some more examples:
4237
|[Operational-Risk](/tags/Operational-Risk) |Support tools like ZenDesk, Grafana, InfluxDB, Geneos, Security Tools |
4338
|[Feature-Risk](/tags/Feature-Risk) |Every piece of software you use! |
4439

45-
With this in mind, we can see that adding a software dependency is a trade-off: we reduce some risk (as in the table above), but in return we pick up [Software Dependency Risk](/tags/Software-Dependency-Risk) as a result. Whether this trade-off is worth it depends entirely on how well that software dependency resolves the original risk and how onerous the new risks are that we pick up.
40+
With this in mind, we can see that adding a software dependency is a trade-off: we reduce some risk (as in the table above), but in return we pick up [Dependency Risk](/tags/Dependency-Risks) as a result. Whether this trade-off is worth it depends entirely on how well that software dependency resolves the original risk and how onerous the new risks are that we pick up.
4641

4742
## Programming Languages as Dependencies
4843

docs/risks/Dependency-Risks/Reliability-Risk/Reliability-Risk.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ This kind of stuff is encapsulated in the science of [Reliability Engineering](h
9494
9595
This was applied on NASA missions, and then in the 1970's to car design following the Ford Pinto exploding car (see below). But establishing the reliability of software dependencies like this would be _hard_ and _expensive_. We are more likely to mitigate [Reliability Risk](/tags/Reliability-Risk) in software using [performance testing](/tags/Performance-Testing) or [redundancy](/tags/Redundancy) as shown in the diagram above.
9696

97-
Additionally, we often rely on _proxies for reliability_. We'll look at these proxies (and the way in which software projects signal their reliability) in much more detail in the section on [Software Dependency Risk](/tags/Software-Dependency-Risk).
97+
Additionally, we often rely on _proxies for reliability_. We'll look at these proxies (and the way in which software projects signal their reliability) in much more detail in the section on [Software Dependency Risks](/risks/On-Software-Dependencies).
9898

9999
:::tip Anecdote Corner
100100

docs/risks/Dependency-Risks/Software-Dependency-Risks/_category_.yaml

Lines changed: 0 additions & 4 deletions
This file was deleted.

docs/risks/Environmental-Risks/Operational-Risk/Operations-Management.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,6 @@ The "should we ship?" decision is therefore a complex one. In [Meeting Reality]
101101

102102
## The End Of The Road
103103

104-
In a way, [actions](/tags/Take-Action) like [Design](/tags/Design) and [Development](/tags/Coding) bring us right back to where we started from: identifying [Dependency Risks](/tags/Dependency-Risk), [Feature Risks](/tags/Feature-Risks) and [Complexity Risks](/tags/Complexity-Risk) that hinder our operation, and mitigating them through actions like _software development_.
104+
In a way, [actions](/tags/Take-Action) like [Design](/tags/Design) and [Development](/tags/Coding) bring us right back to where we started from: identifying [Dependency Risks](/tags/Dependency-Risks), [Feature Risks](/tags/Feature-Risks) and [Complexity Risks](/tags/Complexity-Risk) that hinder our operation, and mitigating them through actions like _software development_.
105105

106106
Our safari of risk is finally complete: it's time to reflect on what we've seen in the next section, [Staging and Classifying](Staging-And-Classifying).

docs/risks/Risk-Landscape.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ Below is a table outlining the different risks we'll see. There _is_ an order t
5959
|[Dependency Risks](/tags/Dependency-Risks) |Risks of depending on other people, products, software, functions, etc. This is a general look at dependencies, before diving into specifics like...|
6060
|[Scarcity Risk](/tags/Scarcity-Risk) |Risks associated with having limited time, money or some other resource.|
6161
|[Deadline Risk](/tags/Deadline-Risk) |The risk of creating a dependency around a point in time.|
62-
|[Software Dependency Risk](/tags/Software-Dependency-Risk)|The risk of depending on a software library, service or function.|
6362
|[Process Risk](/tags/Process-Risk) |When you depend on a business process, or human process to give you something you need.|
6463
|[Lock-In Risk](/tags/Lock-In-Risk) |Risks due to making decisions that limit your choices later on. Sometimes, you go the wrong way on the [Risk Landscape](/risks/Risk-Landscape) and it's hard to get back to where you want to be.|
6564
|[Agency Risk](/tags/Agency-Risk) |Risks that staff have their own [Goals](/tags/Goal), which might not align with those of the project or team.|

docs/tags.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -227,9 +227,9 @@
227227
label: "Runtime Adoption"
228228
permalink: "Runtime-Adoption"
229229

230-
"Library Adoption":
231-
label: "Library Adoption"
232-
permalink: "Library Adoption"
230+
"Dependency Adoption":
231+
label: "Dependency Adoption"
232+
permalink: "Dependency Adoption"
233233

234234
"Sales":
235235
label: "Sales"

docs/thinking/De-Risking.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ The table above lists a set of _generic strategies_ for derisking which we'll lo
101101

102102
1. **Do Risky Things Early**: If you are building some software process which has ten steps in it, and the 9th step has a high probability of not being implementable, then _build the 9th step first_. If you succeed, you've massively reduced the risk of the process construction. IF you fail, you'll only have lost the time it took to build that one step. _Build a proof of concept_.
103103

104-
1. **Take Care With Dependencies**: Choose popular technologies and known reliable components. Whilst hiring people is hard work at the best of times, hiring PL/1 programmers is _really hard_. This tactic is explored in much more depth in [Software Dependency Risk](/risks/Software-Dependency-Risk)
104+
1. **Take Care With Dependencies**: Choose popular technologies and known reliable components. Whilst hiring people is hard work at the best of times, hiring PL/1 programmers is _really hard_. This tactic is explored in much more depth in [On Software Dependencies](/risks/On-Software-Dependencies)
105105

106106
1. **Redundancy**: Avoid single points of failure. For example, Pair Programming is a control espoused by [Extreme Programming](/tags/Extreme-Programming) to reduce [Key Person Risk](/tags/Agency-Risk) and [Communication Risk](/tags/Communication-Risk). See [Dependency Risks](/tags/Dependency-Risks) for more on this.
107107

0 commit comments

Comments
 (0)