From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp12.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms0.migadu.com with LMTPS id aH/2OjTXH2JtMwAAgWs5BA (envelope-from ) for ; Wed, 02 Mar 2022 21:44:36 +0100 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp12.migadu.com with LMTPS id yNt5NzTXH2KvFgAAauVa8A (envelope-from ) for ; Wed, 02 Mar 2022 21:44:36 +0100 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 5F843176F3 for ; Wed, 2 Mar 2022 21:44:36 +0100 (CET) Received: from localhost ([::1]:51768 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nPVpq-0005tq-Or for larch@yhetil.org; Wed, 02 Mar 2022 15:44:34 -0500 Received: from eggs.gnu.org ([209.51.188.92]:38544) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nPVdQ-0006Zr-CS for emacs-orgmode@gnu.org; Wed, 02 Mar 2022 15:31:47 -0500 Received: from 96-100-31-185.ftth.cust.kwaoo.net ([185.31.100.96]:58114 helo=gandalf.k-7.ch) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nPVdN-0002Do-QI for emacs-orgmode@gnu.org; Wed, 02 Mar 2022 15:31:44 -0500 Received: from sherazad-lan (alfred.lan [192.168.1.1]) (Authenticated sender: seb) by gandalf.k-7.ch (Postfix) with ESMTPSA id EE83ABB8B; Wed, 2 Mar 2022 21:31:37 +0100 (CET) References: <87tuci9zp6.fsf@k-7.ch> <87fso2awqa.fsf@web.de> User-agent: mu4e 1.6.6; emacs 27.2 From: =?utf-8?Q?S=C3=A9bastien?= Gendre To: "Dr. Arne Babenhauserheide" Subject: Re: How do you manage complex project with Org-mode Date: Wed, 02 Mar 2022 21:00:15 +0100 In-reply-to: <87fso2awqa.fsf@web.de> Message-ID: <87h78gt7ti.fsf@k-7.ch> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: permerror client-ip=185.31.100.96; envelope-from=seb@k-7.ch; helo=gandalf.k-7.ch X-Spam_score_int: -6 X-Spam_score: -0.7 X-Spam_bar: / X-Spam_report: (-0.7 / 5.0 requ) BAYES_00=-1.9, KHOP_HELO_FCRDNS=0.187, PDS_RDNS_DYNAMIC_FP=0.001, RDNS_DYNAMIC=0.982, SPF_HELO_NONE=0.001, TVD_RCVD_IP=0.001, T_SCC_BODY_TEXT_LINE=-0.01, T_SPF_PERMERROR=0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-orgmode@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: emacs-orgmode@gnu.org Errors-To: emacs-orgmode-bounces+larch=yhetil.org@gnu.org Sender: "Emacs-orgmode" X-Migadu-Flow: FLOW_IN X-Migadu-Country: US ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1646253876; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=sUrje44CijBXPHdF/3ZtlT9Sye5Zkryjo1nNv0UZFME=; b=FvmIvyckilthDUbubG+HxamqL9q/1+AnfLdihN2QQpm+qP8Bbmse9EruDeq6azDOhawSwM vkL3in69CvewhBfp6HynIcXQspQrIAyigNSsDw7oZ/2PFN2ZqMcHSBLhOCloJpJIgC7Dqv 6Cawd+rLx8dtqixeW03ECKzH0f4Qurmfla+6h8c6D4AIgv8yXxINnUSqDxiqRaDyGf1o6O cOHoFyyyhVyO7dOJOeazr4WDaPzkzvQvWqMYXG+k6mjeyLlJqFFDc9GQZfaPwKS1RsKOzS 2FWbPNu89ZXVd8OcoMaV03AfI/L/0mDgg50Ff/vnJrQhw5wEAIplyEq/nev9uA== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1646253876; a=rsa-sha256; cv=none; b=VSoGihLiDR5fmF6i5egsg9703EagPx3+zlPMlHNppSTDvjepCjfwtJhpvfvNRrBsn7Gobm /8E2Q5tK0m19JBPiTO4zRPChIDfg3ga/yHU3WtJVyoQ+1YYwmBCl3ieMBlm0EjeYLKzkOn 6KFAe3G5J8O+2vAthhSp4qsSFj/8OMq9a44KL38bydjrj5MM+c2MXRh98Bi9EiepNSeDlm MQ72yA2pJ4j6Du0+9XS90OaCZrBi6RI9YUHvBqkGi5zl7c4xm/0MzvKVgEqJkz8oP6cxAi 906RExL7GtzFYGAbRPIkty6QyFQmrJfe023mM6E41GfId4kQTVtVWWVSog8Ssw== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of "emacs-orgmode-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="emacs-orgmode-bounces+larch=yhetil.org@gnu.org" X-Migadu-Spam-Score: -4.37 Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of "emacs-orgmode-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="emacs-orgmode-bounces+larch=yhetil.org@gnu.org" X-Migadu-Queue-Id: 5F843176F3 X-Spam-Score: -4.37 X-Migadu-Scanner: scn0.migadu.com X-TUID: EH2nXpaCkYd2 Hello Arne, Thank you for your reply and advice. :) "Dr. Arne Babenhauserheide" writes: > Do I understand it right that what you need is to track the time > required to reach milestones, not following the *progress*? Well, what I want by "follow the progress" is to see: * How many work I have done * How many work remains to be done * How many time left * How many time other project need I want to avoid spending to much time on a project sufficiently finished to the detriment of another project. Or, if no project can be finished, do enough of work to have a not so bad grade. As you suggest, having milestone with their own deadline seems to be a great idea. A better idea that having one big task for representing an entire project (like I wanted to do). I will try using effort estimation. But I will avoid customizing too much Org-mode. In the past, I ended up several times with a too much complex workflow. I think I will make a "Project" workflow. Something simple: * Each project is a headline with the status "PROJECT" * Each project have the deadline defined by the school work deadline * Each project have a complete description with every info needed to work * Each project have one or many tasks (as sub headlines with a status) * Each task have a importance, time and effort estimation * Each task have its own deadline, distributed along the remaining time * When I set a task deadline, I look at its estimations and also other proj= ects tasks * To create a new project, I use Org-capture with a template Every time I create a new project, it start with one task: "Planning the project". With a deadline at 2 days max. The description of this task is a checkbox list of thing to do when planning the project. And finally, 2 times per week, I got a repetitive task: "Review the projects progress". With this, I should be able to adjust spending time and effort. I think it would be simple and need only a few Org-mode configurations. And by doing like that, every time I look at the agenda, I will see what work I need to do every days. Task of each project or review of all projects. "Dr. Arne Babenhauserheide" writes: > [[PGP Signed Part:Undecided]] > Hello Seb, > > It sounds like org-mode can be a great fit. > > S=C3=A9bastien Gendre writes: >> But, as a student, I regularly have big and important projects to do for >> the school. The kind of project who need several days to be done, with >> deadlines too soon, and if you fail one them the consequences can be >> disastrous. And generally, I have to many of these project in the same >> time and not enough time to do all the work. So, I also need to follow >> the progress of each project to choose which is sufficiently advanced to >> be stop for the benefit of another less advanced project. > > Do I understand it right that what you need is to track the time > required to reach milestones, not following the *progress*? So following > progress seems like it would take more mental bandwidth than needed. > > You could have one org-mode task (headline) per milestone, with a > DEADLINE (org-deadline), and then SCHEDULE (org-schedule) appointments. > > To track how much time you will still need, you can use org-set-effort. > I did that at work for a while to train to get better at estimating. By > having the effort in a clocktable I could see progress *when needed*. > Hitting R in the org-agenda shows the clockreport-mode and you can see > the Effort in the agenda by setting > (org-agenda-clockreport-parameter-plist (quote (:link t :maxlevel 2 > :properties ("Effort")))). For a while I had the clocktable active by > default. > > You can also add that to the column-mode (org-columns) to get a quick > overview for a file (leave with org-columns-quit). Customize: > (org-columns-default-format > "%25ITEM %TODO %3PRIORITY %TAGS %17Effort(Estimated Effort){:} %CLOCKS= UM") > >> And I don't know how to manage this kind of projects with Org-mode. How >> to do it, without failing a 6 days project because I spent to much time >> on something else and I have only 3 days left with 3 half-day important >> appointment I cannot cancel. I can't risk failing a single one of these >> project by trying. So, when I am in a period with a lot of these >> projects, I stop using Org-mode and concentrate on doing these project >> as fast as I can. And because I often have this kind of project, I spend >> most of the year without being able to use Org-mode. > > I found that org-mode is the only organization tool for which using the > tool actually reduces the time I need for organization. That works by > taking notes in org-mode, too, and keeping it simple. > > What I do: > > ** Custom starting point: agenda-with-kanban > A function to show the agenda it besides the Kanban table. I start > each day and after each larger break by hitting F12. It shows me the > agenda and entry points into my work. This enables me to stay focussed. > > ** One planning file > I have a single file for all my tasks. That keeps working > surprisingly long. Once a year or so it needs some cleanup to become > faster again. > > ** Kanban Table at the top > I have a kanban table. It shows as most important information the > tasks I am doing right now. If I am doing more than three work-tasks > at the same time, it=E2=80=99s warning sign that I=E2=80=99m becoming i= nefficient. > With this I start every day in org-mode by clicking on the link of the > project from the kanban table to get to its notes (which I also track > in org-mode). See > https://www.draketo.de/light/english/free-software/el-kanban-org-table > =E2=86=92 https://hg.sr.ht/~arnebab/kanban.el > > ** Capture tasks for Projects > Projects have as many tasks as I need to track. At work they are > usually Stories (3-5 days). Nowadays I create new tasks by using > org-capture templates with one template per larger project and one for > bugs, but I used to just use two templates (which might be a > better fit for you): > - (i) task to start immediately and > - (l) task to start later > > ** Setup > > (with-eval-after-load 'org > (setq org-agenda-custom-commands > '(("o" "Agenda and TODOs" > ((agenda) ; nil ((org-agenda-compact-blocks nil)(org-agenda-bl= ock-separator ?-)(org-agenda-overriding-header ""))) > (tags-todo "-notodo-TERMIN" ((org-agenda-block-separator ?-))) > (tags "KANBAN" ((org-agenda-block-separator ?-) > (org-agenda-compact-blocks nil) > (org-agenda-overriding-header "")))))))) > (defun my/org-agenda-show-kanban () > (interactive) > (save-excursion > (search-forward ":KANBAN:") > (org-agenda-goto) > (org-narrow-to-subtree) > (show-all) > (fit-window-to-buffer) > (widen) > (recenter-top-bottom 0))) > > (defun agenda-and-todo () > (interactive) > (org-agenda nil "o") > (delete-other-windows) > (my/org-agenda-show-kanban) > ;; desktop systemsettings shortcuts: map f12 to > ;; emacsclient -e '(progn (show-frame)(agenda-and-todo))' > (global-set-key (kbd "") 'agenda-and-todo) > > > >> So, if you have any suggestion on how to manage, in Org-mode, projects >> with: >> * Lot of work to do (many days) >> * Short deadline (not enough time) > > This is something to fix. Also outside org. Always feeling like having > to catch-up can burn you out otherwise. > > As an analogy: Even if you have to sprint sometimes, what you really > want to do is to take a brisk walk, so you can still talk to your fellow > students and think about the best way to address the tasks =E2=80=94 do t= hings > well thought-out. > >> * High importance (disastrous consequences in my future in case of fail) >> * Many of them in the same time >> * Progression need to be followed to chose where to sacrifice time to >> limit the damages > > Ideally have a plan beforehand which things to drop when time becomes > tight. For example tag them or such. These are optional, otherwise you > could not drop them when times becomes tight. > > > > (also I have a nicer clocktable layout so level2-entries look good: > > ;; nicer org clocktable layout > (defun my-org-clocktable-indent-string (level) > (if (=3D level 1) > "" > (let ((str "=E2=94=94")) > (while (> level 2) > (setq level (1- level) > str (concat str "=E2=94=80=E2=94=80"))) > (concat str "=E2=94=80> ")))) > (advice-add 'org-clocktable-indent-string :override #'my-org-clocktable-i= ndent-string) > ) > > Here=E2=80=99s the relevant part of my org-agenda setup: > > (use-package org-agenda > :defer 8 > :custom > ;; provide desktop alerts, so I can have appointments in org-mode, too > (alert-default-style 'libnotify) > (appt-disp-window-function 'alert-for-appt) > (org-agenda-include-diary t) > (appt-delete-window-function (lambda ())) > (org-agenda-clockreport-parameter-plist (quote (:link t :maxlevel 2 :pr= operties ("Effort")))) > (org-columns-default-format > "%25ITEM %TODO %3PRIORITY %TAGS %17Effort(Estimated Effort){:} %CLOCKS= UM") > (org-global-properties > '(("Effort_ALL" . "0:30 1:00 2:00 3:00 6:00 8:00 16:00 40:00"))) > (org-agenda-start-with-clockreport-mode t) > :config > ;; Rebuild the reminders everytime the agenda is displayed > (add-hook 'org-agenda-finalize-hook (lambda () (org-agenda-to-appt t))) > ;; Run once when Emacs starts > (org-agenda-to-appt t) > ;; Activate appointments so we get notifications > (appt-activate t) > (defun appt-reparse-diary-file () > "force reparsing the diary file" > (appt-check t)) > (add-to-list 'midnight-hook 'appt-reparse-diary-file)) > > > Best wishes, > Arne