00:00:14.370
This is kind of amazing because all these people are sitting in the back, so it looks like a wall of human beings. It's terrifying. Anyway, it's about time.
00:00:20.500
It's like, about time it is to realize this.
00:00:27.640
I have so many puns this time. So let's start.
00:00:33.190
Time is hard. For example, you may have thought this talk started at ten in the morning. Turns out here we are later. Time is really hard.
00:00:48.070
Regardless of what language you pick or which cool framework you are excited about, everyone uses timestamps, dates... Time is a really good thing. But it shouldn't terrify you. And a lot of times, you'll see this online: 'Just use UTC.'
00:01:07.690
You can just pick some hair products and stuff, and we see this a lot. We say lots of blog posts and Stack Overflow threads and lots of other things about just using UTC. I'm going to tell you that it’s absolutely mostly true, but there's a lot more to it than just using UTC.
00:01:23.860
So, let me hold one up. All the social media things, as you can see in this photo, I represent time, and my cat represents how terrified it should be of me. I just love this photo because a Stripe employee actually shot this photo and they hate money, proving this photo did actually happen.
00:01:37.020
Once upon a time, I worked at GitHub. I was there for like five years. I started in 2010, and for a long time, I would joke with one of my co-workers, saying, 'If you look at a lot of scheduling and calendar stuff in the past, you just kept telling Zach: whatever you do, never build a calendar.'
00:01:51.619
I'm not very good at following directions, and I built a billion calendars. So, we've run into all the really terrible edge cases involved with scheduling time and recurring events, and all that sort of stuff. We get all the terrible situations, but everybody wants to solve some of these problems at some point in their career.
00:02:05.729
I have dealt with different aspects of scheduling and straight-up timestamps, and I think it’s important to start figuring out how to make our time code more resilient and better for our users. I've thought about this a lot this year, making notes on what I want to cover in this talk, and I want to share some of the things I've learned.
00:02:30.090
Today’s talk has a couple of different sections. First, we'll discuss: what is time? Then, we'll dive into a really deep philosophical viewpoint of why time is so hard. Finally, we'll look at the code in time.
00:02:42.900
The first question is: what is time? It’s a question as old as time itself. This is a good question because physicists are now even asking, does time actually exist? Is this an actual thing, or like, is this time a relevant concept in quantum mechanics?
00:03:08.940
I don't really understand that sort of stuff. If you probably want to deal with quantum mechanics in your real jobs, I hope there's a gym for it out there. Anyway, we exist, and I think that's all that matters. We can go from there.
00:03:31.020
When you first start out, let’s take a brief timeline of time and provide some background on the source of all this. So, back in 4000 BC, people using astronomical clocks started having a concept of like what a day is, which is comforting to know.
00:03:49.590
Asserting that days would have subdivisions; prior to this, we just stepped outside and were like, 'Yeah, it's daytime.'
00:04:02.790
It wasn't until the 14th century that we started having fixed-length hours. Previously, the length of an hour changed based on the season, depending on the growing season. Most of everything surrounding our knowledge of time stems from farmers.
00:04:19.020
Farmers are really important in this field, like you couldn't just walk down the street to the market and grow your own food like farmers.
00:04:31.470
In the 16th century, we started having minutes. We really cared about this at that point because the technology to measure time with minute accuracy was just starting to materialize. But now, like, our ancestors had to start getting everything right and making sure they were going to work on time.
00:04:50.140
In the 19th century, we had to start figuring out how to synchronize time with cities; that led to the development of time zones because of the railroad industry. So we decided: we need to standardize hotel and railroad time, which started the move towards cities being synchronized.
00:05:09.370
They used the telegraph to synchronize time over distances, which was kind of cool. Then, finally in 1967, we started getting atomic standards, which were really exciting.
00:05:17.140
If you have a lot of cesium in your backyard, go grab one. It tells you that a second is defined as 9,192,631,770 cycles of radiation; that's one second, which is pretty cool.
00:05:30.580
Atomic clocks are pretty exciting too. They lose about one second every 1.4 million years, so definitely reschedule all your meetings based on this time. And like that would be really interesting, we like optical clocks, which are like a hundred thousand times more accurate.
00:05:46.940
So, if you have one of these optical clocks now, we can trace them back to the Big Bang from 13.8 billion years ago and it would have lost about four seconds of accuracy to this point, which is kind of amazing.
00:06:02.810
But humans are sometimes not terrible. Then there’s the whole time zone problem. You know, all this is a very standard process for all programmers.
00:06:15.470
Everything I just mentioned revolves around one simple question: what time is it? Cool, you know, but there’s an implicit part of this question that we never asked for a while: it’s always been, 'What time is it here?'
00:06:34.430
We didn’t really need the location because I could just walk down the street and, by the end of the day or something, I could figure out what the time was, but at some point, we started asking the question, 'What time is it over there?' That question ruined everything.
00:06:55.450
Now we have to start figuring out, like, well I know my time zones, the teachings, the Earth's curvature, and that sort of stuff. It really made everything a hassle.
00:07:16.880
This is one of my favorite kinds of photos: the universal dial plate from 1854. All these little dials indicate different cities and what time they were having at that moment compared to everything else.
00:07:34.460
So if you’ve got programming now, it’s tricky to program in JavaScript like in 1850; it would be kind of a hard time. All right, we’re going to make time a concept. We are about to make a time table and figure out how many times it should be happening.
00:07:53.770
We have 24-hour and 24-minute time indices. That’s obviously not correct. We have left 39 last time I checked, and this is the first step in realizing why everything is terrible.
00:08:05.890
Start figuring out how time zones get added gradually; it hasn't been just politics or economics, but people wanting to screw over their neighbors or something like that.
00:08:24.190
But time is a little bit weird; and this time some data, that’s updated, doesn’t always align. Sometimes you are given the Olson database, which is a standardized database that has all these rules on who is moving and what they let say.
00:08:37.060
This is really tricky to figure this all out. A lot of things that revolve around that are important to keep in mind when working with time zones.
00:08:50.340
For example, time zones are not just one-hour increments; there are a lot of time zones that differ by 30 minutes, 45 minutes, etc. All of these complications come from the fact that we are trying to navigate a political problem.
00:09:02.950
Now, specifically, why is time really hard? I’m happy to say that humans have been really bad at understanding time for a long time. And it's not just that you as a civilization are pretty bad at managing all of this stuff.
00:09:10.089
It’s kind of like if you built a really nice hotel or a nice house, you’ve got all the stuff in there that you really want. However, I think you feel that you’re built on a really terrible foundation.
00:09:21.760
Let me give you a quick example: does everybody remember December 30, 2011? One voice was like, 'Yes!' Everyone else was going, 'What?'
00:09:37.740
This is interesting because Samoa went from December 29, 2011, to December 31, 2011. This happened because they looked up and saw that all of their trading partners, like China, Australia, Japan, and us, were really busy working on a Friday and they were just starting their weekend.
00:09:53.980
They thought this was really weird because they should really be on the same day as their trading partners. That’s like the important part of this entity: American Samoa is about a hundred kilometers away.
00:10:07.450
That’s the separation between linked dates on the planet. Schools, they thought up and said, 'Wow, all our trading partners are on a different time zone compared to where we are.'
00:10:20.230
Alright, so here we are with the last UTC; last time I checked, UTC was at plus 12 hours. So, this is 24 hours ahead of America. And you know, the northern hemisphere hospitality, which is totally true, because American Samoa doesn't observe Daylight Savings Time!
00:10:39.110
But this was an interesting point to have. Samoans once had Daylight Savings Time before, but they push it back a year because of a small earthquake that happened.
00:10:57.100
And I thought, this is really weird. You were probably thinking, 'I’ve heard this story before.' You probably have, because it’s a long time. It’s a timeline...
00:11:08.320
So let's go back to 1892, when the opposite happened. They looked up and said, 'Well, our trading partners in the United States said we should move the day backward.' So in 1892, they shifted back their clocks so they could be in sync with the U.S.
00:11:31.120
This is exciting because it’s the United States. They didn't have to do fireworks twice in a row before; it was exciting. And all this was very similar to the next dilemma where they decided to implement the new rules.
00:11:49.450
All this stuff helped illustrate a deep distrust of collaboration. Now, I am not advocating for avoiding change; that would be dumb! But it’s important to know that things don’t always sync up smoothly.
00:12:01.830
One other quick example to note: we had to transition to the Gregorian calendar. Previously, Russia was on the Julian calendar, and England's on Gregorian. This is important because the Olympics were taking place in London!
00:12:16.950
There were a number of days until the Russian shooting team arrived to London because they had a hard time understanding the time difference.
00:12:37.450
So, it's bloopers like this, but I think I feel worse that Russia didn't do this sooner, as their shooting team was supposed to arrive in time and missed out entirely.
00:12:55.900
So, time gets complicated; it’s tricky and hard. I have a huge long list of examples like these, but I just don’t have the time.
00:13:05.890
Let’s get into a big event: code in time. I’ll just take a stab at all this stuff at some point. It’s disparaging, but it’s exciting.
00:13:14.260
I want people like me who love this stuff to recognize the reality of it. So what happens when the circuit breaks?
00:13:36.450
I don't know if that means people should be concerned about time anymore, but keep that in mind as I discuss a bunch of little bits.
00:13:50.370
First off, let’s talk about how you store time in your systems. Use UTC! This is good advice for a reason; this keeps it simple.
00:14:03.650
There’s a reason why people keep saying this sort of stuff. UTC is a good universal coordinate and time. It’s like Commission has standard guidelines to establish terms for everything.
00:14:18.290
Now think about this from a whole different perspective. Understanding the rules of your time standard is critical to maintaining focus on this.
00:14:37.250
It’s also essential to note: UTC is not as similar to GMT. There are sometimes overlaps. In 2018, they would avoid applying daylight savings time.
00:14:50.510
As a general rule of thumb, the question to ask is: do you actually need to store time? I think that’s the first thing you should do.
00:15:11.800
Any time you set time for something—like an appointment—you should be very mindful of storing that data. Think about how it relates to people’s schedules.
00:15:40.500
In the future, there may be people who want to use that date as a floating event type of thing, and that’s where we end up in trouble sometimes.
00:16:04.130
But you want to store that as a timestamp so that when that thing actually happened, you can retroactively figure out if a daylight savings issue remap to that.
00:16:24.310
If there's still confusion, having something clear can help alleviate concerns later on.
00:16:36.659
Now, regarding how you translate this to users, you just need to understand how ridiculous this little sketch can seem.
00:16:53.320
It’s all about being consistent in using standardized formats.
00:17:00.400
The ISO 8601 is a format everyone should universally understand—this absolutely needs to be respected. A lot of developers should know how to deal with time this way.
00:17:23.860
But there’s another planning for implementing this is simply: take that leap to smooth out the dependencies between the complexities.
00:17:37.080
When you provide time, you ensure that your interface destroys any outside variables. So if necessary, send correctly formatted responses.
00:18:01.150
When formatting a string, you want to consider what connections people have to information. Also, try to format as clearly as possible.
00:18:17.560
User preferences matter—allow your users to set their own personal preferences in terms of how they want to format day and time.
00:18:43.090
If you don’t accommodate for that, then you risk ruining the experience. Look at this from the browser’s view.
00:19:03.680
JavaScript can be useful in formatting time. In some instances, you can work with a browser to properly manage how you can distinguish between items.
00:19:19.820
Additionally, it’s critical to stay on top of the latest web libraries as much as possible when working with these problems.
00:19:37.910
There are many edge cases that you want to avoid or sidestep entirely, which will unwittingly stack up quickly.
00:19:49.040
So, if you engage in really complicated calculations, or you can even pull up examples from libraries, continue finding newer libraries until you find the right one for you.
00:20:06.930
You’ll probably see a project that’s really interesting in relation to localization. They will allow you to format in a simpler way.
00:20:20.630
One thing I want to highlight is to aim for abstraction, as not everything has to be tied directly to a particular library.
00:20:37.220
When abstracting, keep in mind a level of accessibility; this involves formatting your strings accordingly to enhance readability.
00:20:54.350
For one, the next update could timestamp unpredictably, like if you leave the page open, it will display 'two minutes ago' or ''two weeks ago,' among other thoughtful updates.
00:21:03.430
Think about how that will affect the interactivity; it will be a big family point in your performance if you can improve on that.
00:21:17.710
There's lots of things done just from a decade ago that still have significant modern implications, especially in time how it can change things.
00:21:30.420
A recommendation I would give, though, is to consider the title attribute, which you may find helpful in giving your elements more functionality.
00:21:48.620
Utilizing data attributes will allow users to know when a message was sent and how long ago it is; this will also display the full UTC date with the actual timestamp.
00:22:05.710
To ensure you save time, utilize the HTML5 time element to provide certain timestamps. From there, you can easily add the more relatable descriptions, like, 'It was six minutes ago.'
00:22:23.360
This can be easily constructed across different platforms and maintained; obviously, if you can afford to use existing standards, do so.
00:22:38.490
You’re also able to have a 'date/time' attribute on that element, which obviously should rely on universal standards like ISO 8601.
00:22:51.550
You can utilize this if you're trying to support people building tools on top of your site, or spiders, for example, who are trying to find out how to convert these into more standard formats.
00:23:01.250
That type of strategy seems to go a long way in making sure the maintenance helps bring everything back into useful files.
00:23:22.050
Next thing to note involves inputting time. I don’t know if you’ve noticed, but for every single date input, there’s a challenge with most experiences.
00:23:40.410
Most experiences are not easy, and sometimes there’s nothing that seems particularly intuitive.
00:23:54.230
Most inputs can be frustrating; you don’t ever think there’s a good point. This can create quite the mess in assembling alternatives.
00:24:05.870
Then you have time selectors and everything, making it even worse; that’s where the mess starts piling up because one size does not fit all.
00:24:20.310
Whenever you’re building something out for a user-specific interface, keep in mind they're going to want their autonomy and experiences.
00:24:40.310
It’s terrible, but a valid suggestion is to just build out one that will work best for the one you choose and try to create something better for the next iteration.
00:25:02.370
Even in playing formats, it may be best advised to adhere to the original guidance, because you'll only improve as you get familiar with those interfaces.
00:25:16.520
Time is complicated; there's a lot to talk about. For example, there's an actual time logic based on structured expectations from how you use your time.
00:25:30.590
Next, let’s just revisit something we started a while back. Understanding time has its complications, but it is so crucial that we hone in on how the overall reliability will matter.
00:25:46.900
So remember to articulate the message around the standardized times, allowing simplicity for users to adapt.
00:26:00.810
Let’s share if you have any questions after this, but hopefully, this highlighted some of the underlying issues.
00:26:15.950
Remember, building a calendar is exciting but challenging. Avoid doing it if you can.
00:26:30.050
But if you must, hopefully you realize time isn’t as scary; all the time stuff is really weird only if people have conventions and norms delegated.
00:26:46.190
If you can avoid the complexities as much as possible and tackle simple things first, that’s usually the best approach.
00:27:02.430
So, in conclusion, if there are any questions or points you want to clarify, I will be around to discuss them.