-
Notifications
You must be signed in to change notification settings - Fork 0
/
blog_timetrackr.html
579 lines (504 loc) · 20 KB
/
blog_timetrackr.html
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
566
567
568
569
570
571
572
573
574
575
576
577
578
579
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta http-equiv="X-UA-Compatible" content="IE=EDGE" />
<title>It’s Time To Shine with {timetrackR}</title>
<script src="site_libs/header-attrs-2.14/header-attrs.js"></script>
<script src="site_libs/jquery-3.6.0/jquery-3.6.0.min.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link href="site_libs/bootstrap-3.3.5/css/paper.min.css" rel="stylesheet" />
<script src="site_libs/bootstrap-3.3.5/js/bootstrap.min.js"></script>
<script src="site_libs/bootstrap-3.3.5/shim/html5shiv.min.js"></script>
<script src="site_libs/bootstrap-3.3.5/shim/respond.min.js"></script>
<style>h1 {font-size: 34px;}
h1.title {font-size: 38px;}
h2 {font-size: 30px;}
h3 {font-size: 24px;}
h4 {font-size: 18px;}
h5 {font-size: 16px;}
h6 {font-size: 12px;}
code {color: inherit; background-color: rgba(0, 0, 0, 0.04);}
pre:not([class]) { background-color: white }</style>
<script src="site_libs/navigation-1.1/tabsets.js"></script>
<link href="site_libs/highlightjs-9.12.0/default.css" rel="stylesheet" />
<script src="site_libs/highlightjs-9.12.0/highlight.js"></script>
<link href="site_libs/font-awesome-5.1.0/css/all.css" rel="stylesheet" />
<link href="site_libs/font-awesome-5.1.0/css/v4-shims.css" rel="stylesheet" />
<style type="text/css">
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
span.underline{text-decoration: underline;}
div.column{display: inline-block; vertical-align: top; width: 50%;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
</style>
<style type="text/css">code{white-space: pre;}</style>
<script type="text/javascript">
if (window.hljs) {
hljs.configure({languages: []});
hljs.initHighlightingOnLoad();
if (document.readyState && document.readyState === "complete") {
window.setTimeout(function() { hljs.initHighlighting(); }, 0);
}
}
</script>
<style type = "text/css">
.main-container {
max-width: 940px;
margin-left: auto;
margin-right: auto;
}
img {
max-width:100%;
}
.tabbed-pane {
padding-top: 12px;
}
.html-widget {
margin-bottom: 20px;
}
button.code-folding-btn:focus {
outline: none;
}
summary {
display: list-item;
}
details > summary > p:only-child {
display: inline;
}
pre code {
padding: 0;
}
</style>
<style type="text/css">
.dropdown-submenu {
position: relative;
}
.dropdown-submenu>.dropdown-menu {
top: 0;
left: 100%;
margin-top: -6px;
margin-left: -1px;
border-radius: 0 6px 6px 6px;
}
.dropdown-submenu:hover>.dropdown-menu {
display: block;
}
.dropdown-submenu>a:after {
display: block;
content: " ";
float: right;
width: 0;
height: 0;
border-color: transparent;
border-style: solid;
border-width: 5px 0 5px 5px;
border-left-color: #cccccc;
margin-top: 5px;
margin-right: -10px;
}
.dropdown-submenu:hover>a:after {
border-left-color: #adb5bd;
}
.dropdown-submenu.pull-left {
float: none;
}
.dropdown-submenu.pull-left>.dropdown-menu {
left: -100%;
margin-left: 10px;
border-radius: 6px 0 6px 6px;
}
</style>
<script type="text/javascript">
// manage active state of menu based on current page
$(document).ready(function () {
// active menu anchor
href = window.location.pathname
href = href.substr(href.lastIndexOf('/') + 1)
if (href === "")
href = "index.html";
var menuAnchor = $('a[href="' + href + '"]');
// mark it active
menuAnchor.tab('show');
// if it's got a parent navbar menu mark it active as well
menuAnchor.closest('li.dropdown').addClass('active');
// Navbar adjustments
var navHeight = $(".navbar").first().height() + 15;
var style = document.createElement('style');
var pt = "padding-top: " + navHeight + "px; ";
var mt = "margin-top: -" + navHeight + "px; ";
var css = "";
// offset scroll position for anchor links (for fixed navbar)
for (var i = 1; i <= 6; i++) {
css += ".section h" + i + "{ " + pt + mt + "}\n";
}
style.innerHTML = "body {" + pt + "padding-bottom: 40px; }\n" + css;
document.head.appendChild(style);
});
</script>
<!-- tabsets -->
<style type="text/css">
.tabset-dropdown > .nav-tabs {
display: inline-table;
max-height: 500px;
min-height: 44px;
overflow-y: auto;
border: 1px solid #ddd;
border-radius: 4px;
}
.tabset-dropdown > .nav-tabs > li.active:before {
content: "";
font-family: 'Glyphicons Halflings';
display: inline-block;
padding: 10px;
border-right: 1px solid #ddd;
}
.tabset-dropdown > .nav-tabs.nav-tabs-open > li.active:before {
content: "";
border: none;
}
.tabset-dropdown > .nav-tabs.nav-tabs-open:before {
content: "";
font-family: 'Glyphicons Halflings';
display: inline-block;
padding: 10px;
border-right: 1px solid #ddd;
}
.tabset-dropdown > .nav-tabs > li.active {
display: block;
}
.tabset-dropdown > .nav-tabs > li > a,
.tabset-dropdown > .nav-tabs > li > a:focus,
.tabset-dropdown > .nav-tabs > li > a:hover {
border: none;
display: inline-block;
border-radius: 4px;
background-color: transparent;
}
.tabset-dropdown > .nav-tabs.nav-tabs-open > li {
display: block;
float: none;
}
.tabset-dropdown > .nav-tabs > li {
display: none;
}
</style>
<!-- code folding -->
</head>
<body>
<div class="container-fluid main-container">
<div class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-bs-toggle="collapse" data-target="#navbar" data-bs-target="#navbar">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="index.html">Jessica Lavery</a>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
</ul>
<ul class="nav navbar-nav navbar-right">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
portfolio
<span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
<li>
<a href="portfolio_onc.html">Current: Oncology</a>
</li>
<li>
<a href="portfolio_obgyn.html">Past Experience: Obstetrics & Gynecology</a>
</li>
<li>
<a href="portfolio_service.html">Service</a>
</li>
</ul>
</li>
<li>
<a href="files/lavery_pagedown_resume.html">CV</a>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
blog
<span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
<li>
<a href="blog_grad_school.html">Deciding on a Doctorate in Biostatistics</a>
</li>
<li>
<a href="blog_timetrackr.html">{timetrackR}</a>
</li>
<li>
<a href="blog_cws_social_media_webinar.html">CWS Social Media Webinar</a>
</li>
</ul>
</li>
<li>
<a href="hobbies.html">hobbies</a>
</li>
<li>
<a href="https://www.mskcc.org/profile/jessica-lavery">
<span class="fa fa-envelope fa-lg"></span>
</a>
</li>
<li>
<a href="https://scholar.google.com/citations?user=4_XbhlgAAAAJ&hl=en">
<span class="ai ai-google-scholar-square ai-lg"></span>
</a>
</li>
<li>
<a href="https://www.linkedin.com/in/jalavery/">
<span class="fa fa-linkedin fa-lg"></span>
</a>
</li>
<li>
<a href="https://github.com/jalavery">
<span class="fa fa-github fa-lg"></span>
</a>
</li>
</ul>
</div><!--/.nav-collapse -->
</div><!--/.container -->
</div><!--/.navbar -->
<div id="header">
<h1 class="title toc-ignore">It’s Time To Shine with {timetrackR}</h1>
<h4 class="date">June 2020</h4>
</div>
<p>While tracking time may seem like a mundane task that in and of
itself consumes your time, if monitored and assessed regularly it can be
useful to create a record of your work and to identify potential areas
for improving efficiency.</p>
<p>Existing time tracking apps and websites have default visualizations
and insights, but they are often behind a pay wall or not entirely
relevant to the academic research setting.</p>
<p>The <a
href="https://timetrackR.shinyapps.io/timetrackR/">{timetrackR}</a>
shinydashboard utilizes time tracking data from <a
href="https://toggl.com/">toggl</a> to provide a high-level summary of
the percentage of time spent by project, client, task or project phase;
the total number of hours spent on each project or by client; and a
timeline framing each project’s trajectory from planning through
analysis and manuscript preparation. These simple metrics can be
effective in performing a time audit to identify patterns that you may
not have otherwise observed, and can be used to inform your priorities
and responsibilities going forward.</p>
<p>{timetrackR} was previously presented at <a
href="https://www.meetup.com/rladies-newyork/events/268481404/">RLadies
NYC</a> (February 2020) and at Memorial Sloan Kettering Cancer Center’s
Strategy and Innovation R Presenters series (April 2020). Both
presentations can be found on the <a
href="https://github.com/jalavery/timetrackR">{timetrackR} GitHub
repository</a>.</p>
<div id="why-track-your-time" class="section level3">
<h3>Why track your time?</h3>
<p>As a statistician working with multiple collaborators at any given
time, it can often feel like there aren’t enough hours in the day. I
might start the day working on one project, check my email, bounce to
another project, the phone rings and I have an impromptu meeting, I get
back to that first project and all of a sudden it’s 5pm and it’s time to
go home. In the short term, this works well; work is being accomplished
and projects are moving along. However, in the long term, I have no
recollection of how I have been spending my time. The inherent problem
with this is that <em>it’s hard to manage your time if you don’t know
how you’re spending your time</em>.</p>
<p>Further, there’s definitely some bias introduced by how much we enjoy
working on a particular project. It can feel like we spend a lot of time
on projects we don’t love and not enough time on projects we do. As a
resource to the institution, we’re balancing many different clients,
making it important to manage expectations and to work efficiently.</p>
</div>
<div id="how-to-track-your-time" class="section level3">
<h3>How to track your time</h3>
<p>The goal of documenting how you are spending your time is to answer
the question, “Where is my time going, and can it be allocated more
efficiently?”</p>
<p>Queue <a href="www.toggl.com">toggl</a>. There are many apps and
websites that allow you to document how you are spending your time, but
I chose to start with toggl due to its popularity among colleagues and
ease of use. toggl can be accessed via website or desktop app, and can
run in real time or you can retroactively enter your hours. Time is
grouped by <em>tasks, projects and clients</em>, and you can use
<em>tags</em> to further identify groups of tasks. Though I don’t use
it, toggl also offers functionality for documenting time across a team
and for tracking billable hours.</p>
<p>When I started tracking my time with toggl, I really liked that it
was free and that there wasn’t a lot of up-front set up required.
However, the free insights only include basic summaries of the total
hours per day and percent of time by project or client. Even if I were
to commit to the paid version, the additional insights pertain primarily
to billable hours, which isn’t as relevant to my work. The key feature
of toggl is that you can export your data. With this feature, enters
{timetrackR}.</p>
</div>
<div id="what-is-timetrackr" class="section level3">
<h3>What is {timetrackR}?</h3>
<p>{timetrackR} is a shinydashboard that takes recorded hours logged in
toggl and creates useful data visualizations and summaries of how you’re
spending your time.</p>
<p>I started working on it because I was interested in full
customizability with respect to how I was analyzing my time. From a
professional development perspective, at the time I initially started
working on {timetrackR} I didn’t know R, and I (naively) thought a shiny
app was the way to go. In hindsight, this was a jump straight into the
deep end, but the reactivity of shiny kept me interested and committed
to seeing the project through.</p>
<p>I created {timetrackR} looking to have simple, easy to interpret
metrics so that I didn’t have to spend all of my time analyzing my time.
I wanted something that I could use to get a big picture of how I was
spending my time so that I could make more accurate forecasts going
forward.</p>
</div>
<div id="time-tracking-metrics" class="section level3">
<h3>Time tracking metrics</h3>
<p><strong>Percent effort:</strong> Time spent per
project/client/project phase</p>
<p>Looking at a summary of percent effort, along with percent effort
over time, allows you to address things like allocated vs expended
effort, task management, and really figure out how to start protecting
your time.</p>
<p>In soft money environments, percent effort is especially useful for
figuring out how well current projects align with percent effort on a
grant. Though the percent of time isn’t expected to match up perfectly,
if you are funded for 5% of your salary for something that is taking up
80% of your time, some re-negotiation may be necessary.</p>
<p>As a statistician, much of the work that I do isn’t actually
statistics per se. There is a lot of collaborative work (meetings, phone
calls), data management, and manuscript writing. Taking a look at what
percent of my time is spent on each task can help me figure out if my
time is being appropriately allocated. Though I wouldn’t expect 100% of
my time to be spent on statistical analyses, if only 5% of my time were
being spent on analyses and the other 95% were being spent in meetings,
some re-evaluation would be necessary.</p>
<p>Lastly, examining your percent effort across projects and tasks can
be useful for protecting your time. I often look at what percentage of
my time is being spent on professional development activities, and
whether that is more or less than I want it to be. Further, it’s useful
to figure out what percentage of time is spent on departmental
activities (seminars, interviews, etc.) or other non-project work, so
that you can appropriately account for that when forecasting how long
you will need to complete a project.</p>
<p>Example of a lesson learned from using {timetrackR}: In the last 3
months, >75% of my time has been devoted to a single project. Can we
can bring someone else on to that project? (percent effort)</p>
<p><strong>Total hours:</strong> Cumulative number of hours spent on a
project or working with a client</p>
<p>Looking at total hours can be useful to examine the time invested to
products generated. For a time-intensive project, was the result
multiple manuscripts? Multiple grants? A publication in a high-impact
journal? This is really getting at whether you are getting a good return
on your time investment.</p>
<p>The total number of hours spent on a project can also be useful to
figure out when to cut your losses and when to pursue a project further.
If you’ve spent 200+ hours on a project and aren’t even close to
achieving the deliverable, maybe it’s time to assess whether that
project is feasible. Conversely, if you’ve spent 100+ hours on a
conference abstract or presentation but weren’t planning to turn it into
a manuscript, you may reconsider given that you’ve already put in a lot
of effort.</p>
<p>This is also a useful metric when guiding project workflow and
managing re-analysis. It can be used as a bargaining tool if re-analyses
are being requested, but a collaborator has not yet delivered on their
end. An example may be, “We’ve spent 130 hours on the analysis, please
circulate the manuscript draft before we complete additional
analyses.”</p>
<p>Example of a lesson learned from using {timetrackR}: I spent more
hours on a presentation for a conference than I thought I did. Maybe I
should turn that into a manuscript? (total hours)</p>
<p><strong>Project Timeline:</strong> Visualization of project phase by
calendar time</p>
<p>A project timeline demonstrates a big picture overview of what
projects are going on when and for how long. The basis for the figure is
a Gantt Chart, which is usually used prospectively, but good for a year
in review when used retrospectively. When I look at the project
timeline, I look at the tasks I had going on at a particular time
(manuscript writing, analysis, etc.) and compare how long each project
phase lasted across different types of projects. This helps to highlight
potential problems in project flow. One red flag is projects
transitioning between project planning, analysis, back to planning, back
to analysis - it indicates that there may be some project management
problems that need to be resolved before proceeding.</p>
<p>An example of a lesson learned from {timetrackR}: A particular
project transitioned between analysis and re-analysis several times
throughout the project’s life cycle. Is it time for a regroup with the
investigator? (project timeline)</p>
</div>
<div id="workflow-integration" class="section level3">
<h3>Workflow integration</h3>
<p>Have I convinced you of the utility of tracking your time yet? If so,
the next steps highlight how to integrate {timetrackR} into your
workflow.</p>
<p>On a daily basis: Use toggl (or another app, though timetrackR was
established to work directly with data from toggl, so using another app
may require some additional data manipulation before data can be read by
{timetrackR}) to document your time. This requires minimal setup for
projects and clients, and I spend less than 5 minutes per day
documenting my time.</p>
<p>Weekly? Monthly? Annually?: Export data from toggl into timetrackR to
look at how you’ve been spending your time. See the <a
href="https://timetrackR.shinyapps.io/timetrackR/"><em>About</em></a>
tab on {timetrackR} for instructions about how export your data from
toggl and into {timetrackR}.</p>
</div>
<div id="caveats" class="section level3">
<h3>Caveats</h3>
<p>Be careful about your denominators: All of the visualizations are
based on what you recorded. Your toggl time log doesn’t have to be
perfect, but if you forget to log your time for a few weeks, your
{timetrackR} visualizations won’t be entirely accurate.</p>
<p>Data viz is entirely retrospective: it’s a summary of what you’ve
done and doesn’t include projected time allocations. The idea is to
learn from past patterns to figure out how you want to allocate your
time going forward.</p>
</div>
<div id="summary" class="section level3">
<h3>Summary</h3>
<p>All in all, tracking and analyzing your time doesn’t have to be a
laborious process. In fact, very few metrics are needed to gain a
general understanding of how you’re spending your time. This information
can be used to align your work with how you intend to spend your
time.</p>
<p>Link to <a
href="https://timetrackR.shinyapps.io/timetrackR/">{timetrackR} app</a>
and <a href="https://github.com/jalavery/timetrackR">GitHub
repository</a></p>
</div>
</div>
<script>
// add bootstrap table styles to pandoc tables
function bootstrapStylePandocTables() {
$('tr.odd').parent('tbody').parent('table').addClass('table table-condensed');
}
$(document).ready(function () {
bootstrapStylePandocTables();
});
</script>
<!-- tabsets -->
<script>
$(document).ready(function () {
window.buildTabsets("TOC");
});
$(document).ready(function () {
$('.tabset-dropdown > .nav-tabs > li').click(function () {
$(this).parent().toggleClass('nav-tabs-open');
});
});
</script>
<!-- code folding -->
<!-- dynamically load mathjax for compatibility with self-contained -->
<script>
(function () {
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML";
document.getElementsByTagName("head")[0].appendChild(script);
})();
</script>
</body>
</html>