1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
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]
|