Rules for the Direction of the Mind

Descartes rules applied to Software Development

EXPERIMENTAL

Life Simulator

Text Adventure in React

Time Slash/er 6.81ms

The time in Tarawa (Pacific) is 05:48pm, enjoy!
After Frans Hals [Public domain] & ​spanish Wikipedia user Gwaur [CC BY-SA 3.0 (http://creativecommons.org/licenses/by-sa/3.0/)]

Descartes' Rules for the Direction of the Mind

About a decade ago I found an early book from René Descartes that was unfinished and published only after his death: Regulae ad directionem ingenii or Rules for the Direction of the Mind.

I found in it many principles that appeared in other later works and spent some time understanding if any of his great achievements in philosophy and mathematics derived from his rules of thought.

Of particular interest to me was the possibility to apply such rules to my work, to create a method that I could use to plan and organize projects or prototypes that I faced every day.

I was used to think and work in a linear way: when faced with something that had unclear or blurry components or for which I didn't have an immediate solution, I thought I could start working and solve issues as they come up.

Boy, was I wrong...

The method I have found developed with time and observation, but shaped for good more than a decade of my decision-making and work.

It became a natural way of thinking on many tasks and decisions in front of me. I cannot say I have found perfect solutions in my life or solved riddles otherwise beyond me, but I can say that without it I would have needed more time and efforts to get to the same conclusions as, for instance, I would have had to write and rewrite code all the time.

The following method is inspired by these rule that I advise you to read as much as any other work from Descartes, but please do not think it as a modern application of his theories: rather think of it as a reminder of the power of books and words, the sharing of ideas, the complexities and beauty of the human mind, the contagious touch of inspiration.

Let me show you the brief version of the first 12 rules and my own interpretation or better how I have used them to forge my thought, what I call: the Descartes Method.

At the end of it I will explain how they can be easily applied to anything.

Rules 1, 3, 10 and 12

1) The aim of our studies must be the direction of our mind so that it may form solid and true judgments on whatever matters arise.

3) As regards any subject we propose to investigate, we must inquire not what other people have thought, or what we ourselves conjecture, but what we can clearly and manifestly perceive by intuition or deduce with certainty. For there is no other way of acquiring knowledge.

10) In order that it may acquire sagacity the mind should be exercised in pursuing just those inquiries of which the solution has already been found by others; and it ought to traverse in a systematic way even the most trifling of men's inventions though those ought to be preferred in which order is explained or implied.

12) Finally we ought to employ all the help of understanding, imagination, sense and memory, first for the purpose of having a distinct intuition of simple propositions; partly also in order to compare the propositions

Thinking, in itself, makes us better judges. This is found to be true even in modern psychological studies. We found out that humans are quite bad at thinking - as in purposefully spend time in making decisions - as we tend to either fetch information from our past experiences and skills or simply from biases whenever confronted: what is called fast mind (or thinking).

It is said that we enter deep thought (or slow mind) only if we are in front of an issue that we do not understand or that we cannot relate to our experience.

Here's a great book (Thinking, Fast and Slow) on the matter.

Forcing ourselves to think and analyse all situations make us better at, well, thinking and analyse; avoid and identify biases; increase our experience; and learn from our choices.

The third rule proposed by Descartes warn us about biases in the form of what other people or ourselves thought about the matter at hand.

What's important is the objective truth and the ability to understand the process to reach it.

Rules 2, 4, 5, 7 and 8

2) We must occupy ourselves only with those objects that our intellectual powers appear competent to know certainly and indubitably.

4) There is need of a method for finding out the truth.

5) Method consists entirely in the order and disposition of the objects towards which our mental vision must be directed if we would find out any truth. We shall comply with it exactly if we reduce involved and obscure propositions step by step to those that are simpler, and then starting with the intuitive apprehension of all those that are absolutely simple, attempt to ascend to the knowledge of all others by precisely similar steps.

7) If we wish our science to be complete, those matters which promote the end we have in view must one and all be scrutinized by a movement of thought which is continuous and nowhere interrupted; they must also be included in an enumeration which is both adequate and methodical.

8) If in the matters to be examined we come to a step in the series of which our understanding is not sufficiently well able to have an intuitive cognition, we must stop short there. We must make no attempt to examine what follows; thus we shall spare ourselves superfluous labour.

The fourth rule seems quite obvious, but it is at the very core of my method: I wouldn't have one if I didn't accept the need for it and spent time devising it.

The method is meant to find the truth, but its process is equally important: a gradual, step by step system of reduction of complexity toward simple concept that can be easily understood as true is nothing if it cannot be traced and its processes remain obscure.

Our line of thought needs to be continuous: if we skip some steps because we don't have an immediate answer or because we think that we should postpone a decision on the matter we shall stop the line of though and continue pursuing other parts of the issue.

Rules 6, 9, 11

6) In order to separate out what is quite simple from what is complex, and to arrange these matters methodically, we ought, in the case of every series in which we have deduced certain facts the one from the other, to notice which fact is simple, and to mark the interval, greater, less, or equal, which separates all the others from this.

9) We ought to give the whole of our attention to the most insignificant and most easily mastered facts, and remain a long time in contemplation of them until we are accustomed to behold the truth clearly and distinctly.

11) If, after we have recognized intuitively a number of simple truths, we wish to draw any inference from them, it is useful to run them over in a continuous and uninterrupted act of thought, to reflect upon their relations to one another, and to grasp together distinctly a number of these propositions so far as is possible at the same time. For this is a way of making our knowledge much more certain, and of greatly increasing the power of the mind.

Here comes a central part of my method. The word series and uninterrupted act of thought led me to believe that there is a need of pursuing a reduction of complexities in layers and branches (or series), that it was necessary to hold the process in mind while doing so and to move to a following layer only when everything in the current one is known and simplified.

My following jump inspired by this rules was to substitute the word true with the concept of clear.

To wrap it up in few lines:

  • Devise a method to solve issues;
  • Avoid biases and experience (yours and others);
  • Look objectively and try to reduce complexity, eliminating doubt;
  • Move layer by layer, in branches, but do not go deeper until everything on a layer is simplified;
  • Take note of problems that do not have a clear answer and go back to them once everything on that layer is solved;
  • Check that all connections are solid.

Allow me to clarify the last three points with a video-game analogy.

Imagine the process of reduction to simplicity as a series of levels you have to clear before moving on. Get all items on a level, remember how you got there and check that all branches, series or connection between items is balanced and in harmony.

If one decision on a portion of the level is incompatible with all others you will need to find a new solution.

If one decision on a portion of the level has no clear solution, finish the analysis of other issues on that level first, you might find a solution by seeing what works with all other items.

Move to the next level when done, but do not forget where you came from: all following solutions must be compatible with the previous ones (hint: it would be impossible to do otherwise as the next level is the reduction of previous concept and could not be too far from them).

Practical use of the Descartes Method

Ok, I am tasked with a TO-DO list that have to disrupt the market, be colorful, easy to use and suit everybody's plans. We need it yesterday, please.

Of course these are not specs, but believe me or not they are more common than the technical ones you would need.

Long time ago, for a website, my only specs were: use the color orange.

The procedural or linear way

Without a method, the best I could do was moving inside my mind through my expertise to see how I have solved similar tasks, I would think of available products of the same kind, maybe do a fast research to see how other people solved the various issues that might arise and then summarize my thought into a linear path, a roadmap if you wish.

You can create a to-do so I need a plus button, you can edit it so I would need an input, delete it... wait first you should be able to complete it, right? And so on.

It might look like linear and be called as such, but it is a splintered series of jumps back and forth, connections are non-existent, the process of deduction is forgotten instantaneously.

The Descartes Method

Imagine the elements as boxes, containers or simple squares: every time you are reducing an issue you could break these squares in smaller ones, fix them all and continue to reduce.

The first element is easy: a big square with the words TO-DO APP on it. Let me break it down.

What are the main components in it? Users that will access it, To-Do objects, ToDo lists (probably), a Storage solution for the data, a Visual component to display them and act on them.

I cannot isolate anything else on this level, I can see that something might become intertwined and maybe go between boxes, but it could be the result of jumps in my thought or my experience speaking: let us ignore any intuition for now.

Users
  • They might need a form of authentication
  • maybe a guest mode?
  • groups and sharing could be necessary
TODOs
  • They contain text
  • They can be complete, or not.
  • a user should be able to input/edit text
    • this connection comes with our knowledge of another box defined one layer above: users
  • a todo should be deleted, or maybe archived
  • if a todo is shared, who's the owner? Can anyone be given read and write access? Is a todo copied over or remain unique?
    • too many doubts at this point, let us leave it there for a moment
  • should there be more metadata? Like a colour or a tag?
TODO lists
  • They contain todos;
  • they might have filters and sorting functionalities
  • could they be shared instead of sharing a single todo, leaving todo objects unique and never copied?
    • a potential solution for the issue above, but let us not jump to conclusions just yet
A storage solution

This issue might be driven by technologies and knowledge available, teams and resources, budget and so on, but skipping it entirely would undermine the integrity of our thought process.

  • Apache / MySQL / PHP
  • Could PHP hold the authentication process?
    • more info needed, let us stop here
  • should we have an API server side or generate the client code?
    • same as above
A visual component
  • we need to be both on web and mobile, should we use a cross-platform framework?
  • do we have different functionalities on web and mobile?
  • what style do we want to achieve?
  • how did other solve the frontend issue?

Wrapping up

For the sake of time and space I cannot go much deeper into this example, but allow me to spend a couple of minutes checking the solidity of our connections and potential solutions necessary to go to the next level.

  1. In the TODO lists sections we identify a potential solutions for sharing single TODOs, the only real doubt we had in that section.
  2. The first two questions in A visual component could move us towards a JavaScript Framework and decisions we make at this level could clear doubts on authentication (both in Users and A storage solution) or on having API instead of server-side process HTML
  3. A research on style and how other people solved the task at this stage, keeping in mind the knowledge and thought process we built might shed much more light than simply trying out without a basic plan.
  4. If everything here is clear we could move down one level analysing how groups, users and ACL connect to lists; how do we store the data in the database; what JS framework is best suited for the task, etc.

In my normal planning I would then write on paper the data structure down to the single fields and check that all connections are still solid; then move on to building in my mind a potential structure for the API, maybe even think of some library I could be using; then define screens and views that could represent the structure frontend.

At this point some boxes would reach clarity and could not be broken further, but things like actions, colours, users experience and interface might need a longer thought process or never be really clear until built.

Many a time I have reached bottlenecks and issues that could not be solved or needed resources to be fixed: simply being aware of them or communicating them to clients or top-level decision-makers put me always in the best place to handle the challenges to fulfill my duties and mark the last of my todos.

Another example is a piece of furniture I'm trying to build: after rethinking my designs and trying to picture it in all its parts (solely in my mind), I have found out a fault that could make it unstable or worse. It might still come out terribly, but it shouldn't fall to pieces...

Because this is a concept that I was never able to convey in full, I had to use a lot of mental resources and completely forgot to be cynical or sarcastic. I think I will need to close with an ancient Chinese proverb:

Weeks of coding could save you hours of planning.