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]