You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/practices/Development-And-Coding/Coding.md
+8-2Lines changed: 8 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -36,9 +36,15 @@ practice:
36
36
37
37
Coding is a core activity in software development, involving the translation of requirements and designs into functional code. High-quality coding practices are essential for creating reliable, maintainable, and efficient software. This involves writing clear, well-structured, and documented code that adheres to established standards and best practices.
|**Test-Driven Development**| Writing tests before code to guide implementation and ensure coverage. |[Test-Driven Development, Wikipedia](https://en.wikipedia.org/wiki/Test-driven_development)|
44
+
|**Behaviour-Driven Development**| Writing code based on expected behaviour described in natural language. |[Behaviour-Driven Development, Wikipedia](https://en.wikipedia.org/wiki/Behavior-driven_development)|
45
+
|**Literate Programming**| Embedding code within documentation to explain logic alongside implementation. |[Literate Programming, Wikipedia](https://en.wikipedia.org/wiki/Literate_programming)|
46
+
47
+
See also: [Time/Reality Tradeoff](/thinking/Cadence#time--reality-trade-off)
Copy file name to clipboardExpand all lines: docs/practices/Development-And-Coding/Debugging.md
+7Lines changed: 7 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -36,6 +36,13 @@ practice:
36
36
37
37
Debugging in software development involves identifying, analyzing, and fixing defects or issues within the software. This practice is crucial for ensuring that the software operates correctly and efficiently, improving its reliability and stability. Effective debugging helps in maintaining the overall quality of the software and minimizing the risk of operational failures.
|**Print Debugging**| Inserting print statements to trace program execution and variable values. |[Debugging, Wikipedia](https://en.wikipedia.org/wiki/Debugging#Techniques)|
44
+
|**Interactive Debugging**| Using a debugger tool to step through code, set breakpoints, and inspect state. |[Debugger, Wikipedia](https://en.wikipedia.org/wiki/Debugger)|
Copy file name to clipboardExpand all lines: docs/practices/Development-And-Coding/Dependency-Adoption.md
+12-6Lines changed: 12 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -38,14 +38,20 @@ practice:
38
38
39
39
## Description
40
40
41
-
Making use of third-party libraries or services in your code.
41
+
> "In software engineering, a software library is a collection of code that can be reused across different programs to provide commonly needed functionality." - [Library, _Wikipedia_](<https://en.wikipedia.org/wiki/Library_(computing)>)
42
42
43
-
See:
43
+
Making use of third-party libraries or services in your code can dramatically reduce development time and leverage battle-tested solutions.
44
44
45
-
-[Languages and Dependencies](/risks/Kolmogorov-Complexity#languages-and-dependencies)
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)
|**Software Library**| Reusable code packages that provide specific functionality (e.g., React, Lodash). |[Library, Wikipedia](<https://en.wikipedia.org/wiki/Library_(computing)>)|
50
+
|**Framework**| A larger structure that provides scaffolding and dictates application architecture. |[Software Framework, Wikipedia](https://en.wikipedia.org/wiki/Software_framework)|
51
+
|**Software-as-a-Service**| External services accessed via APIs (e.g., Stripe, AWS). |[Software as a Service, Wikipedia](https://en.wikipedia.org/wiki/Software_as_a_service)|
52
+
53
+
See also: [Languages and Dependencies](/risks/Kolmogorov-Complexity#languages-and-dependencies), [Software Libraries](/risks/On-Software-Dependencies#2-software-libraries), [Software-as-a-Service](/risks/On-Software-Dependencies#3--software-as-a-service)
Copy file name to clipboardExpand all lines: docs/practices/Development-And-Coding/Pair-Programming.md
+8-2Lines changed: 8 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -44,9 +44,15 @@ practice:
44
44
45
45
Pair Programming involves two developers working together on the same code. One developer writes the code while the other reviews each line in real-time, providing instant feedback and suggestions. This practice not only improves code quality but also facilitates knowledge sharing and collaboration between team members.
|**Driver-Navigator**| One developer writes code (driver) while the other reviews and guides (navigator). |[Pair Programming, Wikipedia](https://en.wikipedia.org/wiki/Pair_programming)|
52
+
|**Ping-Pong Pairing**| Developers alternate writing tests and implementation code in a TDD style. |[Ping Pong Pair Programming](https://anthonysciamanna.com/2015/04/18/ping-pong-pair-programming.html)|
53
+
|**Mob Programming**| The entire team works together on a single task at one computer. |[Mob Programming, Wikipedia](https://en.wikipedia.org/wiki/Mob_programming)|
Copy file name to clipboardExpand all lines: docs/practices/Development-And-Coding/Prototyping.md
+8Lines changed: 8 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -38,6 +38,14 @@ practice:
38
38
39
39
Prototyping in software development involves creating early models or mockups of the software to test concepts and gather feedback. This practice helps in validating design choices, identifying potential issues, and ensuring that the final product meets the users' needs and expectations.
|**Throwaway Prototype**| A quick model built to explore ideas, then discarded once requirements are clear. |[Throwaway Prototyping, Wikipedia](https://en.wikipedia.org/wiki/Software_prototyping#Throwaway_prototyping)|
46
+
|**Evolutionary Prototype**| A working model that is refined iteratively into the final product. |[Evolutionary Prototyping, Wikipedia](https://en.wikipedia.org/wiki/Software_prototyping#Evolutionary_prototyping)|
47
+
|**Wireframe/Mockup**| Low-fidelity visual representations of the UI without functionality. |[Wireframe, Wikipedia](https://en.wikipedia.org/wiki/Website_wireframe)|
Copy file name to clipboardExpand all lines: docs/practices/Development-And-Coding/Refactoring.md
+3-12Lines changed: 3 additions & 12 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -43,21 +43,12 @@ practice:
43
43
44
44
Refactoring involves revising and restructuring existing code to improve its readability, maintainability, and performance without changing its external behavior. This practice helps in reducing technical debt, enhancing code quality, and making the codebase easier to understand and modify.
45
45
46
-
## Abstractions
47
-
48
-
Refactoring is all about ensuring you have the right abstractions.
49
-
50
-
> "An abstraction" is the outcome of this process—a concept that acts as a common noun for all subordinate concepts and connects any related concepts as a group, field, or category.
Copy file name to clipboardExpand all lines: docs/practices/Development-And-Coding/Standardisation.md
+9-1Lines changed: 9 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -43,7 +43,15 @@ practice:
43
43
44
44
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.
|**Coding Standards**| Guidelines for code style, naming conventions, and best practices. |[Coding Conventions, Wikipedia](https://en.wikipedia.org/wiki/Coding_conventions)|
51
+
|**API Standards**| Specifications for how APIs should be designed and documented. |[OpenAPI, Wikipedia](https://en.wikipedia.org/wiki/OpenAPI_Specification)|
52
+
|**Industry Standards**| External standards like ISO, W3C, or IETF that software must comply with. |[Technical Standard, Wikipedia](https://en.wikipedia.org/wiki/Technical_standard)|
53
+
54
+
## See Also
47
55
48
56
-[Unwritten Software (On Software Dependencies)](/risks/On-Software-Dependencies#unwritten-software)
Copy file name to clipboardExpand all lines: docs/practices/Development-And-Coding/Tool-Adoption.md
+8-20Lines changed: 8 additions & 20 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -40,29 +40,17 @@ practice:
40
40
41
41
> "Software tools are programs and utilities that help developers create, debug, maintain, or otherwise support software development." - [Software tool, _Wikipedia_](https://en.wikipedia.org/wiki/Software_tool)
42
42
43
-
Tool Adoption in software development involves implementing and utilizing specific tools to enhance the development process. This includes tools for coding, debugging, testing, and project management. The use of appropriate tools helps in improving efficiency, quality, and collaboration among team members.
43
+
Tool Adoption involves implementing and utilizing specific tools to enhance the development process. Unless a problem is _specific to your circumstances_, it's often better to adopt proven tools rather than building from scratch. Tools are worth using if they offer a better risk return than not using them—and some tools (compilers, type systems, garbage collection, build tools) offer such _amazing_ returns that not using them becomes unthinkable.
44
44
45
-
## Discussion
45
+
However, picking new tools should be done **carefully**: you may be stuck with your choices for some time. See [On Software Dependencies](/risks/On-Software-Dependencies) for guidance.
46
46
47
-
### Tool Use
47
+
##Variations
48
48
49
-
In general, unless the problem is somehow _specific to your circumstances_ it may well be better to skip direct coding and pick up some new tools to help with the job.
50
-
51
-
Tools in general are _good_ and _worth using_ if they offer you a better risk return than you would have had from not using them.
52
-
53
-
But, this is a low bar - some tools offer _amazing_ returns on investment:
54
-
55
-
- Assemblers
56
-
- Compilers
57
-
- Garbage Collection
58
-
- Type Systems
59
-
- Libraries
60
-
- Build Tools
61
-
- etc.
62
-
63
-
A _really good tool_ offers such advantages that not using it becomes _unthinkable_: Linux is heading towards this point. For Java developers, the JVM is there already.
64
-
65
-
Picking new tools and libraries should be done **very carefully**: you may be stuck with your choices for some time. Here is a [short guide that might help](/risks/On-Software-Dependencies).
|**IDEs**| Integrated Development Environments for writing, debugging, and testing. |[IDE, Wikipedia](https://en.wikipedia.org/wiki/Integrated_development_environment)|
52
+
|**Build Tools**| Tools for compiling, packaging, and managing dependencies. |[Build Automation, Wikipedia](https://en.wikipedia.org/wiki/Build_automation)|
53
+
|**Collaboration Tools**| Tools for team communication and project tracking. |[Collaborative Software, Wikipedia](https://en.wikipedia.org/wiki/Collaborative_software)|
Copy file name to clipboardExpand all lines: docs/practices/Development-And-Coding/Version-Control.md
+8Lines changed: 8 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -34,6 +34,14 @@ practice:
34
34
35
35
Version Control in software development involves using systems that track changes to the codebase over time. This practice allows developers to manage versions, collaborate on code, and revert to previous states if necessary. Version control is essential for maintaining the integrity and history of the project.
36
36
37
+
## Variations
38
+
39
+
|**Version Control Type**|**Description**|**Reference**|
|**Distributed VCS**| Every developer has a full copy of the repository (e.g., Git, Mercurial). |[Distributed Version Control, Wikipedia](https://en.wikipedia.org/wiki/Distributed_version_control)|
42
+
|**Centralised VCS**| A single central repository that developers commit to (e.g., SVN, CVS). |[Version Control, Wikipedia](https://en.wikipedia.org/wiki/Version_control#Centralized_version_control)|
43
+
|**Trunk-Based Development**| All developers work on a single branch with frequent small commits. |[Trunk-Based Development](https://trunkbaseddevelopment.com/)|
Copy file name to clipboardExpand all lines: docs/practices/External-Relations/Analysis.md
+8Lines changed: 8 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -49,6 +49,14 @@ Analysis in software development involves examining and breaking down the requir
49
49
50
50
Analysis is also important as a tool to understand the environment that your software will run in. See [Environmental Risks](/tags/Environmental-Risks).
|**Business Analysis**| Understanding business needs and translating them into requirements. |[Business Analysis, Wikipedia](https://en.wikipedia.org/wiki/Business_analysis)|
57
+
|**Systems Analysis**| Examining technical systems to understand their components and interactions. |[Systems Analysis, Wikipedia](https://en.wikipedia.org/wiki/Systems_analysis)|
58
+
|**Competitive Analysis**| Studying competitors to understand market positioning and opportunities. |[Competitor Analysis, Wikipedia](https://en.wikipedia.org/wiki/Competitor_analysis)|
0 commit comments