# Key Concepts

### AndHow Properties are configurable constants

AndHow [Properties](/user-guide/andhow-properties.md) are constants in your code, except their value is loaded when your application starts up.  Once loaded during [initialization](/user-guide/andhow-initialization.md), Property values are immutable and will not change for the run-life of the application.

### AndHow initializes and loads property values only once at startup

[Initialization](/user-guide/andhow-initialization.md) is AndHow's startup/bootstrap process where it discovers all Properties in your application, scans multiple configuration sources to load values for them, and validates them.  This will only happen once in the run-lifecycle of the application and once completed, the list of Properties and their values will never change.

### AndHow Fails Fast... and that is a good thing

AndHow detects invalid configuration at startup to [*fail fast*](https://www.martinfowler.com/ieeeSoftware/failFast.pdf).

*Failing late* is the alternative.  Failing late might mean that a misconfigured application runs for a few days, then mysteriously fails when a misconfigured feature is first used  ***\~BOOM\~*** You'll get the call in the middle of the night.  Wouldn't it have been nice to see that error at startup? &#x20;

### Property Names are CaSe InSeNsItIvE

For compatibility with Windows environment variable names, property names are case insensitive.  Proper case names are still used internally for reporting and when creating configuration sample files.  One exception to this is JNDI, which is inherently case sensitive.&#x20;

### Null Handling

AndHow does not have an explicit null value.  If a Property is not set, it is null unless it has a default value.

### Configuration Sources and Loaders

AndHow uses Loaders to load Property values from configuration sources such as System.Properties, environment variable, system properties, JNDI, properties files, etc..  Loaders work on a 'first win' basis:  The first loader to find a non-null for a Property sets the value. &#x20;

Thus, the loader order is significant and [well established](https://sites.google.com/d/1iteScRrSeAtJUnD-3ELYLFaGiQLdAmSP/p/1iPp60twwW_ABWH21-K2Z4p7BzEf8voZV/edit).  The standard Loader order will work for most applications, but if needed, [the load order can be changed](https://sites.google.com/d/1iteScRrSeAtJUnD-3ELYLFaGiQLdAmSP/p/1iFKkeYm4n_NHklIL9xkbf2Y6iMs7iauY/edit), loaders removed and other loaders added.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://www.andhowconfig.org/user-guide/key-concepts.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
