diff --git a/src/SUMMARY.md b/src/SUMMARY.md
index 2c2f4089..a9da83cd 100644
--- a/src/SUMMARY.md
+++ b/src/SUMMARY.md
@@ -18,9 +18,14 @@
- [Data Structures](data_structures.md)
- [Constants](data_structures/constant.md)
- [Custom](data_structures/custom.md)
+- [Development Tools](development_tools.md)
+ - [Debugging](development_tools/debugging.md)
+ - [Log Messages](development_tools/debugging/log.md)
+ - [Configure Logging](development_tools/debugging/config_log.md)
+ - [Versioning](development_tools/versioning.md)
+ - [Build Time Tooling](development_tools/build_tools.md)
- [Basics](basics.md)
- [Encoding](encoding.md)
- [Networking](net.md)
- [Application development](app.md)
- [Logging](logging.md)
-- [Build Time Tooling](build_tools.md)
diff --git a/src/app.md b/src/app.md
index 7aad1bcf..a0e9118d 100644
--- a/src/app.md
+++ b/src/app.md
@@ -358,263 +358,15 @@ fn run() -> Result<()> {
# quick_main!(run);
```
-[ex-semver-increment]: #ex-semver-increment
-
-## Parse and increment a version string.
+{{#include development_tools/versioning/semver-increment.md}}
-[![semver-badge]][semver] [![cat-config-badge]][cat-config]
+{{#include development_tools/versioning/semver-complex.md}}
-Constructs a [`semver::Version`] from a string literal using [`Version::parse`], then increments it by patch, minor, and major version number one by one.
+{{#include development_tools/versioning/semver-prerelease.md}}
-Note that in accordance with the [Semantic Versioning Specification], incrementing the minor version number resets the patch version number to 0 and incrementing the major version number resets both the minor and patch version numbers to 0.
+{{#include development_tools/versioning/semver-latest.md}}
-```rust
-# #[macro_use]
-# extern crate error_chain;
-extern crate semver;
-
-use semver::Version;
-#
-# error_chain! {
-# foreign_links {
-# SemVer(semver::SemVerError);
-# }
-# }
-
-fn run() -> Result<()> {
- let mut parsed_version = Version::parse("0.2.6")?;
-
- assert_eq!(
- parsed_version,
- Version {
- major: 0,
- minor: 2,
- patch: 6,
- pre: vec![],
- build: vec![],
- }
- );
-
- parsed_version.increment_patch();
- assert_eq!(parsed_version.to_string(), "0.2.7");
- println!("New patch release: v{}", parsed_version);
-
- parsed_version.increment_minor();
- assert_eq!(parsed_version.to_string(), "0.3.0");
- println!("New minor release: v{}", parsed_version);
-
- parsed_version.increment_major();
- assert_eq!(parsed_version.to_string(), "1.0.0");
- println!("New major release: v{}", parsed_version);
-
- Ok(())
-}
-#
-# quick_main!(run);
-```
-
-[ex-semver-complex]: #ex-semver-complex
-
-## Parse a complex version string.
-
-[![semver-badge]][semver] [![cat-config-badge]][cat-config]
-
-Constructs a [`semver::Version`] from a complex version string using [`Version::parse`]. The string
-contains pre-release and build metadata as defined in the [Semantic Versioning Specification].
-
-Note that, in accordance with the Specification, build metadata is parsed but not considered when
-comparing versions. In other words, two versions may be equal even if their build strings differ.
-
-```rust
-# #[macro_use]
-# extern crate error_chain;
-extern crate semver;
-
-use semver::{Identifier, Version};
-#
-# error_chain! {
-# foreign_links {
-# SemVer(semver::SemVerError);
-# }
-# }
-
-fn run() -> Result<()> {
- let version_str = "1.0.49-125+g72ee7853";
- let parsed_version = Version::parse(version_str)?;
-
- assert_eq!(
- parsed_version,
- Version {
- major: 1,
- minor: 0,
- patch: 49,
- pre: vec![Identifier::Numeric(125)],
- build: vec![],
- }
- );
- assert_eq!(
- parsed_version.build,
- vec![Identifier::AlphaNumeric(String::from("g72ee7853"))]
- );
-
- let serialized_version = parsed_version.to_string();
- assert_eq!(&serialized_version, version_str);
-
- Ok(())
-}
-#
-# quick_main!(run);
-```
-
-[ex-semver-prerelease]: #ex-semver-prerelease
-
-## Check if given version is pre-release.
-
-[![semver-badge]][semver] [![cat-config-badge]][cat-config]
-
-Given two versions, we assert (by using [`is_prerelease`]) that one is pre-release and that the other is not.
-
-```rust
-# #[macro_use]
-# extern crate error_chain;
-extern crate semver;
-
-use semver::Version;
-#
-# error_chain! {
-# foreign_links {
-# SemVer(semver::SemVerError);
-# }
-# }
-
-fn run() -> Result<()> {
- let version_1 = Version::parse("1.0.0-alpha")?;
- let version_2 = Version::parse("1.0.0")?;
-
- assert!(version_1.is_prerelease());
- assert!(!version_2.is_prerelease());
-
- Ok(())
-}
-#
-# quick_main!(run);
-```
-
-[ex-semver-latest]: #ex-semver-latest
-
-## Find the latest version satisfying given range
-[![semver-badge]][semver] [![cat-config-badge]][cat-config]
-
-Given a list of version &strs, finds the latest [`semver::Version`] that satisfying a given [`semver::VersionReq`] using [`VersionReq::matches`].
-
-```rust
-# #[macro_use]
-# extern crate error_chain;
-extern crate semver;
-
-use semver::{Version, VersionReq};
-#
-# error_chain! {
-# foreign_links {
-# SemVer(semver::SemVerError);
-# SemVerReq(semver::ReqParseError);
-# }
-# }
-
-fn find_max_matching_version<'a, I>(version_req_str: &str, iterable: I) -> Result