diff --git a/doc/userdoc.org b/doc/userdoc.org
index 6e957604cba75258fa2d630a977d7ad966de5bc5..f7be8d60658a3deb0ca901cd32cc2801ef475f15 100644
--- a/doc/userdoc.org
+++ b/doc/userdoc.org
@@ -138,33 +138,61 @@ already be discussed.
   builtin functions and are generally defined when importing a
   module. These functions behave similarly, one should refer to
   [[functions]] for details.
-- The language does not allow low-level manipulations of high-level
-  type variables. This means that for instance, one cannot modify a
-  specific cell value of a piecewise constant function. This allows to
-  write algorithms (within the pugs language) that can be executed in
-  parallel naturally. Observe that the resulting mesh of the previous
-  does not depend on the number of ~MPI~ processes nor on the number of
-  threads used while running ~pugs~.
 
-*  Language
+** Concepts and design
 
-** Variables
+*** TODO A C++ toolbox driven by a user friendly language
 
-*** Types<<variable-types>>
+- Why? divide and conquer
+  - the language is used to assemble the provided C++ tools
+  - small independent C++ methods are easy to test/validate.
+  - new numerical method brings a new C++ code: not a patched code.
+    A previously validated method is unchanged!
+    - much more difficult to introduce bugs in existing methods
+    - existing methods performances are a unchanged by new
+      developments
+- Why not python or any other scripting language?
+  - provide a language close to the application: a DSL is made for
+    that
+  - do not deal with the difficulty of parallelism within the
+    scripting language
+- Following the success of ~FreeFEM~
 
-**** Basic types
+*** TODO A high-level language
 
-**** High-level types
+Defining a suitable language
 
-*** Life time
+**** TODO Keep it simple
 
-** Statements
+**** TODO Performances and parallelism
 
-** Functions<<functions>>
+The language *does not allow* low-level manipulations of high-level type
+variables. This means that for instance, one cannot access or modify
+specific cell or node value. A consequence of such a choice is that
+this *constrained framework* allows to write algorithms (within the pugs
+language) that can be executed in parallel naturally. To achieve that,
+there should *never* be parallel instructions or instructions that
+require *explicit parallel* actions in the ~pugs~ language.
 
-*** User-defined functions
+* TODO Language
 
-*** Builtin functions
+** TODO Variables
+
+*** TODO Types<<variable-types>>
+
+**** TODO Basic types
+
+**** TODO High-level types
+
+*** TODO Life time
+
+** TODO Statements
+
+** TODO Functions<<functions>>
+
+*** TODO User-defined functions
+
+*** TODO Builtin functions