For Developers and Users
When I started this thread I brought together three desirable features that are almost entirely unrelated from a user perspective, but which I believe are closely related from a software engineering point of view. This approach may have been both good and bad - I do not know whether any app developers read these forums.
Hierarchies are very common in software, even in GTD enabling list managers. Those that feature hierarchies typically have at least two levels - project and action. Doit has four (goal, project, task and subtask). Nirvana has 2˝ (project, action and checkable comment lines). Toodledo has three (folder, task, subtask). Appigo has three (list, project, task). And so on.
The different levels typically have very different properties and feature sets, which makes it unnecessarily difficult for users. At one level maybe the items inside the container can be sorted manually, whereas at a different level they can only be sorted automatically/alphabetically; or at one level you can apply tags whereas at a different levels you cannot; and so on.
My recommendation: Let yourselves be inspired by the likes of Google Drive, Windows and others, who have just two different kinds (files and folders), but let users arrange folders hierarchically as they see fit.
The purpose of using hierarchies, for those users who so wish, can be either to break down large objectives into smaller pieces and phases. In GTD terms you can also express this as a means for the user to map more than the 0 k and 10 k level horizons in the task app. I see no reason why a user should not be allowed to group and organize his stuff as high as he or she wants, if that brings clarity for that user.
This is a UI solution that happens to be a solution to two entirely different kinds of user situations. And since it is (in my opinion) the best solution to each of these types of situations individually, and therefore kills two birds with one perfect stone, I would strongly recommend that this should be considered and implemented at the same time as the hierarchies. (It would probably be much more expensive to retrofit).
Situation 1 - batching: We all have meetings, trips and similar activities during which we intend to do a number of things that belong in various places in our task hierarchy. We normally solve this by tagging these items with special tags such as Agenda or Trip etc, and then we have to remember to filter for this now and then, and if we plan several meetings or trips we may need several different tags to distinguish between them. And when we have agreed with people on a date we cannot put a date on the tag itself, of course, so we have to create a task or project etc anyway, sooner or later. My recommendation: Allow users to create a new "folder" for the particular activity (meeting, trip etc; usually a 10 k ft level item) and to then list within it all the tasks or other folders that should be part of it - without removing these from their original place in the hierarchy. This allows users to see this activity straight in the list itself, just as any other activity, without using workarounds such as defining special tags or having to filter etc. It is simply the most convenient way I can think of. And it allows continued easy review of the original projects, since the items are still visible from there. And it allows the user to add specific setup activities, such as book conference room, to the special project itself, without having it anywhere else.
Situation 2 - forking: Some of the things we do are done for more than just one purpose. They are a "platform" for several of the higher level objectives. In GTD we always need to review what we are doing. Reviewing an objective is easier if we can see all that is relevant for it inside it - even if some of those things inside it are also necessary for other purposes as well. My recommendation: Same again. Simply allow tasks and "folders" (e.g. projects) to be indexed from more than just one place.
In a project or higher level objective it is quite common that some of the things must be completed before others can be started. It is essential in GTD that the user can get things off his/her mind and onto a list, but at the same time it is essential that the yet-impossible things do not show up on the "current" lists (Next, Waiting etc). My recommendation: Allow users to manually arrange the items within a folder in a natural sequence, if there is one. This simplifies the user's review and understanding of the list. Also allow the user to somehow indicate or "draw the line" for what should now be shown on the "current" lists and what should not. It is also possible to automate this, such that items automatically become current when previous actions have been completed.