summaryrefslogtreecommitdiffstats
path: root/2021/captions/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--main.vtt
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--2021/captions/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--main.vtt565
1 files changed, 565 insertions, 0 deletions
diff --git a/2021/captions/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--main.vtt b/2021/captions/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--main.vtt
new file mode 100644
index 00000000..16aa366c
--- /dev/null
+++ b/2021/captions/emacsconf-2021-project--budgeting-project-monitoring-and-invoicing-with-org-mode--adolfo-villafiorita--main.vtt
@@ -0,0 +1,565 @@
+WEBVTT
+
+00:01.040 --> 00:00:02.800
+Hi, I am Adolfo Villafiorita.
+
+00:00:02.800 --> 00:00:04.799
+I am the co-founder of Shair.Tech,
+
+00:00:04.799 --> 00:00:07.200
+an innovative-- a socially-vocated
+
+00:00:07.200 --> 00:00:10.558
+innovative startup in Italy.
+
+00:00:10.559 --> 00:00:13.280
+Today I'm gonna talk about the way in which
+
+00:00:13.280 --> 00:00:17.680
+we use Org mode to budget our projects.
+
+00:00:17.680 --> 00:00:19.039
+First, I need to introduce the way
+
+00:00:19.039 --> 00:00:21.279
+in which we build our project budget.
+
+00:21.279 --> 00:00:22.480
+We start from the goals
+
+00:00:22.480 --> 00:00:24.720
+and the work to be performed,
+
+00:24.720 --> 00:00:29.840
+and we split it into different tasks
+
+00:29.840 --> 00:00:31.920
+which may be grouped in different ways,
+
+00:31.920 --> 00:00:33.440
+according to our needs.
+
+00:00:33.440 --> 00:00:36.800
+It could be user stories or functional groups
+
+00:00:36.800 --> 00:00:40.719
+or packages, and then for each task,
+
+00:00:40.719 --> 00:00:44.000
+we compute the effort.
+
+00:44.000 --> 00:00:45.440
+Then from the effort,
+
+00:00:45.440 --> 00:00:49.840
+we derive the project cost and price
+
+00:49.840 --> 00:00:52.239
+according to two different approaches.
+
+00:52.239 --> 00:00:53.280
+The first approach:
+
+00:00:53.280 --> 00:00:56.320
+we allocate the effort to each resource
+
+00:56.320 --> 00:00:59.680
+and we multiply the effort of the resource
+
+00:00:59.680 --> 00:01:01.359
+by the price of the results.
+
+00:01:01.359 --> 00:01:04.320
+We sum all the efforts together,
+
+00:01:04.320 --> 00:01:07.280
+and then we sum all the tasks together,
+
+00:01:07.280 --> 00:01:09.600
+the prices of all the tasks together.
+
+00:01:09.600 --> 00:01:11.200
+In the second approach,
+
+00:01:11.200 --> 00:01:16.400
+we use a generic effort estimation
+
+00:01:16.400 --> 00:01:20.799
+for each task, without allocating the effort
+
+00:01:20.799 --> 00:01:22.560
+to any specific person,
+
+00:01:22.560 --> 00:01:25.119
+and we multiply this effort
+
+00:01:25.119 --> 00:01:29.040
+by the average price of the resource.
+
+01:29.040 --> 00:01:34.720
+In both cases, the price is computed
+
+01:34.720 --> 00:01:40.079
+by summing cost to overheads and profit.
+
+00:01:40.079 --> 00:01:41.040
+We're a small company.
+
+00:01:41.040 --> 00:01:42.719
+We can choose our toolchain.
+
+00:01:42.720 --> 00:01:44.960
+So we decided to use Org mode
+
+00:01:44.960 --> 00:01:47.360
+for writing our proposals.
+
+01:47.360 --> 00:01:49.200
+We built a template.
+
+00:01:49.200 --> 00:01:54.159
+The template has got a fixed structure
+
+01:54.159 --> 00:01:56.880
+which allows us to do a lot of reuse,
+
+01:56.880 --> 00:01:59.600
+and some Emacs Lisp code
+
+00:01:59.600 --> 00:02:01.040
+and Org mode features
+
+00:02:01.040 --> 00:02:04.079
+to build the project tables.
+
+00:02:04.079 --> 00:02:07.600
+Let me show you, without further ado,
+
+00:02:07.600 --> 00:02:11.760
+the template which is shown here.
+
+02:11.760 --> 00:02:15.520
+Basically it is a fairly standard
+
+02:15.520 --> 00:02:17.750
+Org mode document.
+
+02:20.800 --> 00:02:23.760
+There are some sections here.
+
+02:23.760 --> 00:02:28.879
+Let me show you the structure here.
+
+02:28.879 --> 00:02:30.000
+There are some sections,
+
+00:02:30.000 --> 00:02:34.959
+some of which are not exported /
+
+00:02:34.959 --> 00:02:36.640
+shown to the client,
+
+02:36.640 --> 00:02:39.519
+because they are of no interest to them,
+
+02:39.519 --> 00:02:41.040
+such as, for instance,
+
+00:02:41.040 --> 00:02:43.280
+the plaintext of each
+
+00:02:43.280 --> 00:02:45.440
+ledger accounting entries
+
+02:45.440 --> 00:02:47.440
+we generate for the project
+
+02:47.440 --> 00:02:53.680
+or some info about the detailed budget data,
+
+00:02:53.680 --> 00:02:56.319
+while others are shared with the clients
+
+00:02:56.319 --> 00:02:58.399
+to form a project proposal.
+
+00:02:58.400 --> 00:03:00.400
+Now the structure is not really important
+
+00:03:00.400 --> 00:03:02.720
+in the sense that the only constraint
+
+00:03:02.720 --> 00:03:05.360
+and requirement we set
+
+00:03:05.360 --> 00:03:07.599
+is that there has to be a section
+
+03:07.599 --> 00:03:10.800
+with an ID named plan,
+
+03:10.800 --> 00:03:15.840
+which will contain the project plan.
+
+03:15.840 --> 00:03:21.040
+Here, for instance, we have a project plan
+
+00:03:21.040 --> 00:03:23.599
+made of a user story
+
+03:23.599 --> 00:03:25.360
+whose development is split into
+
+00:03:25.360 --> 00:03:27.360
+three different tasks.
+
+03:27.360 --> 00:03:30.080
+For each task, let me show you
+
+00:03:30.080 --> 00:03:33.200
+just the structure
+
+00:03:33.200 --> 00:03:37.279
+before the application of the template.
+
+03:37.280 --> 00:03:45.200
+For each task, you need to define the effort.
+
+00:03:45.200 --> 00:03:47.360
+Here, for instance, we have an effort,
+
+00:03:47.360 --> 00:03:50.480
+a generic effort not allocated to any person.
+
+03:50.480 --> 00:03:52.400
+We use Org mode duration,
+
+00:03:52.400 --> 00:03:54.799
+60 stands for 60 minutes,
+
+03:54.799 --> 00:03:57.680
+and here we have an effort profile.
+
+00:03:57.680 --> 00:04:02.000
+So in task 1.2, Adolfo will work 10 days
+
+00:04:02.000 --> 00:04:04.159
+and Michele 20 days.
+
+04:04.159 --> 00:04:06.000
+These are working days,
+
+00:04:06.000 --> 00:04:07.439
+so one working day
+
+00:04:07.439 --> 00:04:09.760
+corresponds to eight hours.
+
+04:09.760 --> 00:04:13.519
+This is standard. We might revise these
+
+04:13.519 --> 00:04:15.040
+to become more compliant
+
+00:04:15.040 --> 00:04:19.759
+with the definition given by Org mode.
+
+00:04:19.759 --> 00:04:23.040
+Notice that you can or cannot,
+
+00:04:23.040 --> 00:04:26.720
+you may or may not use TODO keywords here,
+
+00:04:26.720 --> 00:04:29.199
+if you want. We don't usually use them
+
+00:04:29.199 --> 00:04:31.360
+because the final document
+
+00:04:31.360 --> 00:04:34.720
+looks nice to the customer without TODO.
+
+00:04:34.720 --> 00:04:38.479
+We then add them when we move to
+
+00:04:38.479 --> 00:04:40.719
+a later stage.
+
+04:40.720 --> 00:04:43.040
+So once you define the plan
+
+00:04:43.040 --> 00:04:45.600
+with the effort allocation,
+
+04:45.600 --> 00:04:51.440
+you can go back to the Emacs Lisp part
+
+00:04:51.440 --> 00:04:55.680
+where you can set three different variables
+
+04:55.680 --> 00:04:59.680
+to define the hourly rates of your team.
+
+04:59.680 --> 00:05:02.880
+So for instance, here I am taking
+
+00:05:02.880 --> 00:05:06.160
+10 euros per hour
+
+00:05:06.160 --> 00:05:09.680
+(not real rate, actually), and Michele at 20.
+
+05:09.680 --> 00:05:11.360
+And then you can set the profit
+
+00:05:11.360 --> 00:05:14.560
+as a percentage on top of the hourly rate
+
+00:05:14.560 --> 00:05:16.160
+and profit as a percentage
+
+00:05:16.160 --> 00:05:19.360
+on top of hourly rates.
+
+05:19.360 --> 00:05:24.000
+The ballpark effort allocation here
+
+00:05:24.000 --> 00:05:28.880
+is used to compute the average tariff,
+
+05:28.880 --> 00:05:32.160
+our average hourly rate,
+
+05:32.160 --> 00:05:33.600
+as a weighted average.
+
+00:05:33.600 --> 00:05:36.320
+So here I'm saying that on average,
+
+00:05:36.320 --> 00:05:40.639
+I will work 30% of the effort of each task,
+
+00:05:40.639 --> 00:05:42.400
+while Michele will take care of
+
+00:05:42.400 --> 00:05:47.280
+the remaining 70%, and the hourly rate
+
+00:05:47.280 --> 00:05:48.720
+is computed by multiplying
+
+00:05:48.720 --> 00:05:57.120
+30% by 10 + 70% by 20.
+
+05:57.120 --> 00:06:00.880
+If I do a C-c C-c here, I execute
+
+00:06:00.880 --> 00:06:05.440
+the Emacs Lisp code
+
+00:06:05.440 --> 00:06:07.439
+in the source code block.
+
+00:06:07.440 --> 00:06:08.880
+As you can see,
+
+00:06:08.880 --> 00:06:15.759
+Emacs put back the properties
+
+06:15.759 --> 00:06:17.840
+that transform the effort
+
+00:06:17.840 --> 00:06:19.600
+into a total amount:
+
+00:06:19.600 --> 00:06:22.800
+namely, the effort is first transformed
+
+00:06:22.800 --> 00:06:24.479
+into working hours,
+
+06:24.479 --> 00:06:27.280
+the rates and costs are computed,
+
+06:27.280 --> 00:06:28.880
+overhead computed,
+
+00:06:28.880 --> 00:06:32.160
+and everything contributes
+
+00:06:32.160 --> 00:06:34.639
+to the total amount.
+
+06:34.639 --> 00:06:37.600
+Same thing here.
+
+00:06:37.600 --> 00:06:41.440
+The cost is slightly more complex
+
+00:06:41.440 --> 00:06:45.360
+because we use profiled effort,
+
+06:45.360 --> 00:06:47.199
+and so on and so forth.
+
+00:06:47.199 --> 00:06:49.680
+This information here
+
+00:06:49.680 --> 00:06:56.960
+can be then grouped up
+
+06:56.960 --> 00:06:59.759
+to form the project plan
+
+00:06:59.759 --> 00:07:01.599
+and project budget.
+
+00:07:01.599 --> 00:07:03.039
+As you can see,
+
+07:03.039 --> 00:07:06.880
+this is something we do not export
+
+07:06.880 --> 00:07:09.440
+in the project proposal to the client,
+
+07:09.440 --> 00:07:10.880
+because we prefer to do
+
+00:07:10.880 --> 00:07:13.199
+some rounding by hand
+
+07:13.199 --> 00:07:14.880
+in order to build a budget
+
+00:07:14.880 --> 00:07:20.880
+which is, let's say, more reasonable.
+
+07:20.880 --> 00:07:24.639
+This table here computes VAT
+
+00:07:24.639 --> 00:07:28.159
+on total amounts by C-c C-c once again.
+
+00:07:28.160 --> 00:07:31.120
+Then this table here, the payment structure
+
+00:07:31.120 --> 00:07:36.080
+is used to compute the amount to be paid
+
+00:07:36.080 --> 00:07:39.280
+according to the different payments
+
+00:07:39.280 --> 00:07:40.800
+we want to set in the project.
+
+00:07:40.800 --> 00:07:42.160
+Here, for instance, we are setting
+
+00:07:42.160 --> 00:07:45.919
+three payments with the following percentages,
+
+00:07:45.919 --> 00:07:49.199
+and the table, you set the dates and amounts,
+
+00:07:49.199 --> 00:07:53.440
+and the table keeps track of the rest
+
+00:07:53.440 --> 00:07:56.479
+by looking at the total amount
+
+07:56.479 --> 00:08:00.800
+it finds here in the budget table,
+
+00:08:00.800 --> 00:08:03.280
+so the payment structure and budget
+
+00:08:03.280 --> 00:08:07.280
+are then used by this piece of code here
+
+08:07.280 --> 00:08:12.000
+to build the entries
+
+00:08:12.000 --> 00:08:16.720
+used for our internal accounting,
+
+08:16.720 --> 00:08:21.038
+which is based on hledger.
+
+08:21.039 --> 00:08:23.759
+We did everything here by hand,
+
+08:23.759 --> 00:08:26.400
+but it is not necessary, of course,
+
+08:26.400 --> 00:08:31.280
+because if you export the document
+
+00:08:31.280 --> 00:08:34.880
+using C-c C-e and then, for instance,
+
+00:08:34.880 --> 00:08:39.760
+l for LaTeX and p for PDF,
+
+08:39.760 --> 00:08:43.279
+Org mode takes care of evaluating
+
+00:08:43.279 --> 00:08:46.480
+each piece of code in the document
+
+00:08:46.480 --> 00:08:50.720
+and generate the updated documents.
+
+00:08:50.720 --> 00:08:52.000
+Here, for instance, you can see
+
+00:08:52.000 --> 00:08:55.680
+that the PDF generated from the template
+
+00:08:55.680 --> 00:08:57.440
+which contains all the tables, budget,
+
+00:08:57.440 --> 00:08:59.920
+and payment schema, everything,
+
+00:08:59.920 --> 00:09:02.240
+which we use to make an offer
+
+00:09:02.240 --> 00:09:07.999
+to our clients.
+
+09:08.000 --> 00:09:10.000
+There are various advantages,
+
+00:09:10.000 --> 00:09:12.640
+the first, the main one being that
+
+00:09:12.640 --> 00:09:15.600
+we keep all the information in one place,
+
+09:15.600 --> 00:09:17.920
+and that we can version
+
+00:09:17.920 --> 00:09:20.399
+the different versions.
+
+00:09:20.399 --> 00:09:21.680
+You can use source control
+
+00:09:21.680 --> 00:09:24.640
+to version different iterations
+
+00:09:24.640 --> 00:09:26.080
+on the document.
+
+09:26.080 --> 00:09:28.000
+If you want, you can find the document here.
+
+00:09:28.000 --> 00:09:33.120
+Thank you for your attention,
+
+00:09:33.120 --> 00:09:34.120
+and I'm open to questions.
+
+00:09:34.120 --> 00:09:37.279
+[captions by sachac]