[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:13.83,0:00:17.88,Default,,0000,0000,0000,,First of all, I just want to start off \Nby thanking the organizer. Dialogue: 0,0:00:17.88,0:00:20.07,Default,,0000,0000,0000,,They really put in a lot of effort Dialogue: 0,0:00:20.08,0:00:22.04,Default,,0000,0000,0000,,to make me feel really special as a speaker. Dialogue: 0,0:00:22.05,0:00:24.83,Default,,0000,0000,0000,,Also as an attendee,\Nwatching these other talks Dialogue: 0,0:00:25.42,0:00:27.61,Default,,0000,0000,0000,,so I just want to give them a huge thanks Dialogue: 0,0:00:27.75,0:00:30.82,Default,,0000,0000,0000,,Can I get an extra round of \Napplaud for the organizers Dialogue: 0,0:00:36.18,0:00:38.88,Default,,0000,0000,0000,,And also, thanks everyone for being here. Dialogue: 0,0:00:39.99,0:00:40.93,Default,,0000,0000,0000,,So, I'm Blithe Dialogue: 0,0:00:40.94,0:00:43.37,Default,,0000,0000,0000,,You can find me @blithe\Non Twitter and Github Dialogue: 0,0:00:45.10,0:00:47.52,Default,,0000,0000,0000,,I work for a company call Big Nerd Ranch Dialogue: 0,0:00:47.52,0:00:49.71,Default,,0000,0000,0000,,It's based in Atlanta and Dialogue: 0,0:00:49.71,0:00:51.90,Default,,0000,0000,0000,,some people know it. Alright! Dialogue: 0,0:00:51.90,0:00:54.92,Default,,0000,0000,0000,,It's based in Atlanta and \NI work remotely full time in Oakland Dialogue: 0,0:00:54.92,0:00:57.22,Default,,0000,0000,0000,,We do a couple of things at\NBig Nerd Ranch Dialogue: 0,0:00:57.22,0:01:01.30,Default,,0000,0000,0000,,We develop apps, we write books\Nand we also teach courses. Dialogue: 0,0:01:02.16,0:01:04.67,Default,,0000,0000,0000,,And of course, we're hiring\Ngood people, always. Dialogue: 0,0:01:06.34,0:01:08.58,Default,,0000,0000,0000,,As you heard, I used to be a scientist Dialogue: 0,0:01:08.60,0:01:10.78,Default,,0000,0000,0000,,I have a PhD in Physical Chemistry Dialogue: 0,0:01:11.48,0:01:13.91,Default,,0000,0000,0000,,And a lot of people ask me \Nwhat is physical chemistry? Dialogue: 0,0:01:13.91,0:01:15.40,Default,,0000,0000,0000,,what does that mean? Dialogue: 0,0:01:15.42,0:01:17.96,Default,,0000,0000,0000,,Well, if you think about it\NIt's right on the border between Dialogue: 0,0:01:17.96,0:01:23.47,Default,,0000,0000,0000,,what you know as physics and\Nwhat you know as chemistry Dialogue: 0,0:01:23.49,0:01:26.57,Default,,0000,0000,0000,,That means I spent a \Nlong time in grad school Dialogue: 0,0:01:27.16,0:01:30.12,Default,,0000,0000,0000,,It also means I've done a lot\Nof experiments Dialogue: 0,0:01:30.12,0:01:32.51,Default,,0000,0000,0000,,A lot of people asked me\N"How did you do it? Dialogue: 0,0:01:32.51,0:01:34.40,Default,,0000,0000,0000,,How did you make it \Nthrough 6 years of grad school Dialogue: 0,0:01:34.62,0:01:36.16,Default,,0000,0000,0000,,make it to the end?" Dialogue: 0,0:01:36.19,0:01:39.03,Default,,0000,0000,0000,,And I did it by using the scientific method Dialogue: 0,0:01:41.12,0:01:44.99,Default,,0000,0000,0000,,and I'm still using it everyday Dialogue: 0,0:01:45.42,0:01:48.91,Default,,0000,0000,0000,,I'm a developer, but\NI'm still using the scientific method everyday Dialogue: 0,0:01:49.47,0:01:51.25,Default,,0000,0000,0000,,How many of you have gotten an error Dialogue: 0,0:01:51.79,0:01:52.72,Default,,0000,0000,0000,,Google it Dialogue: 0,0:01:53.06,0:01:56.03,Default,,0000,0000,0000,,pull the first answer straight from StackOverflow Dialogue: 0,0:01:56.03,0:01:57.52,Default,,0000,0000,0000,,and put it in your code and run it Dialogue: 0,0:01:58.80,0:02:00.24,Default,,0000,0000,0000,,I think we all tried it Dialogue: 0,0:02:01.79,0:02:03.10,Default,,0000,0000,0000,,And did it solve your problem? Dialogue: 0,0:02:03.85,0:02:04.66,Default,,0000,0000,0000,,Maybe Dialogue: 0,0:02:04.68,0:02:06.88,Default,,0000,0000,0000,,Maybe it did.\NMaybe if you were lucky Dialogue: 0,0:02:07.04,0:02:08.39,Default,,0000,0000,0000,,But probably not Dialogue: 0,0:02:08.53,0:02:09.79,Default,,0000,0000,0000,,Most of the time, probably not Dialogue: 0,0:02:09.79,0:02:11.40,Default,,0000,0000,0000,,and it was pretty inefficient Dialogue: 0,0:02:11.41,0:02:13.02,Default,,0000,0000,0000,,and the more important question is Dialogue: 0,0:02:13.02,0:02:15.56,Default,,0000,0000,0000,,Did you learn anything from that? Dialogue: 0,0:02:17.23,0:02:20.69,Default,,0000,0000,0000,,The most important part of troubleshooting is learning Dialogue: 0,0:02:20.92,0:02:23.99,Default,,0000,0000,0000,,If you solved a problem without learning\Nfrom it, Dialogue: 0,0:02:23.99,0:02:25.92,Default,,0000,0000,0000,,It's only a temporary fix Dialogue: 0,0:02:25.92,0:02:32.10,Default,,0000,0000,0000,,It's either going to come back later or\Nyou're going to make the same mistake in the future Dialogue: 0,0:02:33.52,0:02:37.71,Default,,0000,0000,0000,,Learning is how you level up as a developer Dialogue: 0,0:02:37.71,0:02:40.38,Default,,0000,0000,0000,,by learning from your experiences Dialogue: 0,0:02:40.38,0:02:43.28,Default,,0000,0000,0000,,And that bring me back to the scientific method Dialogue: 0,0:02:43.28,0:02:48.22,Default,,0000,0000,0000,,How can using the scientific method\Nhelp you level up as a developer? Dialogue: 0,0:02:48.22,0:02:49.79,Default,,0000,0000,0000,,Well, What is it? Dialogue: 0,0:02:49.79,0:02:54.66,Default,,0000,0000,0000,,Well, if you Google it and go straight to\NWikipedia you'll see this definition Dialogue: 0,0:02:54.66,0:02:58.30,Default,,0000,0000,0000,,It's a set of techniques for acquiring knowledge Dialogue: 0,0:02:58.30,0:03:01.00,Default,,0000,0000,0000,,And I love this definition because it can apply to anything Dialogue: 0,0:03:01.00,0:03:04.70,Default,,0000,0000,0000,,any career, including being a developer Dialogue: 0,0:03:04.70,0:03:07.92,Default,,0000,0000,0000,,The scientific method, it's methodical Dialogue: 0,0:03:07.92,0:03:13.32,Default,,0000,0000,0000,,It's an established procedure and\Nscientists have been using it since the 17th century Dialogue: 0,0:03:13.32,0:03:15.45,Default,,0000,0000,0000,,It's also systematic Dialogue: 0,0:03:15.45,0:03:19.20,Default,,0000,0000,0000,,It's a step-by-step process Dialogue: 0,0:03:19.20,0:03:23.88,Default,,0000,0000,0000,,and it's for gaining knowledge\Nand incorporating that into your process Dialogue: 0,0:03:23.88,0:03:28.66,Default,,0000,0000,0000,,and the time for reflection is built right into the\Nscientific method Dialogue: 0,0:03:30.13,0:03:35.20,Default,,0000,0000,0000,,The other day, a coworker of mine popped up\Nin the company chat room and said Dialogue: 0,0:03:35.20,0:03:39.79,Default,,0000,0000,0000,,"Has anyone seen Ruby string interpolation fail?" Dialogue: 0,0:03:39.79,0:03:41.62,Default,,0000,0000,0000,,and I thought that's a pretty interesting question Dialogue: 0,0:03:41.62,0:03:45.15,Default,,0000,0000,0000,,Why do you ask? Why are you asking that? Dialogue: 0,0:03:45.15,0:03:50.12,Default,,0000,0000,0000,,So we dug a little deeper and they were \Nusing factory girl sequencing method Dialogue: 0,0:03:50.12,0:03:54.16,Default,,0000,0000,0000,,to create a series of users \Nwith unique email addresses. Dialogue: 0,0:03:54.16,0:03:57.15,Default,,0000,0000,0000,,So email 1, email 2, email 3... Dialogue: 0,0:03:57.15,0:03:58.87,Default,,0000,0000,0000,,and it wasn't working. It was failing. Dialogue: 0,0:03:58.87,0:04:01.87,Default,,0000,0000,0000,,It was trying to create users \Nwith the same email address Dialogue: 0,0:04:01.87,0:04:04.13,Default,,0000,0000,0000,,and it was failing and \Nthey couldn't figure out why Dialogue: 0,0:04:04.13,0:04:06.40,Default,,0000,0000,0000,,and their solution, Dialogue: 0,0:04:06.40,0:04:09.12,Default,,0000,0000,0000,,they ended up just rolling \Ntheir own sequencing method Dialogue: 0,0:04:09.12,0:04:11.83,Default,,0000,0000,0000,,Well, that may have solved \Ntheir problem temporarily, Dialogue: 0,0:04:11.83,0:04:14.55,Default,,0000,0000,0000,,that wasn't really the \Nmost elegant solution Dialogue: 0,0:04:14.55,0:04:16.37,Default,,0000,0000,0000,,and it turned out, Dialogue: 0,0:04:16.37,0:04:20.06,Default,,0000,0000,0000,,the real problem was that they \Nwere missing the hash symbol Dialogue: 0,0:04:20.06,0:04:22.82,Default,,0000,0000,0000,,that was required for interpolation Dialogue: 0,0:04:22.82,0:04:26.20,Default,,0000,0000,0000,,so simple mistakes, but we all \Nmake simple mistakes like that Dialogue: 0,0:04:26.20,0:04:28.15,Default,,0000,0000,0000,,We all make them all the times Dialogue: 0,0:04:28.15,0:04:32.32,Default,,0000,0000,0000,,But maybe using the scientific\Nmethod would have helped in this case Dialogue: 0,0:04:33.12,0:04:37.45,Default,,0000,0000,0000,,The first step of the scientific \Nmethod is defining the problem Dialogue: 0,0:04:37.45,0:04:43.30,Default,,0000,0000,0000,,As a scientist, this means saying what is \Nthe information that you're trying to gain? Dialogue: 0,0:04:43.30,0:04:49.01,Default,,0000,0000,0000,,What knowledge are you\Ntrying to gain or learn? Dialogue: 0,0:04:49.01,0:04:52.32,Default,,0000,0000,0000,,What's important to keep in mind\Nwhen you're defining the problem is Dialogue: 0,0:04:52.32,0:04:56.80,Default,,0000,0000,0000,,forget what you think you know \Nand question everything Dialogue: 0,0:04:56.80,0:05:01.62,Default,,0000,0000,0000,,Just think about open up your mind, question \Neverything and just define the problem Dialogue: 0,0:05:01.62,0:05:06.05,Default,,0000,0000,0000,,It's also important to get rid of \Nyour emotions at this point Dialogue: 0,0:05:06.05,0:05:10.30,Default,,0000,0000,0000,,You want to, maybe you're on a tight deadline\Nmaybe you think you know what the answer is Dialogue: 0,0:05:10.30,0:05:14.91,Default,,0000,0000,0000,,I'm just going to go do this. I already \Nknow what's wrong blah blah blah Dialogue: 0,0:05:14.91,0:05:18.46,Default,,0000,0000,0000,,Get rid of all that and \Njust define the problem Dialogue: 0,0:05:18.46,0:05:20.90,Default,,0000,0000,0000,,You can do that by \Nanswering a few questions Dialogue: 0,0:05:20.90,0:05:23.53,Default,,0000,0000,0000,,What is behavior that \Nyou're expecting to happen? Dialogue: 0,0:05:23.53,0:05:26.16,Default,,0000,0000,0000,,What's actually happening? Dialogue: 0,0:05:26.16,0:05:28.79,Default,,0000,0000,0000,,and how are those two things different? Dialogue: 0,0:05:28.79,0:05:31.95,Default,,0000,0000,0000,,and how will you know \Nwhen you solved your problem? Dialogue: 0,0:05:31.95,0:05:35.55,Default,,0000,0000,0000,,What is your criteria for success? Dialogue: 0,0:05:35.55,0:05:38.62,Default,,0000,0000,0000,,This is particularly important when Dialogue: 0,0:05:38.62,0:05:42.49,Default,,0000,0000,0000,,when other people come and \Nask you to help them troubleshoot Dialogue: 0,0:05:42.49,0:05:44.38,Default,,0000,0000,0000,,Don't listen to their assumptions. Dialogue: 0,0:05:44.38,0:05:46.24,Default,,0000,0000,0000,,Get rid of that out of the way. Dialogue: 0,0:05:46.24,0:05:49.19,Default,,0000,0000,0000,,and just start from scratch and \Nanswer these simple questions Dialogue: 0,0:05:49.19,0:05:52.14,Default,,0000,0000,0000,,What do you want to happen? \NWhat's actually happening? Dialogue: 0,0:05:52.14,0:05:55.01,Default,,0000,0000,0000,,How will you know when \Nyou fixed the problem? Dialogue: 0,0:05:55.01,0:05:57.05,Default,,0000,0000,0000,,Once you defined your problem,\N Dialogue: 0,0:05:57.05,0:05:59.47,Default,,0000,0000,0000,,you can start by doing \Nsome background research Dialogue: 0,0:05:59.47,0:06:01.87,Default,,0000,0000,0000,,and in reality, you guys are already doing this. Dialogue: 0,0:06:01.87,0:06:04.26,Default,,0000,0000,0000,,Everyone's doing it. Dialogue: 0,0:06:04.26,0:06:06.65,Default,,0000,0000,0000,,In grad school, we would just be constantly reading Dialogue: 0,0:06:06.65,0:06:08.67,Default,,0000,0000,0000,,Before we would ever start an experiment,\N Dialogue: 0,0:06:08.67,0:06:11.72,Default,,0000,0000,0000,,we would just be reading for days and days and days Dialogue: 0,0:06:11.72,0:06:14.19,Default,,0000,0000,0000,,Reading recent articles Dialogue: 0,0:06:14.19,0:06:18.03,Default,,0000,0000,0000,,or sometimes really old article that we would have to go to the library and dig up Dialogue: 0,0:06:18.03,0:06:20.78,Default,,0000,0000,0000,,We were just constantly reading Dialogue: 0,0:06:20.78,0:06:25.17,Default,,0000,0000,0000,,And the reason is because you want \Nto have enough background information Dialogue: 0,0:06:25.17,0:06:30.51,Default,,0000,0000,0000,,So that you know you're starting \Nwith the right experiment Dialogue: 0,0:06:30.51,0:06:33.56,Default,,0000,0000,0000,,As a scientist, it's really expensive both\N Dialogue: 0,0:06:33.56,0:06:36.61,Default,,0000,0000,0000,,It cost a lot of time and money to do an experiment Dialogue: 0,0:06:36.61,0:06:39.66,Default,,0000,0000,0000,,So you want to make sure you're starting with the right experiment Dialogue: 0,0:06:39.66,0:06:44.63,Default,,0000,0000,0000,,and you do that by making sure you have enough background information Dialogue: 0,0:06:44.63,0:06:47.88,Default,,0000,0000,0000,,As a developer, you can do that by knowing your environment Dialogue: 0,0:06:47.88,0:06:51.07,Default,,0000,0000,0000,,So you need to know the language that you're working in Dialogue: 0,0:06:51.07,0:06:54.28,Default,,0000,0000,0000,,and you can always become a little more familiar with it Dialogue: 0,0:06:54.28,0:06:58.23,Default,,0000,0000,0000,,go dig in that dark area that you're unfamiliar with Dialogue: 0,0:06:58.23,0:07:00.88,Default,,0000,0000,0000,,or how does this work? What's going on here? Dialogue: 0,0:07:00.88,0:07:04.06,Default,,0000,0000,0000,,When you're working on a specific application, Dialogue: 0,0:07:04.06,0:07:07.62,Default,,0000,0000,0000,,you can look at what are the dependencies that you're using Dialogue: 0,0:07:07.62,0:07:13.18,Default,,0000,0000,0000,,Get to know those and even which version of those dependency are you using Dialogue: 0,0:07:13.18,0:07:16.86,Default,,0000,0000,0000,,For the case of the factory girl sequencing, Dialogue: 0,0:07:16.86,0:07:20.16,Default,,0000,0000,0000,,probably just taking a look at the documentation might have helped Dialogue: 0,0:07:20.16,0:07:23.80,Default,,0000,0000,0000,,Oh, I'm missing the hash symbol. That's it. Dialogue: 0,0:07:23.80,0:07:26.15,Default,,0000,0000,0000,,You also want to be reading the literature Dialogue: 0,0:07:26.15,0:07:29.29,Default,,0000,0000,0000,,You want to stay up to date with blog post Dialogue: 0,0:07:29.29,0:07:32.38,Default,,0000,0000,0000,,Always be reading what's coming out, \Nwhat's new Dialogue: 0,0:07:32.38,0:07:36.57,Default,,0000,0000,0000,,There's always a lot of content out there,\Nso you want to be reading it Dialogue: 0,0:07:36.57,0:07:38.64,Default,,0000,0000,0000,,For your specific dependency, Dialogue: 0,0:07:38.64,0:07:40.40,Default,,0000,0000,0000,,you can look at the README Dialogue: 0,0:07:40.40,0:07:43.31,Default,,0000,0000,0000,,or the changelog for the most recent version Dialogue: 0,0:07:43.31,0:07:45.64,Default,,0000,0000,0000,,What changed, what's different Dialogue: 0,0:07:45.64,0:07:49.75,Default,,0000,0000,0000,,You can also look at the specific source code\Nof the version you're using Dialogue: 0,0:07:49.75,0:07:53.90,Default,,0000,0000,0000,,Either on GitHub or using bundle open and the gem name Dialogue: 0,0:07:53.90,0:07:56.80,Default,,0000,0000,0000,,You can pull it right up, \Nright on your computer Dialogue: 0,0:07:56.80,0:07:59.73,Default,,0000,0000,0000,,And dig around in there.\NLook at what's going on. Dialogue: 0,0:07:59.73,0:08:03.12,Default,,0000,0000,0000,,And also a helpful thing is to look at the test suite Dialogue: 0,0:08:03.12,0:08:05.61,Default,,0000,0000,0000,,of this dependency that you're looking at Dialogue: 0,0:08:05.61,0:08:08.28,Default,,0000,0000,0000,,Sometimes that helps you tell \Nthe expect behavior of the gem\N Dialogue: 0,0:08:08.28,0:08:10.53,Default,,0000,0000,0000,,What's suppose to be happening Dialogue: 0,0:08:11.35,0:08:14.100,Default,,0000,0000,0000,,Another helpful source of background information is\Njust discussion Dialogue: 0,0:08:14.100,0:08:17.14,Default,,0000,0000,0000,,with your friends and colleagues Dialogue: 0,0:08:17.14,0:08:19.84,Default,,0000,0000,0000,,Maybe they have already encounter your problem Dialogue: 0,0:08:19.84,0:08:22.26,Default,,0000,0000,0000,,and they know the perfect solution Dialogue: 0,0:08:22.26,0:08:25.53,Default,,0000,0000,0000,,The best first experiment for you to start with\N Dialogue: 0,0:08:25.53,0:08:27.24,Default,,0000,0000,0000,,That's really hellpful Dialogue: 0,0:08:27.24,0:08:30.95,Default,,0000,0000,0000,,Particularly, when you're struggling on a problem Dialogue: 0,0:08:30.95,0:08:33.27,Default,,0000,0000,0000,,maybe you been working on it for a long time Dialogue: 0,0:08:33.27,0:08:34.88,Default,,0000,0000,0000,,and you're not getting anywhere Dialogue: 0,0:08:34.88,0:08:37.84,Default,,0000,0000,0000,,it's time to get up and go ask somebody for help Dialogue: 0,0:08:37.84,0:08:39.74,Default,,0000,0000,0000,,Have you seen anything like this? Dialogue: 0,0:08:39.74,0:08:42.18,Default,,0000,0000,0000,,And that's exactly what my colleague did Dialogue: 0,0:08:42.18,0:08:43.76,Default,,0000,0000,0000,,They popped in the company chatroom Dialogue: 0,0:08:43.76,0:08:46.10,Default,,0000,0000,0000,,"Hey, I need some help on this" Dialogue: 0,0:08:46.10,0:08:47.75,Default,,0000,0000,0000,,We have a rule at Big Nerd Ranch Dialogue: 0,0:08:47.75,0:08:50.06,Default,,0000,0000,0000,,If you're working on something for more than an hour Dialogue: 0,0:08:50.06,0:08:51.42,Default,,0000,0000,0000,,and you're not making progress Dialogue: 0,0:08:51.42,0:08:52.45,Default,,0000,0000,0000,,Don't! Dialogue: 0,0:08:52.45,0:08:54.80,Default,,0000,0000,0000,,It's time to stop and go ask somebody for help\N Dialogue: 0,0:08:54.80,0:08:57.60,Default,,0000,0000,0000,,It's better to get help from other people Dialogue: 0,0:08:57.60,0:09:02.77,Default,,0000,0000,0000,,And of course, sometime the good \Nold rubber duck is a good helpful solution Dialogue: 0,0:09:02.77,0:09:04.80,Default,,0000,0000,0000,,Maybe the rubber duck doesn't talk back, Dialogue: 0,0:09:04.80,0:09:06.93,Default,,0000,0000,0000,,but just by explaining your problem Dialogue: 0,0:09:06.93,0:09:12.14,Default,,0000,0000,0000,,and how you got there is a good way to get ideas Dialogue: 0,0:09:12.14,0:09:17.70,Default,,0000,0000,0000,,You also want to make sure you can \Nreplicate the problem that you're having Dialogue: 0,0:09:17.70,0:09:19.18,Default,,0000,0000,0000,,Make it fail. Dialogue: 0,0:09:19.18,0:09:23.13,Default,,0000,0000,0000,,I mean can you even reproduce it? \NIs it an error you can reproduce? Dialogue: 0,0:09:23.13,0:09:26.26,Default,,0000,0000,0000,,And what are the steps that it takes to do that Dialogue: 0,0:09:26.26,0:09:27.93,Default,,0000,0000,0000,,Once you have that information, Dialogue: 0,0:09:27.93,0:09:30.10,Default,,0000,0000,0000,,you can go ahead and write an automated test Dialogue: 0,0:09:30.10,0:09:32.22,Default,,0000,0000,0000,,to help you solve that problem Dialogue: 0,0:09:32.80,0:09:35.51,Default,,0000,0000,0000,,After you gather a lot of background information, Dialogue: 0,0:09:35.51,0:09:38.21,Default,,0000,0000,0000,,you can then establish a hypothesis Dialogue: 0,0:09:38.21,0:09:43.77,Default,,0000,0000,0000,,A hypothesis needs to be educated and based in evidence Dialogue: 0,0:09:43.77,0:09:46.39,Default,,0000,0000,0000,,So this goes back to all the research \Nthat you've been doing Dialogue: 0,0:09:46.39,0:09:49.70,Default,,0000,0000,0000,,And it also need to be something that you can test Dialogue: 0,0:09:49.70,0:09:52.44,Default,,0000,0000,0000,,So this goes back to defining your problem Dialogue: 0,0:09:52.44,0:09:55.24,Default,,0000,0000,0000,,and your criteria for success Dialogue: 0,0:09:55.24,0:09:57.20,Default,,0000,0000,0000,,So once you have a hypothesis, Dialogue: 0,0:09:57.20,0:09:59.72,Default,,0000,0000,0000,,then you can start to design an experiment Dialogue: 0,0:09:59.72,0:10:02.14,Default,,0000,0000,0000,,And the most important part of an experiment design Dialogue: 0,0:10:02.14,0:10:04.78,Default,,0000,0000,0000,,is that it test your hypothesis, of course. Dialogue: 0,0:10:04.78,0:10:08.69,Default,,0000,0000,0000,,Don't do an experiment that doesn't test your hypothesis Dialogue: 0,0:10:08.69,0:10:11.72,Default,,0000,0000,0000,,Couple of tips for designing an experiment Dialogue: 0,0:10:11.72,0:10:16.29,Default,,0000,0000,0000,,One good thing to start with is just dividing and conquering your code base Dialogue: 0,0:10:16.29,0:10:19.39,Default,,0000,0000,0000,,Well first of all, hopefully you've \Nwritten an automated test Dialogue: 0,0:10:19.39,0:10:21.92,Default,,0000,0000,0000,,So you can just run that test over and over again Dialogue: 0,0:10:21.92,0:10:24.94,Default,,0000,0000,0000,,to focus on the condition that you're working on Dialogue: 0,0:10:24.94,0:10:30.24,Default,,0000,0000,0000,,So that isolate a lot other behavior that you don't \Nneed to test immediately right now Dialogue: 0,0:10:30.24,0:10:33.82,Default,,0000,0000,0000,,Of course, you can always comment \Nout big chunks of codes Dialogue: 0,0:10:33.82,0:10:35.60,Default,,0000,0000,0000,,If you're like "I know this stuff is working. Dialogue: 0,0:10:35.60,0:10:37.20,Default,,0000,0000,0000,,Let me kind of comment it out Dialogue: 0,0:10:37.20,0:10:40.86,Default,,0000,0000,0000,,and just run the part of the code \Nthat I need to look at right now." Dialogue: 0,0:10:40.86,0:10:45.36,Default,,0000,0000,0000,,Breakpoints are excellent helpful way to do it Dialogue: 0,0:10:45.36,0:10:47.52,Default,,0000,0000,0000,,Say your code has to go through 10 steps Dialogue: 0,0:10:47.52,0:10:49.75,Default,,0000,0000,0000,,and only the last one isn't working Dialogue: 0,0:10:49.75,0:10:51.46,Default,,0000,0000,0000,,Go ahead and enter a breakpoint Dialogue: 0,0:10:51.46,0:10:53.34,Default,,0000,0000,0000,,or a binding .pry right in there Dialogue: 0,0:10:53.34,0:10:58.28,Default,,0000,0000,0000,,You can stop and just look at the code is broken,\Nthat is not working Dialogue: 0,0:11:00.45,0:11:02.23,Default,,0000,0000,0000,,You can also Dialogue: 0,0:11:02.23,0:11:06.28,Default,,0000,0000,0000,,Say you suspect there's a problem \Nwith the dependency or a gem Dialogue: 0,0:11:06.28,0:11:08.59,Default,,0000,0000,0000,,What you can do is maybe create a new app Dialogue: 0,0:11:08.59,0:11:12.16,Default,,0000,0000,0000,,and only use that one dependency or API Dialogue: 0,0:11:12.16,0:11:13.87,Default,,0000,0000,0000,,Are you still having the problem? Dialogue: 0,0:11:13.87,0:11:17.47,Default,,0000,0000,0000,,OK, well maybe you just got rid of all \Nof the other code that you have written Dialogue: 0,0:11:17.47,0:11:18.89,Default,,0000,0000,0000,,and you know it just with that Dialogue: 0,0:11:18.89,0:11:21.07,Default,,0000,0000,0000,,you can replicate it in a fresh app Dialogue: 0,0:11:21.07,0:11:25.95,Default,,0000,0000,0000,,That's another way you can isolate the code Dialogue: 0,0:11:27.25,0:11:30.12,Default,,0000,0000,0000,,Another important thing is to limit the variables Dialogue: 0,0:11:30.12,0:11:31.48,Default,,0000,0000,0000,,that you're testing Dialogue: 0,0:11:31.48,0:11:34.36,Default,,0000,0000,0000,,When you look at beginner troubleshoot sometimes Dialogue: 0,0:11:34.36,0:11:37.37,Default,,0000,0000,0000,,They try to change many variables at once Dialogue: 0,0:11:37.37,0:11:39.34,Default,,0000,0000,0000,,Maybe it's a problem with the controller over here Dialogue: 0,0:11:39.34,0:11:42.97,Default,,0000,0000,0000,,and the view or maybe it's in the model. I don't know. Dialogue: 0,0:11:42.97,0:11:46.95,Default,,0000,0000,0000,,and sometimes they get down a road\Nthat's really hard to come back from Dialogue: 0,0:11:46.95,0:11:50.88,Default,,0000,0000,0000,,and they can't even answer the question \N"what has changed?" Dialogue: 0,0:11:50.88,0:11:52.54,Default,,0000,0000,0000,,So you really don't want to do that Dialogue: 0,0:11:52.54,0:11:56.12,Default,,0000,0000,0000,,You want to limit your experiment \Nto one variable at a time. Dialogue: 0,0:11:56.12,0:11:58.22,Default,,0000,0000,0000,,Let's test one variable Dialogue: 0,0:11:58.22,0:12:01.04,Default,,0000,0000,0000,,and finish our experiment before we start another one Dialogue: 0,0:12:01.04,0:12:02.70,Default,,0000,0000,0000,,so that we know Dialogue: 0,0:12:02.70,0:12:07.64,Default,,0000,0000,0000,,and we need to make sure we do \Nthe analysis part of the experiment Dialogue: 0,0:12:07.64,0:12:11.73,Default,,0000,0000,0000,,Don't be afraid to try something weird Dialogue: 0,0:12:11.73,0:12:14.05,Default,,0000,0000,0000,,Sometimes, you know you think, you're thinking Dialogue: 0,0:12:14.05,0:12:16.82,Default,,0000,0000,0000,,"Ah this never gonna work\Nbut I'll try it anyway." Dialogue: 0,0:12:16.82,0:12:20.28,Default,,0000,0000,0000,,And you try it and you find your solution Dialogue: 0,0:12:20.28,0:12:23.11,Default,,0000,0000,0000,,Don't be afraid to do that.\NTry something strange. Dialogue: 0,0:12:23.11,0:12:24.86,Default,,0000,0000,0000,,You can also try maybe Dialogue: 0,0:12:24.86,0:12:28.17,Default,,0000,0000,0000,,try something that you know is \Ngoing to break your program Dialogue: 0,0:12:28.17,0:12:30.49,Default,,0000,0000,0000,,Go throw some gibberish in there. \NType it in there. Dialogue: 0,0:12:30.49,0:12:32.62,Default,,0000,0000,0000,,And you know it's going to break it. Dialogue: 0,0:12:32.62,0:12:34.75,Default,,0000,0000,0000,,You know it's going to fail. Dialogue: 0,0:12:34.75,0:12:38.28,Default,,0000,0000,0000,,What happen when you run your program\Nand it doesn't fail? Dialogue: 0,0:12:38.28,0:12:40.31,Default,,0000,0000,0000,,Maybe that code was never even getting run Dialogue: 0,0:12:40.31,0:12:43.04,Default,,0000,0000,0000,,Maybe you're not including that file or something Dialogue: 0,0:12:43.04,0:12:45.59,Default,,0000,0000,0000,,So try something strange Dialogue: 0,0:12:45.59,0:12:48.11,Default,,0000,0000,0000,,A friend of mine told me a story the other day Dialogue: 0,0:12:48.11,0:12:50.72,Default,,0000,0000,0000,,about how they've created a table Dialogue: 0,0:12:50.72,0:12:53.50,Default,,0000,0000,0000,,anytime they were trying to do a join with that table, Dialogue: 0,0:12:53.50,0:12:56.27,Default,,0000,0000,0000,,it was throwing some obscure error \Nand they couldn't figure it out Dialogue: 0,0:12:56.27,0:12:59.04,Default,,0000,0000,0000,,What's wrong with this one table?\NWhat's wrong with it? Dialogue: 0,0:12:59.04,0:13:01.46,Default,,0000,0000,0000,,So they ended up, they just Dialogue: 0,0:13:01.46,0:13:03.76,Default,,0000,0000,0000,,they got rid of the table Dialogue: 0,0:13:03.76,0:13:06.19,Default,,0000,0000,0000,,They created a new one and they named it Bananas. \N Dialogue: 0,0:13:06.19,0:13:07.63,Default,,0000,0000,0000,,Just something weird. Dialogue: 0,0:13:07.63,0:13:09.41,Default,,0000,0000,0000,,Like just do it weird. Dialogue: 0,0:13:09.41,0:13:11.39,Default,,0000,0000,0000,,And that actually fixed their problem.\N Dialogue: 0,0:13:11.39,0:13:12.92,Default,,0000,0000,0000,,So Bananas worked. Dialogue: 0,0:13:12.92,0:13:14.41,Default,,0000,0000,0000,,And they're just like "What? What is going on? Dialogue: 0,0:13:14.41,0:13:16.24,Default,,0000,0000,0000,,Why? Why did that work" Dialogue: 0,0:13:16.24,0:13:21.20,Default,,0000,0000,0000,,and it turned out they had named\Ntheir original table attributes Dialogue: 0,0:13:21.94,0:13:25.32,Default,,0000,0000,0000,,So of course that's a protected name \Nso it didn't work Dialogue: 0,0:13:25.32,0:13:26.98,Default,,0000,0000,0000,,So trying something weird, Dialogue: 0,0:13:26.98,0:13:30.38,Default,,0000,0000,0000,,naming the table Bananas, \Nthat worked for them. Dialogue: 0,0:13:31.56,0:13:34.85,Default,,0000,0000,0000,,How many of you have ever \Ndone something like this? Dialogue: 0,0:13:34.85,0:13:37.71,Default,,0000,0000,0000,,Where you dig, you super deep dive. Yeah. Dialogue: 0,0:13:37.71,0:13:39.82,Default,,0000,0000,0000,,You're like oh it's way down here. Dialogue: 0,0:13:39.82,0:13:41.69,Default,,0000,0000,0000,,There's some weird problem. Dialogue: 0,0:13:41.69,0:13:43.93,Default,,0000,0000,0000,,And it ends up being \Njust right on the surface. Dialogue: 0,0:13:43.93,0:13:45.66,Default,,0000,0000,0000,,Something simple. Dialogue: 0,0:13:46.14,0:13:47.98,Default,,0000,0000,0000,,When you're designing your experiment, Dialogue: 0,0:13:47.98,0:13:49.55,Default,,0000,0000,0000,,you want to focus on Dialogue: 0,0:13:49.55,0:13:52.16,Default,,0000,0000,0000,,Think about the hierarchy of blame. Dialogue: 0,0:13:52.16,0:13:53.44,Default,,0000,0000,0000,,Think about OK, Dialogue: 0,0:13:53.44,0:13:57.25,Default,,0000,0000,0000,,what is the most likely \Ncandidate for this problem? Dialogue: 0,0:13:57.25,0:14:00.47,Default,,0000,0000,0000,,Once you eliminated \Nthe most likely candidates, Dialogue: 0,0:14:00.47,0:14:03.95,Default,,0000,0000,0000,,then you can go on\Nto the harder problems Dialogue: 0,0:14:03.95,0:14:05.05,Default,,0000,0000,0000,,For example, Dialogue: 0,0:14:05.05,0:14:07.25,Default,,0000,0000,0000,,more recently changed code Dialogue: 0,0:14:07.25,0:14:10.25,Default,,0000,0000,0000,,is probably more likely to be at fault Dialogue: 0,0:14:10.25,0:14:13.89,Default,,0000,0000,0000,,than codes that's been in \Nproduction for a long time Dialogue: 0,0:14:13.89,0:14:16.18,Default,,0000,0000,0000,,and something that you wrote Dialogue: 0,0:14:16.18,0:14:19.33,Default,,0000,0000,0000,,is probably more likely to\Nbe the problem than say, Dialogue: 0,0:14:19.33,0:14:21.11,Default,,0000,0000,0000,,something in Ruby Dialogue: 0,0:14:22.16,0:14:26.41,Default,,0000,0000,0000,,But through your experiments go ahead \Nand eliminate the most likely candidate Dialogue: 0,0:14:26.41,0:14:28.23,Default,,0000,0000,0000,,and then work your way down Dialogue: 0,0:14:28.23,0:14:32.42,Default,,0000,0000,0000,,Don't start by trying to figure out \Nwhat's wrong with Ruby Dialogue: 0,0:14:32.98,0:14:35.14,Default,,0000,0000,0000,,After you designed your experiment, Dialogue: 0,0:14:35.14,0:14:36.100,Default,,0000,0000,0000,,go ahead and carry it out Dialogue: 0,0:14:36.100,0:14:38.87,Default,,0000,0000,0000,,and you're going to start \Ngathering your data Dialogue: 0,0:14:38.87,0:14:41.79,Default,,0000,0000,0000,,that you're going to use for your analysis Dialogue: 0,0:14:42.69,0:14:44.44,Default,,0000,0000,0000,,So you need to think about OK, Dialogue: 0,0:14:44.44,0:14:46.82,Default,,0000,0000,0000,,what's the current status of your program now? Dialogue: 0,0:14:46.82,0:14:48.27,Default,,0000,0000,0000,,What's happening now? Dialogue: 0,0:14:49.17,0:14:50.80,Default,,0000,0000,0000,,Were there any changes? Dialogue: 0,0:14:50.80,0:14:52.49,Default,,0000,0000,0000,,Are there any new messages? Dialogue: 0,0:14:52.49,0:14:55.54,Default,,0000,0000,0000,,Are there any new results from your experiment? Dialogue: 0,0:14:55.54,0:14:57.39,Default,,0000,0000,0000,,What else changed recently? Dialogue: 0,0:14:57.39,0:14:59.60,Default,,0000,0000,0000,,Were there any other things that you changed? Dialogue: 0,0:14:59.60,0:15:01.64,Default,,0000,0000,0000,,What does the log file say? Dialogue: 0,0:15:01.64,0:15:04.14,Default,,0000,0000,0000,,Gather all that information Dialogue: 0,0:15:04.52,0:15:06.25,Default,,0000,0000,0000,,And this one may seem obvious Dialogue: 0,0:15:06.25,0:15:09.50,Default,,0000,0000,0000,,but it need to be said \Neven for senior developers Dialogue: 0,0:15:09.50,0:15:11.74,Default,,0000,0000,0000,,Read the error message! Dialogue: 0,0:15:11.74,0:15:12.78,Default,,0000,0000,0000,,Just read it. Dialogue: 0,0:15:12.78,0:15:13.93,Default,,0000,0000,0000,,Read it out loud. Dialogue: 0,0:15:13.93,0:15:15.45,Default,,0000,0000,0000,,Even that alone will help it. Dialogue: 0,0:15:15.45,0:15:16.36,Default,,0000,0000,0000,,Just read it. Dialogue: 0,0:15:16.92,0:15:18.38,Default,,0000,0000,0000,,Take a look at the stack trace. Dialogue: 0,0:15:18.38,0:15:19.83,Default,,0000,0000,0000,,Look at the line number. Dialogue: 0,0:15:19.83,0:15:21.12,Default,,0000,0000,0000,,What's going on? Dialogue: 0,0:15:21.12,0:15:24.11,Default,,0000,0000,0000,,That's very useful information for a reason Dialogue: 0,0:15:24.11,0:15:26.03,Default,,0000,0000,0000,,So gather that information Dialogue: 0,0:15:26.03,0:15:28.09,Default,,0000,0000,0000,,as part of your experiment. Dialogue: 0,0:15:29.01,0:15:30.44,Default,,0000,0000,0000,,Once you have all your data, Dialogue: 0,0:15:30.44,0:15:32.52,Default,,0000,0000,0000,,you can start doing your analysis Dialogue: 0,0:15:32.52,0:15:35.14,Default,,0000,0000,0000,,and you really don't \Nwant to skip this part Dialogue: 0,0:15:35.14,0:15:36.91,Default,,0000,0000,0000,,This is the most important part Dialogue: 0,0:15:36.91,0:15:39.42,Default,,0000,0000,0000,,because this where the learning happens Dialogue: 0,0:15:39.42,0:15:42.06,Default,,0000,0000,0000,,This is where you level up as a developer Dialogue: 0,0:15:43.05,0:15:46.44,Default,,0000,0000,0000,,and it's built right into the scientific method Dialogue: 0,0:15:47.80,0:15:49.22,Default,,0000,0000,0000,,So now that you've done your experiment Dialogue: 0,0:15:49.22,0:15:51.14,Default,,0000,0000,0000,,Did it solve your problem? Dialogue: 0,0:15:51.14,0:15:53.83,Default,,0000,0000,0000,,That test that you wrote, is it passing now? Dialogue: 0,0:15:53.83,0:15:56.03,Default,,0000,0000,0000,,and what about all the rest of your test suite? Dialogue: 0,0:15:56.03,0:15:58.62,Default,,0000,0000,0000,,Make sure it's also passing Dialogue: 0,0:15:58.62,0:16:02.11,Default,,0000,0000,0000,,Make sure you solved your problem \Nwithout breaking something else Dialogue: 0,0:16:02.11,0:16:06.30,Default,,0000,0000,0000,,And make sure you met all \Nyour criteria for success Dialogue: 0,0:16:07.23,0:16:09.08,Default,,0000,0000,0000,,And you also want to think about Dialogue: 0,0:16:09.08,0:16:12.19,Default,,0000,0000,0000,,what did you learn from that experiment? Dialogue: 0,0:16:12.19,0:16:14.92,Default,,0000,0000,0000,,What information can you get from that? Dialogue: 0,0:16:14.92,0:16:17.37,Default,,0000,0000,0000,,Don't just move on to the next thing and say Dialogue: 0,0:16:17.37,0:16:19.63,Default,,0000,0000,0000,,"OK, it's fixed now. Let's go" Dialogue: 0,0:16:20.07,0:16:21.63,Default,,0000,0000,0000,,And take a moment, Dialogue: 0,0:16:21.63,0:16:24.25,Default,,0000,0000,0000,,Take the time to reflect on your experiment. Dialogue: 0,0:16:24.25,0:16:27.25,Default,,0000,0000,0000,,What went well? \NWhat didn't go well? Dialogue: 0,0:16:27.25,0:16:28.93,Default,,0000,0000,0000,,Think about that Dialogue: 0,0:16:29.43,0:16:30.80,Default,,0000,0000,0000,,And most importantly, Dialogue: 0,0:16:30.80,0:16:32.84,Default,,0000,0000,0000,,you need to understand Dialogue: 0,0:16:32.84,0:16:35.89,Default,,0000,0000,0000,,why you solved your problem Dialogue: 0,0:16:35.89,0:16:37.67,Default,,0000,0000,0000,,Have you ever said, Dialogue: 0,0:16:37.67,0:16:41.19,Default,,0000,0000,0000,,"Well, I don't why it works, \Nbut it works." Dialogue: 0,0:16:41.100,0:16:44.18,Default,,0000,0000,0000,,I have news for you. \NYou didn't fix it. Dialogue: 0,0:16:44.18,0:16:46.55,Default,,0000,0000,0000,,You didn't solve your problem. Dialogue: 0,0:16:47.22,0:16:49.14,Default,,0000,0000,0000,,It's the understanding Dialogue: 0,0:16:49.14,0:16:52.08,Default,,0000,0000,0000,,that cement the knowledge in your brain. Dialogue: 0,0:16:52.08,0:16:54.57,Default,,0000,0000,0000,,That's what make you a better developer. Dialogue: 0,0:16:54.57,0:16:57.08,Default,,0000,0000,0000,,And for those of you in leadership positions, Dialogue: 0,0:16:57.08,0:16:59.91,Default,,0000,0000,0000,,maybe you're teaching a newer developer Dialogue: 0,0:16:59.91,0:17:03.74,Default,,0000,0000,0000,,It's important that you make sure\Nthat they understand the why Dialogue: 0,0:17:03.74,0:17:06.13,Default,,0000,0000,0000,,So make them explain it to you, Dialogue: 0,0:17:06.13,0:17:08.76,Default,,0000,0000,0000,,Why did this change solved your problem? Dialogue: 0,0:17:10.44,0:17:12.56,Default,,0000,0000,0000,,Your results from your experiment Dialogue: 0,0:17:12.56,0:17:14.38,Default,,0000,0000,0000,,will also help you determine Dialogue: 0,0:17:14.38,0:17:17.70,Default,,0000,0000,0000,,what's going to happen in your next experiment. Dialogue: 0,0:17:17.70,0:17:19.81,Default,,0000,0000,0000,,Maybe you solved your problem already Dialogue: 0,0:17:19.81,0:17:22.53,Default,,0000,0000,0000,,and you don't have to do another experiment Dialogue: 0,0:17:22.53,0:17:25.88,Default,,0000,0000,0000,,but it will influence your experiment in the future Dialogue: 0,0:17:25.88,0:17:29.26,Default,,0000,0000,0000,,Maybe now you know \Na better first experiment to start with Dialogue: 0,0:17:29.26,0:17:30.04,Default,,0000,0000,0000,,"I know. Dialogue: 0,0:17:30.04,0:17:32.69,Default,,0000,0000,0000,,I know the fix. \NI'll start with this next time." Dialogue: 0,0:17:32.69,0:17:34.88,Default,,0000,0000,0000,,Or if you didn't solve your problem, Dialogue: 0,0:17:34.88,0:17:37.26,Default,,0000,0000,0000,,maybe you have a new error message Dialogue: 0,0:17:37.26,0:17:38.80,Default,,0000,0000,0000,,"Ok, you can work with that. Dialogue: 0,0:17:38.80,0:17:40.65,Default,,0000,0000,0000,,Now what's the new experiment?" Dialogue: 0,0:17:40.65,0:17:42.100,Default,,0000,0000,0000,,Or "Oh maybe it's a problem with this gem. Dialogue: 0,0:17:42.100,0:17:46.60,Default,,0000,0000,0000,,I should do more \Nbackground research on that" Dialogue: 0,0:17:47.92,0:17:49.90,Default,,0000,0000,0000,,Another important part of the analysis Dialogue: 0,0:17:49.90,0:17:52.42,Default,,0000,0000,0000,,is embracing your successes. Dialogue: 0,0:17:52.72,0:17:54.21,Default,,0000,0000,0000,,This is really important. Dialogue: 0,0:17:54.21,0:17:55.37,Default,,0000,0000,0000,,A lot of people they just, Dialogue: 0,0:17:55.37,0:17:57.13,Default,,0000,0000,0000,,they sort of skip over this part Dialogue: 0,0:17:57.13,0:17:58.100,Default,,0000,0000,0000,,and go back to work Dialogue: 0,0:17:59.28,0:18:00.97,Default,,0000,0000,0000,,But it's really important. Dialogue: 0,0:18:01.16,0:18:03.50,Default,,0000,0000,0000,,If you did solve your problem, Dialogue: 0,0:18:03.50,0:18:05.30,Default,,0000,0000,0000,,let that sink in Dialogue: 0,0:18:05.30,0:18:06.88,Default,,0000,0000,0000,,because that's going to drive you Dialogue: 0,0:18:06.88,0:18:09.29,Default,,0000,0000,0000,,for future troubleshooting problems Dialogue: 0,0:18:09.74,0:18:11.61,Default,,0000,0000,0000,,You need to remember all those problems Dialogue: 0,0:18:11.61,0:18:13.14,Default,,0000,0000,0000,,that you solved before Dialogue: 0,0:18:13.14,0:18:14.76,Default,,0000,0000,0000,,and know that you can do it Dialogue: 0,0:18:14.76,0:18:16.91,Default,,0000,0000,0000,,and that you can keep going Dialogue: 0,0:18:17.03,0:18:18.96,Default,,0000,0000,0000,,And even if you didn't solved \Nyour problem this time Dialogue: 0,0:18:18.96,0:18:20.64,Default,,0000,0000,0000,,and you're still working on it Dialogue: 0,0:18:20.64,0:18:23.00,Default,,0000,0000,0000,,maybe you got a new error message. Dialogue: 0,0:18:23.00,0:18:27.66,Default,,0000,0000,0000,,That's progress and that's \Nsomething to be celebrated Dialogue: 0,0:18:29.54,0:18:32.10,Default,,0000,0000,0000,,Another important part of being a scientist Dialogue: 0,0:18:32.10,0:18:34.14,Default,,0000,0000,0000,,is keeping a good lab notebook Dialogue: 0,0:18:34.14,0:18:35.98,Default,,0000,0000,0000,,and the reason you do this is because Dialogue: 0,0:18:35.98,0:18:39.54,Default,,0000,0000,0000,,it tells the story of your experiences Dialogue: 0,0:18:39.54,0:18:43.26,Default,,0000,0000,0000,,either to you in the future when \Nyou're going back to look at it Dialogue: 0,0:18:43.26,0:18:45.23,Default,,0000,0000,0000,,or to somebody else Dialogue: 0,0:18:45.23,0:18:47.84,Default,,0000,0000,0000,,maybe another developer in the future Dialogue: 0,0:18:47.92,0:18:51.05,Default,,0000,0000,0000,,So this is the picture of one of my \Nlab notebook from grad school. Dialogue: 0,0:18:51.05,0:18:55.40,Default,,0000,0000,0000,,I probably filled about 10 of these \Nand they're like 300 pages each Dialogue: 0,0:18:55.40,0:18:58.72,Default,,0000,0000,0000,,So I did a lot of documenting in grad school. Dialogue: 0,0:18:58.72,0:19:01.03,Default,,0000,0000,0000,,The reason I included this is just to say Dialogue: 0,0:19:01.03,0:19:05.34,Default,,0000,0000,0000,," it's OK to have a paper lab notebook \Nand write the things that you're doing Dialogue: 0,0:19:05.34,0:19:08.61,Default,,0000,0000,0000,,That's OK. Digital work also." Dialogue: 0,0:19:08.83,0:19:11.08,Default,,0000,0000,0000,,And the reason you keep \Na lab notebook is because Dialogue: 0,0:19:11.08,0:19:13.80,Default,,0000,0000,0000,,you're just not going to remember it Dialogue: 0,0:19:13.80,0:19:15.90,Default,,0000,0000,0000,,you're not going to remember Dialogue: 0,0:19:15.90,0:19:16.90,Default,,0000,0000,0000,,As a grad student, Dialogue: 0,0:19:16.90,0:19:20.90,Default,,0000,0000,0000,,we probably did about 20 to \N30 experiments a day Dialogue: 0,0:19:21.34,0:19:24.27,Default,,0000,0000,0000,,each just changing one variable at a time. Dialogue: 0,0:19:24.27,0:19:26.62,Default,,0000,0000,0000,,And there's just no way we would've remember Dialogue: 0,0:19:26.62,0:19:28.88,Default,,0000,0000,0000,,all of the things that we tried Dialogue: 0,0:19:28.88,0:19:32.55,Default,,0000,0000,0000,,And think about how many experiments \Nyou do as a developer each day Dialogue: 0,0:19:32.55,0:19:34.78,Default,,0000,0000,0000,,when you're troubleshooting Dialogue: 0,0:19:35.36,0:19:36.96,Default,,0000,0000,0000,,And maybe you think Dialogue: 0,0:19:36.96,0:19:40.09,Default,,0000,0000,0000,,"OK, well I'm already just \Nrecording all this stuff in the log. Dialogue: 0,0:19:40.09,0:19:41.99,Default,,0000,0000,0000,,It's all saved over there. Dialogue: 0,0:19:41.99,0:19:44.26,Default,,0000,0000,0000,,I can always go back and look Dialogue: 0,0:19:44.26,0:19:48.57,Default,,0000,0000,0000,,But that's not an sufficient lab notebook Dialogue: 0,0:19:48.57,0:19:53.10,Default,,0000,0000,0000,,Too much information can be just\Nas bad as too little information Dialogue: 0,0:19:53.10,0:19:54.38,Default,,0000,0000,0000,,So it's up to you Dialogue: 0,0:19:54.38,0:19:58.51,Default,,0000,0000,0000,,to glean the meaning from \Nthese experiment that you're doing Dialogue: 0,0:19:58.51,0:20:00.74,Default,,0000,0000,0000,,and record that Dialogue: 0,0:20:00.74,0:20:04.42,Default,,0000,0000,0000,,One of the best first step for\Nkeeping a good lab notebook Dialogue: 0,0:20:04.42,0:20:06.80,Default,,0000,0000,0000,,is writing a good commit message Dialogue: 0,0:20:06.81,0:20:08.92,Default,,0000,0000,0000,,It's all fresh in your brain Dialogue: 0,0:20:08.92,0:20:11.68,Default,,0000,0000,0000,,and so you can maybe you solve the problem Dialogue: 0,0:20:11.68,0:20:14.07,Default,,0000,0000,0000,,so you can commit that change and push it Dialogue: 0,0:20:14.07,0:20:16.24,Default,,0000,0000,0000,,So write some explanation in that Dialogue: 0,0:20:16.24,0:20:19.63,Default,,0000,0000,0000,,that commit message and let \Npeople know what's going on Dialogue: 0,0:20:19.63,0:20:21.77,Default,,0000,0000,0000,,and people will see this in the future Dialogue: 0,0:20:21.77,0:20:23.98,Default,,0000,0000,0000,,Either you'll come back and look at it Dialogue: 0,0:20:23.98,0:20:28.53,Default,,0000,0000,0000,,or maybe another developer who's working \Nin the codebase will come back and look Dialogue: 0,0:20:28.89,0:20:33.07,Default,,0000,0000,0000,,Additionally , if you added test for \Nthe scenario that you're working on, Dialogue: 0,0:20:33.07,0:20:36.40,Default,,0000,0000,0000,,that's also a good documentation for what's going on. Dialogue: 0,0:20:36.40,0:20:38.34,Default,,0000,0000,0000,,"OK, this was the the problem. Dialogue: 0,0:20:38.34,0:20:40.19,Default,,0000,0000,0000,,We added a test for it now." Dialogue: 0,0:20:42.13,0:20:44.44,Default,,0000,0000,0000,,Also, right after you solve a problem, Dialogue: 0,0:20:44.44,0:20:46.39,Default,,0000,0000,0000,,you want to update the documentation. Dialogue: 0,0:20:46.39,0:20:48.28,Default,,0000,0000,0000,,Is it missing anything? Dialogue: 0,0:20:48.28,0:20:50.04,Default,,0000,0000,0000,,Did you have that error because Dialogue: 0,0:20:50.04,0:20:52.69,Default,,0000,0000,0000,,the documentation wasn't good enough? Dialogue: 0,0:20:52.69,0:20:54.70,Default,,0000,0000,0000,,So go ahead and go update the README. Dialogue: 0,0:20:54.70,0:20:58.15,Default,,0000,0000,0000,,Or maybe you were missing \Nsome environment variable Dialogue: 0,0:20:58.15,0:21:01.63,Default,,0000,0000,0000,,Go ahead and set up an example\Nenvironment variable file Dialogue: 0,0:21:01.63,0:21:05.14,Default,,0000,0000,0000,,so people know "Hey, you need this thing." Dialogue: 0,0:21:05.14,0:21:06.94,Default,,0000,0000,0000,,to save them that time Dialogue: 0,0:21:06.94,0:21:09.14,Default,,0000,0000,0000,,So that's all part of good documentation. Dialogue: 0,0:21:09.14,0:21:10.38,Default,,0000,0000,0000,,so keep that Dialogue: 0,0:21:10.38,0:21:12.63,Default,,0000,0000,0000,,Set that up for other people. Dialogue: 0,0:21:12.63,0:21:15.31,Default,,0000,0000,0000,,You can also contribute to open source. Dialogue: 0,0:21:15.31,0:21:20.74,Default,,0000,0000,0000,,So say you find a problem in \Nsomeone else software or gem, Dialogue: 0,0:21:20.74,0:21:22.60,Default,,0000,0000,0000,,go ahead and let them know Dialogue: 0,0:21:22.60,0:21:26.100,Default,,0000,0000,0000,,So open up an issue on Github \Nif it doesn't already exist. Dialogue: 0,0:21:26.100,0:21:31.22,Default,,0000,0000,0000,,Let them know the step that \Nit takes to recreate this problem. Dialogue: 0,0:21:32.16,0:21:34.67,Default,,0000,0000,0000,,If you were able to write a test for it, Dialogue: 0,0:21:34.67,0:21:37.51,Default,,0000,0000,0000,,go ahead and submit a pull request with that test Dialogue: 0,0:21:37.51,0:21:40.98,Default,,0000,0000,0000,,Sometimes that's helpful even if you \Ndon't know how to solve the problem. Dialogue: 0,0:21:40.98,0:21:42.59,Default,,0000,0000,0000,,That's helpful for maintainers to say Dialogue: 0,0:21:42.59,0:21:45.05,Default,,0000,0000,0000,,"Oh, this is the test that's failing." Dialogue: 0,0:21:45.05,0:21:46.09,Default,,0000,0000,0000,,And of course, Dialogue: 0,0:21:46.09,0:21:47.80,Default,,0000,0000,0000,,if you do know how how to solve the problem, Dialogue: 0,0:21:47.80,0:21:49.70,Default,,0000,0000,0000,,go ahead and submit a pull request for that Dialogue: 0,0:21:49.70,0:21:51.92,Default,,0000,0000,0000,,You just got some open source contribution Dialogue: 0,0:21:51.92,0:21:53.76,Default,,0000,0000,0000,,and that's awesome Dialogue: 0,0:21:54.98,0:21:58.77,Default,,0000,0000,0000,,You can also write about your experiences Dialogue: 0,0:22:00.46,0:22:03.42,Default,,0000,0000,0000,,Have you ever written something up and then Dialogue: 0,0:22:03.42,0:22:07.67,Default,,0000,0000,0000,,later down the road and you're like\Ngoogling for that same problem Dialogue: 0,0:22:07.67,0:22:10.44,Default,,0000,0000,0000,,and you come back and \Nyou find your own blog post? Dialogue: 0,0:22:10.79,0:22:12.06,Default,,0000,0000,0000,,Yes. Yes. Dialogue: 0,0:22:12.06,0:22:16.22,Default,,0000,0000,0000,,And you're like "Man,\Nthank you so much old me. \N Dialogue: 0,0:22:16.38,0:22:17.63,Default,,0000,0000,0000,,That was really helpful. Dialogue: 0,0:22:17.63,0:22:20.11,Default,,0000,0000,0000,,Thank you for writing that down." Dialogue: 0,0:22:20.11,0:22:22.78,Default,,0000,0000,0000,,So think about all those other people out there Dialogue: 0,0:22:22.78,0:22:25.63,Default,,0000,0000,0000,,that are getting the same reaction \Nwhen they find your blog post Dialogue: 0,0:22:25.63,0:22:28.43,Default,,0000,0000,0000,,and they're like "Man, that was really helpful blog post. Dialogue: 0,0:22:28.43,0:22:30.36,Default,,0000,0000,0000,,Thank you for writing that down." Dialogue: 0,0:22:30.36,0:22:33.08,Default,,0000,0000,0000,,So if you're not doing this already, \Nyou should be doing this Dialogue: 0,0:22:33.08,0:22:34.78,Default,,0000,0000,0000,,Anyone can start a blog. Dialogue: 0,0:22:34.78,0:22:38.09,Default,,0000,0000,0000,,If you don't already have one, go start it. Dialogue: 0,0:22:39.52,0:22:42.06,Default,,0000,0000,0000,,You can also write failed experiment. Dialogue: 0,0:22:42.06,0:22:44.06,Default,,0000,0000,0000,,Don't be afraid to do that. Dialogue: 0,0:22:44.06,0:22:48.37,Default,,0000,0000,0000,,In grad school, we always joked about \Nstarting a journal of failed experiments Dialogue: 0,0:22:48.37,0:22:51.67,Default,,0000,0000,0000,,That way we would publish a million papers that way Dialogue: 0,0:22:51.67,0:22:55.46,Default,,0000,0000,0000,,Like well, these are the million things\Nwe tried and they didn't work Dialogue: 0,0:22:55.46,0:22:57.46,Default,,0000,0000,0000,,But that's OK. If you... Dialogue: 0,0:22:57.46,0:23:00.31,Default,,0000,0000,0000,,Sometimes that's also helpful Dialogue: 0,0:23:00.31,0:23:03.70,Default,,0000,0000,0000,,and maybe somebody comes along \Nand read this and can help you Dialogue: 0,0:23:03.70,0:23:05.08,Default,,0000,0000,0000,,and say "Hey, Dialogue: 0,0:23:05.08,0:23:07.10,Default,,0000,0000,0000,,you might try doing it this way. Dialogue: 0,0:23:07.10,0:23:09.39,Default,,0000,0000,0000,,That might solve your problem." Dialogue: 0,0:23:10.07,0:23:11.70,Default,,0000,0000,0000,,The most important part Dialogue: 0,0:23:11.70,0:23:16.00,Default,,0000,0000,0000,,about keeping a lab notebook\Nis sharing the the knowledge Dialogue: 0,0:23:16.00,0:23:18.49,Default,,0000,0000,0000,,In academia, it's all about Dialogue: 0,0:23:18.49,0:23:21.52,Default,,0000,0000,0000,,gaining knowledge and \Nthen sharing that knowledge Dialogue: 0,0:23:21.52,0:23:24.96,Default,,0000,0000,0000,,either through publication \Nor through teaching Dialogue: 0,0:23:24.96,0:23:29.62,Default,,0000,0000,0000,,and I think developers can \Nreally learn a lot from that Dialogue: 0,0:23:29.62,0:23:31.74,Default,,0000,0000,0000,,So as you're doing these experiments, Dialogue: 0,0:23:31.74,0:23:33.46,Default,,0000,0000,0000,,go ahead and share that information Dialogue: 0,0:23:33.46,0:23:35.42,Default,,0000,0000,0000,,Maybe tweet about it Dialogue: 0,0:23:35.42,0:23:38.51,Default,,0000,0000,0000,,or blog about it, like I said Dialogue: 0,0:23:38.51,0:23:42.12,Default,,0000,0000,0000,,or you can even come and present \Na talk at a conference like this Dialogue: 0,0:23:42.12,0:23:44.36,Default,,0000,0000,0000,,"Hey, here's this weird \Nthing that I figured out. Dialogue: 0,0:23:44.36,0:23:46.37,Default,,0000,0000,0000,,Let me tell you about it." Dialogue: 0,0:23:47.06,0:23:49.82,Default,,0000,0000,0000,,So that's really the most important part Dialogue: 0,0:23:49.82,0:23:52.11,Default,,0000,0000,0000,,is sharing that knowledge with other people Dialogue: 0,0:23:52.11,0:23:54.21,Default,,0000,0000,0000,,and teaching it to other people Dialogue: 0,0:23:54.21,0:23:59.60,Default,,0000,0000,0000,,And so I'm really looking forward to \Nseeing all of your lab notebooks online. Dialogue: 0,0:23:59.60,0:24:01.54,Default,,0000,0000,0000,,Thanks very much