My Project Management Workflow; An In-Depth Explanation

Edit: I added my Vault to GitHub! If anyone wants to play around with it, or test it, feel free to check it out: GitHub - Assblastois/Obsidian-Vault-Project-Management: This is my personal vault I use to manage projects I work on. Most of it is automated, using Dataview, Templater, Quickadd and the Button-Plugin to make it work.

I have added an easy to read explanation of how this Vault works to the GitHub. If you are interested, please go take a look at it!


I was asked by @WintersMischief to share my workflow. I have been working with it now for some time and managed to iron out most of the kinks in the process.

My vault is separated into two parts. One part is to collect knowledge, processes, etc. that I use for work and the other one is to manage projects I get assigned.

I will talk about my Project Management Workflow. I currently use it to manage projects assigned to me but I am sure you can also use it to manage the work of other people.

Broadly speaking my Project management can be broken down to 3 main components. The Landing Page, Individual Project Pages and Associated Daily Notes.

Landing Page




The Landing Page is split up into the segments Open Projects, Limbo (This is used for Projects that depend on others to progress; this way Open Projects doesn’t overflow) and Finished Projects.
Each project I create will be automatically displayed in one of these Dataview-Tables. I have these two checkbox properties in each Project Page.


image


The three Tables on the Landing Page use where statements to display the Projects with the correct checkbox states.
In Open Projects that would be the following: WHERE Completed = False and Limbo = False

Urgency, Date and Responsible and Department should be self-explanatory. They are just simply queried form the Project Page. I’ll talk about Open Tasks and Image a bit later.


New Project Creation:

To create a new project, I have to click on “New Project”. Templater and QuickAdd are used to automate the process.

image

Step by step:

  1. A new note is created with my projects template in it. It prompts me to add a name.

  2. The template is “activated” through “Replace templates in the active file”, meaning the template commands get activated. This prompts me to fill out the department, indicate who takes the lead on the project, and how urgent it is.

  3. In the next step I use Natural Language Date’s Date Picker to select the due date. This will be appended to Due Date, because I used tp.file.cursor(1). (I had a lot of problems getting this to work properly.)

  4. In the last step I use folder notes (A plugin) to make a folder out of the note. This might seem unnecessary at first, but it is needed to correctly create and link the Daily notes when I create them. I could also use it to store important PDFs, images or other files associated with the project, although I prefer to keep the folder empty, and link to them in the Project Page itself.

  5. This will create a folder in my Projects folder. The only manual thing I still have to do is pull the newly generated folder into one of the Department folders. This just keeps the Projects folder clean and can prevent problems with Dataview down the line. It’s just good practice.
    I tried to automate this part to, but failed. It’s a small detail, so I didn’t pursue it further.

image

Image:

I mentioned the Image on the Landing page. This is where the property “CoverImg” comes into play. With each new project it automatically adds the link placeholder.jpg to CoverImg. If there is no placeholder image, the row of that project will not be displayed. Just don’t delete it, I guess?

Once you have an actual image of your project you can just replace placeholder.jpg with it.

This has been extremely helpful. Sometimes I have quite a few projects open at the same time and having a visual representation of your projects makes it easy to open the correct Project Page. No more clicking through it, until you find the correct one.

This is done with the following line in Dataview:

embed(link(meta(CoverImg).path, "125")) as "Image"

Most of the other stuff in my Project template is done to accommodate my specific needs.




One thing that I have that might differ from other setups is how I handle my Daily Notes.


Daily Notes and Task

I wanted to have a Daily note for every project I was working on that day. So, that would mean that I’d need three Daily Notes when I worked on three projects that day.
I tried just using only one but was really unhappy with it. It was messy, the tasks were not well separated and was all around a bad experience in this particular setup.

I handle all my task in the Daily Notes to keep the Project Page as clean and overview-able as possible.
When I use the “Open Daily Note” Button I have custom code in a Templater template that does a bunch of stuff:

On top of that I use QuickAdd to create the new Daily Note and call the “Daily Note Template” (Points 1 and 2) and then move it to the desired Folder (3)

  1. The note is created inside the Project Page’s folder and I immediately link to it using tp.file.folder(). This is the most important step, so this note is associated with this project and you can place it wherever you want in your vault.

  2. The next step is giving the note a unique name. I kept the naming format of adding the date of creation, but because I can have multiple Daily Notes for different projects on the same day, I appended No. “number”. This was quite a struggle and someone over at Github helped me with this immensely. (I don’t remember who it was, but thank you so much, if you read this.)
    What it does is checking the Daily Notes Folder and checks if the Note: {{Date}} No.1 already exists. If so, it changes the new Daily Note’s name to No.2, and so on.

  3. This needs to be done, because I throw every Daily Note into the same folder. I do this by appending another Templater function at the bottom of the Daily Note. This is done after note creation and renaming. I append it by using QuickAdd’s capture feature.
    (await tp.file.move("/Daily notes/" + tp.file.title)

Because of the link to the Project Page it is always associated with it. I can now add tasks to the Daily Note, and display them dynamically with Dataview-Task on the project page. When they are done and I tick them off, they disappear, keeping my Project page clean.

image

In another Dataview table I list all the files that are associated with this Project. They are grouped by type and with some Dataview code I found, nicely separated. If there are, for example, no Meetings associated with this Project, there will be no “Meeting” group displayed.
When linking to other Projects though, they must be in the same department, otherwise they will not be displayed.

Next to the file name I added QuickFind, which is a simple property that allows me to add the most important infos of what I have done that day. Things like: Client accepted, Concept finished, etc. It helps to quickly find information, even if I haven’t worked on a project for a couple of months.

I know exactly where a copy of an important E-Mail is for example. I use the daily notes that way too. I save every important information I get or gather on that day in the corresponding Daily Note. I’ll also add the really important stuff at the bottom of the Project Page too.

image

I also have the ability to add a daily note for the following day (tomorrow), but did not manage to create something like a Date-Picker to create Daily Notes that are further in the future. This isn’t really necessary for my case, because all the open Task are displayed anyways, but it would have been a “nice to have”.

Displaying Open Tasks on Landing Page:

I really wanted to see my open tasks on my Landing Page as well, but I am not a pro like @holroy, who helped me a ton to get this working. It gets all the tasks from the Daily Notes that are linked to the project, lists them and filters them to display only the ones that are not completed. This also dynamically updates and removes the ones that were completed.





Holroy came up with this monstrosity, and it works like a charm!:
FLATTEN list(flat(file.inlinks.file.tasks)) as AllProjectTasks
FLATTEN list(filter(AllProjectTasks, (task) => !task.completed)) as OpenTasks


This more or less concludes my Workflow! It’s quite a long OP, but it’s necessary to explain how it works (At least I hope so!).
If you have any questions, suggestions or anything else, feel free to post. If someone is interested in the Templater and Dataview Code, I can post that too.
I always like reading these kinds of posts here and hope you enjoyed or found it informative as well.
All the best!

@sprout @harr in case you are interested as well.

4 Likes

This is amazing and thanks again for sharing! I’m going to have a go at incorporating it into my current workflow but I will keep you updated with how it goes!

1 Like

Hey @New, I am having some trouble connecting my daily notes to each project. I have been able to have it move into the correct folder but none of my tasks are syncing through to my own variation of your landing page?

If you have any questions, please ask! Glad if I can help.

I’m not quite sure yet how to share the code because of the setup’s complexity. It’s probably the easiest to share it bit by bit.

Necessary Plugins are:
Templater
Dataview
QuickAdd
Natural language dates
Folder Notes
Buttons

Maybe we can start with creating a new project:

You need a button that kicks off the Quickadd:

```button
name New Project
type command
action QuickAdd: New Project
```

This will be your QuickAdd setup:

  1. This is the capture you will set up (change the path to wherever you will put your template in):
  2. For the following steps, just copy what I added.

The template for the project is as follows:

To add the urgency I wrote a small js file so I can color the text. If you don’t want to do that, you can use a system.suggester like for the Department property.
This is the js file. Just put it in a txt file and change the file extension to .js. Now you can put it in a folder (I have a dedicated one for js files called Templatejs). Just make sure the option “detect all file extensions” in “files and links” is turned on.

async function urgencyPicker(tp) {
    const selectedOption2 = await tp.system.suggester(
        ['Urgent', 'High', 'Medium', 'Low'], 
        [1, 2, 3, 4], 
        false, 
        "How urgent is the Project?"
        );

    if (selectedOption2 === 1) {
        return ' 1 Urgent'.fontcolor("red");
    } else if (selectedOption2 === 2) {
        return ' 2 High'.fontcolor('orange');
    } else if (selectedOption2 === 3) {
        return ' 3 Medium'.fontcolor('yellow');
    } else if (selectedOption2 === 4) {
        return ' 4 Low'.fontcolor('green');
    } else {
        return 'Nothing was indicated!!!'.fontcolor("red")
    }
}
module.exports = urgencyPicker

This should now add a new folder in the same folder where the file with the “New Project” button is located.

Edit: Sorry I did this before you responded. I’ll respond in a separate post

For it to create a link the project must be a folder. You can achieve this with the plugin Folder notes.

In your daily note you add: [[ <% tp.file.folder()%> ]]. Don’t forget the double square brackets.

The code for open projects on the landing page is:

```dataview
TABLE  
OpenTasks.text as "Open Tasks", 
Urgency as Urgency, 
DueDate as Date,
Responsible + "<br>" + Department as "Responsible and Department",
embed(link(meta(CoverImg).path, "125")) as "Image"

FROM "Projects"

WHERE file != this.file
WHERE Completed = False and Limbo = False 

FLATTEN list(flat(file.inlinks.file.tasks)) as AllProjectTasks
FLATTEN list(filter(AllProjectTasks, (task) => !task.completed)) as OpenTasks
```

Hey, did you ever manage to implement some of my things?

This is great. Is there an updated vault template in GitHub?

@Ldjd
Hey, no I haven’t put it on github. I have to look how I can create an empty vault with keeping all the functionality. I’m on vacation right now, but will take a look at it, when I’m back. I’ll @ you, when I have some progress.

1 Like

Thanks

1 Like

Hey @Ldjd , it’s done! I tested it, and it should work, but if there are problems just let me know.

Btw, if you use Tables maybe change the Theme, it makes them difficult to work with and may break larger ones.

@New Youre a :rock: :star2:

1 Like

Hey was just curious if you’ve seen any performance issues with this approach? It’s my biggest apprehension for doing project management in Obsidian.

No, I haven’t so far. The only annoying thing is that sometimes the dataview tables are rendered as code and not as they should be. I have no clue why they do that, but that might be a bug with the theme I’m using. But it is too rare for me to extensively test if it occurs with other themes. I just oben and close obsidian, which usualy resolves the issue.

But, as I said, I have not had any performance issues so far. But I can’t say how it will hold up in a couple of years i.e. with many mire notes added. I’ll check how many I have tomorrow.

@New Thanks for sharing the template, it is amazing. Sorry for the dummy question, but I did not get how to make the Daily Note becom a Task. Do I have the use some command to create the tasks? If I create a Daily Note I can only have some “notes” inside that, nothin appears as a TASK.
Thanks

I have around 700 notes so far.

@tuanan hey, no worries. The Daily note itself does not become a task. I use this to add tasks in it by just writing - [ ] image
But I don’t use the daily notes only to add tasks, but also to save everything important that happened that day, like important e-mails, order confirmation, etc. I use the Quickfind property to indicate if something important is added in that note.

Alternatively you can also use the Tasks command (create or edit task, through the command prompt) if you want to add more stuff like a completion date.

I hope that helps!

p.s. The Tasks plugin is way more extensive and has way more options though. You can even set up notifications if you want.
Notifications - Tasks User Guide - Obsidian Publish

1 Like

I’m wondering if anyone actually used it or tried it. If so, what have you thought about it?

I’m new to Obsidian, and whilst this template looks perfect, I don’t understand how to use the files in the GitHub repo to replicate it in my vault. Should it install as a plugin and work out of the box? Or am I expected to follow all the steps in the workflow described above to create a similar vault myself?

Hey @eagertom :slight_smile:
No need to follow all the steps above. I did this before adding the GitHub!

  1. All you need to do is go to the GitHub and download the .zip:

image

  1. Extract the files to where you want to store them.

  2. Go to the vault menu and chose “Open folder as vault”, select the folder you extracted and trust the plugins.

You should now have full access to the vault. If the dataview blocks don’t render correctly, close Obsidian and reopen.

Hope that helps!

I think I have to make a new and clearer description on how to use this vault at some point :sweat_smile:

I have also added an explanation to the GitHub page that should be way easier to follow that the one I provided above. I just explain the essentials, without going into that much detail. If there is still something that isn’t clear, don’t hesitate to ask!

1 Like