Whether you are following a prescribed convention or adhering to a standard, it is really important to name things correctly and precisely.
Variables — Name them what they are. Avoid using 1-letter variables.
Interfaces — A convention from Go is to use an Adverb which is actually a good idea!
Code is read more often than it is written. — Daniel J Scheufler
Consider the following configuration file:
At first glance, this seems reasonable until you ask yourself:
wtf is “CBC” and what kind of cipher is that?!
Only to realize that this is just one of a few “block mode”(s) of at least two ciphers, DES and AES. Which one are we referring to? Should the configuration key have been encrypt_cipher_block_mode? Should we also declare the actual cipher used and not just the block mode and assume a hard-coded cipher?
Solving the Chicken or the Egg problem is often quite hard in any relatively complex software system.
Often I find the easiest way to solve this is to build half a chicken.
What do I mean by that? In bootstrapping terms it means you build a simpler version to bootstrap the real thing. This is quite often done in Bootstrapping Compilers in self-hosted programming language.
Sometimes though this isn't possible due to other dependencies. For example your solution uses a set of Public Crypto keys that you don't have available in the first place. What then?
Use another chicken you've already set up elsewhere to bootstrap!