 Okay, so I think you guys sort of misunderstood. This is the entertainment portion of the afternoon. I'm going to embarrass myself in front of you. This is actually your chance to sneak off and go drinking early. But thanks for showing up for my public humiliation. So, you know, there is a certain amount of coding I do. It is kind of like the way I play golf, which is slowly and not very well. But I do a little bit of it. And so I spend a certain amount of time thinking about what it will be like one day when I'm actually a coder and not just someone who sometimes codes. And so that's kind of the thought experiment and the world imagining that I'm going to take you through with this particular talk. So first of all, that's my Twitter handle if you want to heckle me online. Abby's right, I run a product strategy company called The Difference Engine in Brooklyn. It's a lot of fun. It's a lot of translating what people actually find valuable into actual products that they can then use, which is a harder uphill battle than it should be, but it's a worthy one, I think. So feel free to make fun of me online. This is the world I come from. It is a bloody business advertising. It is generally characterized by, I think some conditions you might actually feel some empathy for, which is clients coming to you thinking they already know what they need and asking you just to make that thing. And so it's a lot of I need a 30 second spot. But the reason I need a 30 second spot is because for some reason everyone stopped buying my product. And the reason that they stopped buying your product is not only that you haven't done any advertising in a while, but also that your product sucks. So, and people kind of figure that out. But please just make me a 30 second spot because I don't trust you to know anything about my actual business. So that's the world that I come from. And when I joined the world of advertising, I started out as a writer, actually, which was an interesting choice. I was a cynical enough teenager and person in her early 20s to think that it would be great to have a job where I was a writer and I had the pay subs to prove it. Damn, that was the thing I was really looking for. So I went and got a degree in advertising and I went and worked in advertising and then very quickly I discovered that advertising agencies don't have a lot of use for junior writers. And so I went to work for a web design shop and there I started making things out of the internet and that was 99. So it was mostly HTML and we were like hand coding every page. It was really awesome. But so this morning when DHH was talking about, you guys are actually all software writers. I was like, yes, awesome. This is why I actually really like the idea of coding and why I think it's an interesting construct for thinking about thinking and thinking about the ways that we're going to be collaborating in the world as code and technology evolve. So the thing about being a writer, however, is that there is a line from Chaucer which is the life so short, the craft so long to learn. And this characterizes writing and writing itself is about a writing practice. And much like the writing you do, much like Zen Buddhist meditation, you actually just have to sit and do it and you have to do it every day over and over and over again and you have to get someone to give you feedback on it and that's painful. You don't wanna do that but you have to. And then you have to do it again. And so this is actually a really great construct for thinking about some of the things I'm gonna talk about in the rest of this talk. So thanks for teeing me up this morning, David. So good writing practice, like I said, first of all, just write, then leave it. Stop fussing over it, stop worrying it, stop revising it, stop running. What was it? Four lines of test for every one line of code. Leave it alone for a bit. Read it aloud, actually. It's a really useful exercise and I find it's actually a useful exercise for me as a terrible, terrible coder to try to like read it a lot. Oh yeah, semi-colon. Then of course there's the need to edit and in editing you must kill your darlings. And so every once in a while you actually have to blow up the thing that you did, throw it out and start over. A few years ago I took a fiction writing class which I'd never done before. And the very first story I turned in, I actually felt pretty good about it even though it really was very painful writing it. And my classmates were really very sweet in the critique. They said the language is beautiful but what's the story about? Oops. So there's a point where you can try to like force a story into this beautiful writing where there was no story to begin with or you can just throw the fucker away and start over. And so I just threw it away and started over. And the next story I wrote actually had a story and came from an entirely unexpected place and it turned out that it really reflected how much like genre detective fiction I grew up reading. Because suddenly instead of this sort of heady cerebral lifestyle piece that I started out with I was in a murder mystery in Grand Ronde, Oregon. Which is a town that's about the size of a nickel. So that was a weird choice. But this is fundamentally what good writing practice is and that's how I was trained and taught and I think it's a lot of what you all do as well. But as I said, it takes a long time to get any good at it and you can spend a lot of time gnolling your desk trying to avoid actually doing it. But what happens to everyone when everyone learns how to write this way? When everyone learns to be a software writer and to produce code? So what seems to be an accepted fact at the moment and I know it's a fact because the president and Michael Bloomberg say so is that everybody should learn to code. The president actually said everyone should learn to hack which I thought was a really interesting provocation coming from that guy. But in the meantime, everybody should learn to code. My boyfriend was joking about how he wanted to make a single serving site that was has Bloomberg learned to code yet and it'll just be no every day. But he said he started in 2012, we should check in with MCI was doing 129 million results in Google everyone should learn to code as a search term. So clearly something we're talking a lot about and then there's my little friend Grant here who at about two and a half was blogging on his blog on his bloggy toy. So he's ready, he's totally and he's got stripey shirt on and everything we're in a bar. He's totally a hacker already. And so obviously this is true. Everyone should learn to code. We all agree. Everyone should learn to code. Your grandmother should learn to code. The kid down the street should learn to code. Your janitor should learn to code. Everybody should be learning to code. Just simply true. So this is what we know out in the world as novices about how to become a coder. The first way you become a coder is you go to school. So you spend about a hundred thousand dollars and you spend four years of your life and you get a CS degree and now you're a coder. Yeah, that's how that works. And that's how totally we're gonna get a million STEM graduates that way. So that's awesome, we're gonna do that. And then the other option is perhaps less official but more traditional which is you need like 10,000 hours or 10 years whichever is longer to really become a coder. And so dig in everybody because it's gonna be a while. And then of course we learn some facts and facts are uncomfortable and convenient things as we know and that's like half of tech workers don't even have college degrees at least in New York where apparently it's a town full of dropouts which is great. But the part of that is that we need all of these tech workers and the ones with the CS degrees went and worked on Wall Street. So in order to actually build useful products that generate value, we have to get the people who dropped out of college because that's who's left. So then there are these other new ways of learning to code and I've dabbled in many of them. There are schools, code schools like Flatiron School, Avi Flumbum, created that which is awesome, Yay Avi, I've taken a class, couple classes from Avi, he's Brock's. General Assembly is a place in New York where you can learn to code apparently. There are these sort of online code schools like Codecademy, Skull Crush, Code Hour where apparently all kinds of people are learning to code right now in an hour. There's the Learn to Program book, Chris Pine, who got me through a really boring winter and I had a lot of fun. And then there's like the usual kind of like I'm just gonna crush in and just fucking throw myself at this thing. I'm gonna Google it, I'm gonna wind up on Stack Overflow, I'm gonna sort of figure out what GitHub is and I'm gonna sort of learn to code by looking at stuff. And so sometimes it seems like the rough estimate around most of these things is like in 12 weeks you can become a coder and make $80,000, you know, give or take. So I've been working on this. It started for me with my friend Noah Breyer who calls himself a liberal arts coder, taught me a little bit of PHP. We made a very silly web app together one afternoon that was called Boyfriend Dog or iPad and it basically threw up scenarios and you would decide which thing was most appropriate for the scenario, a boyfriend, a dog, or an iPad. Which is this brilliant idea I had on a very long drive by myself. So he taught me a bit about PHP and basically summarized it as all you have to know is get and post and I said, all I need to know is cut and paste. And then I went to a startup weekend where everybody was like slinging code really fast and building shit and like one weekend I was really impressed, I had a great time and a ton of really important people, important to me I should say. Sorry about that guys. And that's where I first heard of Ruby on Rails because that's where people told me like that's the thing you should start with because it's really welcoming, it's an open community, it's a nice place to be, it's a nice language to learn, it's fairly intuitive as these things go. That's how you should get started. And then I met Stuart Eccles who lives with me and is nice to me. But he started teaching me some Ruby on Rails so I got myself a Hello World Localhost 3000 page go and it was pretty exciting. And then we went to South by Southwest in 2011 and I heard John Dahl give this great talk that was kind of about kind of beautiful craft of code and the subtitle was something like lessons from Orwell and the Clash. And I went, oh that is the session I'm going to and that's why I want to learn to code punk rock and Orwell, let's do this. So then they learned a program about Chris Pine which took me back to high school calculus which I loved because there were ways of solving problems and there were ways to tell when the problem was solved which the rest of my life no longer looked like. And so that particular set of exercises was great fun. And then my good friend Rachel Sklar connected me to Avi through the list which is her startup and I took this two hour intro to Rails class from Avi through Skillshare that made it all make a hell of a lot more sense. He was a really interesting metaphor around waiters and cooks and bus boys and it had to do with models and views and controllers. I can't repeat the metaphor but it made a lot of sense of the time because I had weighted tables. So that was really kind of, that's the path and this all sort of kicked off at the end of like 2010. And so I'm still on this path and it's a slow road and a road that I'm not always on but it's definitely been an interesting one. So I'm part of this world of everybody should learn to code. But the truth is and the thing I've figured out along this path is that you learn to code by coding, right? It's the same way you learn everything else. And just because you are doing the thing does not mean that you identify as that thing. So I learned to sew by sewing but I'm not a seamstress, believe me. I know how to fix non-hybrid vehicles more or less for basic day-to-day work but I am not a mechanic. There comes a point where I'm like the fan is making a funny noise and that's like the end of my knowledge base. But there's a way where you just sort of do stuff. You open the hood, you look under the chassis, you kind of point at things and go I think that's what's broken. And that's really useful actually because it can save a lot of time on the expert side if I can point at the broken thing and just say that's the broken thing and he'd go oh right well replace that broken thing as opposed to having to figure out what's broken. I'm pretty good at the diagnostic side now and that comes from just doing it a lot and kind of figuring what's the worst that can happen. So which turns out to be not very bad things most of the time. But when you start out this process of learning a code it feels a lot like this. It's very frustrating, it's a bit confounding, it all seems a little bit mystical and it does not bring the best out of people. But then after a while you find something that feels a little bit more like this which is that sort of initial training onboarding process in Call of Duty where they are trying to teach you how to use your weapons so you don't die quite as fast as you would on your own. Which as a occasional gamer who really loves a shooter I appreciate the effort that the developer has made and trying to make it easier for me to live just that much longer into the game. I think what they're trying to do is set you up to be successful as opposed to set you up to be an abject failure every time and I have volume and you don't which is good. But then after a while you decide you're just gonna turn hardcore and I was at the New York Public Library listening to a really interesting interview it was Chuck Polaniak interviewing Douglas Copeland and he was talking about how the first time he read I think it was Generation X or microsurface he just was like this is how I wanna write it's like punk rock, you start fast you go hard and you stop kind of abruptly. And that's punk music, it's all the same notes everybody else plays but it starts fast goes hard and stops. And that's how Chuck Polaniak writes and more or less when I bothered to code at all that's how I write as well. It doesn't come out like really good punk rock but it comes out sounding like something. So how's that working out? Right before the election in 2012 I had completed my first build of my website which I did in Rails because it's not this website this is my WordPress blog but I wrote a blog post about it. I had started my company The Difference Engine I decided this is the way I'm gonna learn how to code is by actually building the site from scratch I won't do a WordPress site I won't do a Squarespace site I'm gonna build this thing myself so that I could actually understand a bit about the underpinnings and the underlying system and how this whole thing works. And so when I finished that I sort of found myself reluctant to brag about it not because it was bad, that wasn't great but because I sort of felt like if I say I built that that's not actually a genuine representation of what happened here. And at the same time Barack Obama was being harangued and impressed for saying you didn't build that about business entrepreneurs and business owners and I think we all more or less know what he meant which is that there's all this underlying infrastructure in an economic system and a tax base and workers and people and education and all of that kind of thing that Steve Jobs didn't build that stuff he built Apple, yes but he did not build all of the stuff that connects Apple to the rest of the world and so that made me start thinking about my experience in building the site and so I basically did a people.txt file as a blog post and wrote about all of the things that I had used that were free or cheap on the web to build my website and start my business. And somehow it wound up on Hacker News and Tim O'Reilly called it like this is the great description of the startup stack and I was like Tim O'Reilly. But like these are the people that I had to depend on in order to build this basically blog with a few static pages and all of the parts that came into it were referred to by people I knew on the internet and people I still haven't met in person people in this community who built these things and made them available and wrote really good documentation that made it possible for me to figure out what the hell it was and all of that went into building that first site. Now this is November 1st, 2012 that I posted this thing last summer I threw it out and rebuilt it again that's the kill all your darlings thing I think and started completely over but what I experienced in that moment was something I wasn't really expecting from something that struck me as being full of people not like me for a variety of reasons and being a specialist expert community and that was straight down to one of the guys who developed locomotive CMS responding to a tweet in the middle of the night and getting on Skype with me to explain how to install the fucker. That was something he was willing to do with his time for some person who had absolutely no business even trying to install it. So that was the level of assistance and support and sort of confidence building that I was getting from this community and I just was over the moon about the experience and had to kind of recognize it somewhere. One of the things I learned along the way of course is that there are two topics that are plentiful on the internet how to create more internet and porn. And I think how to create internet is actually I think there's more of that actually than porn to be totally honest which might be surprising but I think it probably is. One of the things that comes with the internet teaching you how to create more internet is that in this sort of self replication model that it's put out there you wind up with a situation where you are not either just learning or teaching the code you're also learning or teaching the culture and that can be good and my experience with it initially was incredibly good but it can also be a little bit scary. And so one of the ways that you start to realize that it is a little bit scary is it was actually something that he said this morning professionals obey the laws and amateurs break them and that's really great it makes amateurs sound like rock stars and like we're just rebels man and we're just like to the man and breaking the laws and stuff but actually there are amateurs and then there are novices and I'm obviously in the novice camp so I would probably say that novices also break laws but typically accidentally and often without even realizing it. And you realize it for the first time when you encounter a stack trace and you see this for the first time and it is a massive what the fuck moment and you wanna cry and scream and hide under the desk and rock back and forth and I did all those things and then I was able to remind myself because I grew up in a hardware high tech startup household my dad worked for Intel and Sun and all of the others and so the sort of reminder in the house was you can't break don't worry about breaking the computer it is a box made out of sand that understands on and off that's all it is so like don't worry it's really okay so the thing I reminded myself was like okay I did not when this happened break the internet for one thing if I had broken the internet someone would have called the president for another what you immediately start to figure out is oh there's an error message here and I can copy and paste the error message and then I'll end up at stack overflow and so stack overflow is great like it's really great parameters and novices this is a place where you find out you're not alone and experiencing your problem and you typically find a solution to the problem you get an answer which is great right except then there's this whole kind of onboarding to the culture thing which is that you ask your first question the response you get is something like this it's difficult to tell what is being asked here this question is ambiguous, vague, incomplete overly broad or rhetorical and cannot be reasonably answered in its current form to which I would say, channeling Sam Seaborne those are a lot of words that mean the same thing but secondly, so you have that sort of initial response of oh my god, this was like the most I guess polite flaming I've ever received on a discussion board and clearly I'm not wanted here clearly I'm not even asking the question in the right way, I don't belong here the flip side is you finally find the one person who has the same problem you have no one has answered their fucking question and it hasn't been updated in five plus years and the pit of despair that you fall into in that moment where you realize five years ago you would not have been alone but now you are is really, really upsetting it's really upsetting so that sucks about Stack Overflow and so you start to think like is Stack Overflow terminus? like it's community and everything it's sanctuary and everything those who arrive survive or maybe they get eaten and sometimes you get eaten sometimes you ask a question in the wrong way and the response is chomp like it's just just you're dead now and there's no coming back from it and you just kind of wanna crawl away and die but what actually I think happens as a result of that is that novices, the people who need the help the most don't ask for help here because we don't wanna piss you guys off and we don't wanna embarrass ourselves more than we already are embarrassed so we lurk and hopefully we find somebody else who's braver than we are who's asked this question in the right way, in the right place, at the right time with the right reputation points and so then the other feeling is like just when you think, you know just when you think you've kind of got a handle on things you basically understand what Rails is you basically understand what JavaScript is or you basically understand how to find a gem that does the JavaScript thing that you wanna do because you don't know what JavaScript is you discover that coder is a moving target you started to think you were out of novice territory and you found out that no, actually they moved the ball and the goal post a little bit further down the field and now being an expert is just farther away than it was five minutes ago and so that is also pretty daunting you will never actually close the gap I will never actually be you guys which is okay but also kind of sad and that's something that I think is also a little bit daunting for those of us who are new it starts to make me wonder are we approaching something like a structural code inequality where we actually have a situation where it's no longer just individual inequality where it's good for you to be experts and me to be a novice because that's motivating to me to learn and to become a little bit more like you or is it now sort of a goal among sort of the elites of the coding world to make that a permanent and immutable truth that there are experts who just become more expert and there are novices who might become amateurs and amateurs who never really reach expert status every time you kind of layer on a new framework or a new language or a new what the fuck ever that's a whole new thing that I've got to learn and it just makes it feel that much farther away and sometimes I wonder if you're not doing it to get farther away from us novices but anyway if that's what you're aiming for I just think you know structural inequality is a general matter economically and in the universe of open source communities would be bad much like crossing the streams so what anyway I mean the problem of course is I'm sure that there are many of you that are going so what you mighty bitch who cares like not my problem you don't know how to code if you wanted to learn how to code you could have got on the Commodore 64 when you were 12 and started teaching yourself some C++ or some basic come on come on you could have been doing that instead of making funny animations which is what I was really doing fine fair enough you don't owe me anything but technology is awesome and we're in a moment again where it's starting to feel a bit magical and this is one of my obligatory robot videos gifts this robot has figured out how to do something really really hard figured out how to jump on one foot sideways this is not easy the physics of and the sort of underlying system of jumping is actually really complicated it took a long time for robotics to get to a place where we knew how to program a robot to do this and to create hardware that could sustain it and all of the rest of it so tech is amazing and this is a universe we should be getting into because it does create value and it is a place where we can lead an innovation and we can find great jobs and we can do cool shit and we can make beautiful lovely things like this hilarious jumping asmo robot but then it's also scaring the shit out of people at the same time you've got this other kind of robot which is called big dog but looks like a fucking horse and he can like swing his neck to throw concrete blocks I don't know what he's gonna do but it's not I think he's gonna loot LA actually and you've got that you've got backscatter you've got prism hooray you've got glass holes and people who don't want glass holes in their establishments because of creep shots this is the other part of technology that people are worried about and so you know I was thinking about this I was looking through MIT technology review and they were writing about robots doing something awesome it's like oh robots are so great robots are the thing that actually make me feel like technology is still in this place where it is sufficiently advanced to be indistinguishable from magic that great Arthur Clark's quote and that's great but after a while you start to wonder are we talking about good magic or the dark arts? Are we talking about betheaters or people who are willing to be tolerant of us muggles along the way and be kind of nice to us and not scare the hell out of us with this like evil technology and so the question I guess I have for you if you think so what what do I owe you as a novice coder is who side are you on? But I think a little bit there is this question of like what will be the role of technology and the people who create technology and how will you bring us into that fold? But let's take a deep breath let's not get too over I'm not calling you Voldemort he who shall not be named but everyone should still learn to code right? I mean despite all of this like evil technology and it's really hard to stack over flow kind of sucks and it's probably terminus despite all of that we should still be learning to code but then again who's everybody and how much do I really have to learn in order to be fluent or conversational in this new language? I think the truth is that most of the code schools out there now are actually teaching most amateurs to be at most conversational coders we don't really stick with it like we do the 12 week program and then we go back to our regular jobs but now we know something about kind of how the internet works and how the web gets built and what the difference is between something in JavaScript versus something in HTML and what HTML5 is and what Rails is all of those things matter and we know a little bit more about that and I think that's good we shouldn't actually be thinking of that as somehow a failure of these programs to turn out engineers because I don't know that they're actually really aimed at that just like what David was saying this morning it's not so much about creating engineers it's about creating some coders and that can be along a spectrum of expertise so what does that mean for you? I suppose it means that you have to be more than just devs, you're not just coders anymore it means you're now writing for a much broader audience it means people like me are gonna open up the source code and have a look I'm gonna tap the chassis and see what's underneath it and it probably also means that solving problems goes beyond writing beautiful code like that's not the only problem to be solved and maybe isn't the most important problem to be solved maybe dirty code is good enough to solve a problem first of all and maybe the problem's the real thing so then we also have this universe of strategy inequality I don't know how many people saw the expert video that was being sorted around in addition to the fact that a lot of people are incredibly annoying I'm not playing the audio on this the problem with that scenario is like A, we've all been there and whatever our jobs are if you are an expert in something you have been treated this way by a client or a teammate you have been expected to just somehow figure out how to make seven red lines perfectly perpendicular and green or transparent so you can have the argument of red lines are by definition neither green nor transparent and seven lines cannot all be perfectly perpendicular to one another these are the laws of light and geometry there's not a lot more that I can do about that for you and you can mic drop and walk out of the room if you want to the problem that I had with that is that's where he's not being an expert because if that guy were being an expert he would have backed that conversation up and he would have said let's talk about why seven red lines that are green and transparent need to be perfectly perpendicularly why are you asking me for that what problem are you really trying to solve that you have arrived at a strategic idea is fine how did you arrive there let's figure out how to solve your problem it might involve red lines and we might actually discover and an amazing fluke of innovation a way to make red lines green who knows but we have to understand what we're trying to achieve first so I had a little bit of a yes we've all been there big sigh and then also that guy's being a douche because he should have just said wait what's the real problem and so I think what I'm getting at is your opportunity is to become customer centric coders I'll talk a little bit more about what the hell that means in a second first of all we're all on this together this is now your product team it's pretty exciting actually to have these guys be on your product team especially Phil Colson but in a way that's what I'm talking about this is about being in it together as opposed to everybody has their job and they protect that job vehemently and zealously so all of these people have a different set of skills they all bring something to it they are all to varying degrees technical and yet their job is much much bigger than whatever their particular skill set is so the first thing to think about is that this is the new product team it's these conversational coders people like me who are thinking about the business needs thinking about the end users needs thinking about what is what is the problem that we're trying to solve and it's customer centric coders who are equally concerned about those things that are a hell of a lot more fluent in the code that's actually going to implement the solution to the problem than I am but because we can actually have a conversation with each other at the level of the technology will work faster and will work better that's the basic hypothesis that I have and I think there's some evidence to suggest that this is true I mean my dad worked for Intel he was a his last job in Intel was Xeon product champion I'm still not totally sure where the hell that job is but I know that it involved being a guy who could speak engineer and speak customer and that he could go down to the fab roll up his sleeves and assemble a server if that's what they needed to do in order to fill an order that was a valuable person in that organization and one that hardware companies have accepted as true because it's hardware everybody can use a screwdriver so you can assemble a server if you basically know to plug slot A and a tab B or whatever you can figure that out but that has been absent so far from the world of software where the code sits in your mind it's like that video of shit programmers say where they'll say anything like you're sitting by yourselves with your headphones on and you're just coding and then at the end at the very end you go fuck and that's all that you say in the course of the day right so that's not working but in this new universe where I'm conversational in the code I can be helping you brainstorm and problem solve at a conceptual level and telling you what I need in a different way that's at the strategic level as opposed to at the execute this now code monkey level and we can actually be in a dialogue together doing better work so how do we get ready for that for starters I would really urge especially this community the community around Rails to keep all the good intentions and match it with really good behavior and there were several things that attracted me early on to Rails not just that people were like it's like pseudocode that works like that idea was really sort of attractive but also there were some basic ideas like code should make you happy and the thing is when you first see stack trace the happiness sort of and then when you hit stack overflow and you get admonished for posting your question in the wrong place your happiness goes like this code stops making you happy pretty quickly when you're a novice and so the question I guess and I don't know what the answer is exactly for this except more guys like that locomotive CMS dude who helped me out one night more people who on Twitter said you don't need to build that from scratch there's something that's already built like built for that and there's a gem for it just here's a link go do it those were the moments that made me keep going and make me continue to keep going so let's stay on with Matt's is nice so we are nice and that code should make you happy don't go alone I love those guys but but this is this is also true of writing I mean in my writing practice every you know every week I go and sit with someone who is also writing we don't have the same project and we don't really even talk to each other much but we sit next to each other and we pair right and occasionally we help each other out with something I'm stuck here or how do you say the past tense of that word you know there are those moments that happen and that's where matching up more amateurs and pros more novices and amateurs more people of mixed experience is a good thing and pair programming I think should become more and more important and more and more part of the onboarding process for novices clarity counts I know that he talked about that this morning but the whole kind of the expectation that I'm going to be able to open up you know bundle open gem and know what's going on in there assumes a lot of things it assumes that you're being clear in the code that you're writing and assumes I know enough to be able to read a gem which at the moment I don't know I don't think I've ever tried that that scares me much like walking dead scares me but like you've got to get away from stuff and things it's got to be it's got to be really concrete and clear for people who are trying to implement the thing that you've already built and that was where I found myself you know thrilled when you go to Ruby toolbox there was like the really popular one and you go and look at it go well it's really popular because it's really clear how to use it and so yay I'm going to use it but then you start to worry is this the best practice now is this the most recent thing or is it just the most popular thing you start to question your own intentions there and that's where you know I think there's there are other ways to gain that clarity so more pseudo code not pseudo code which I had to learn the hard way but more and more sketching and this was something Avi taught me when I was really struggling with a particular assignment in class which was write it out in plain English one of the things you discover really quickly is how much you assume when you write something in English they're having to really break things down into this like molecular structure in order to figure out well if I want the wheel to turn I've actually oh god there's an axle I've got it okay so now I have to make an axle and the axle has to do this and turn where turn which way turn how much all of those things require you to become really concrete and really clear pseudo code and sketching help a lot and it helps those of us who are less fluent in the language see what you mean as much as we can read what you mean um yeah no more empty readme's man I saw this the other day from Sam Rose about people who are applying for DevRolls and they have GitHub profiles that have empty readme's or just whatever is the default hello world or whatever is in there and my favorite comment in it though is what this guy said in response which was that pretty color mark down readme's with comment essays are the whole point of GitHub and I agree but this is a thing where company called made by many which is where Stewart works they built this great I think it's great CMS called Sir Trevor and they pushed it on to GitHub and I was like ooh this is really I'd seen a demo of it it was really pretty I wanted to use it on my site and there was no documentation and actually then the next layer was like there was documentation that was like you know bundle install everything you know about JavaScript and I was like well I don't know anything about JavaScript so that's not helpful and so you know one of the things that they did incrementally over time was actually create better documentation so that other people could actually pull in and forth but this is also a metaphor it's not just literally write something in the readme it's actually sort of a way of life I think we should all try to try to embrace which is that no empty readme's is really about being constructive with your criticism so it's not just that code sucks it's not the code review metric of what the fuck's per minute it's actually like giving people something to work with as part of the critique it's also about providing context to your code so when you push something when you commit something when you post something in GitHub what is it that you have done here and why did you do it and this is one of those things where I did not take seriously for the first six months the importance of commit messages until I tried to roll something back and had no fucking idea what I'd done and so that's you know important for all of us not just the beginners not just sort of when you're actively working on a project when you create something for the community having good comments and good context I think the other thing is you know I again grew up in a technology friendly household so read the fucking manual was the rule of the day down to things like I'd ask my mother what a word meant and she'd go check the dictionary she wasn't gonna tell me look it up so there's we should be preferring read the fucking manual as opposed to read the fucking code because I'm not smart enough about the code yet to look in the code and go oh that's what you were trying to do I'm gonna look at the code and it's gonna be the exact same reaction that I had to stack trace the first time I'm gonna cry so don't make me cry that's what I'm really asking you to do but no I think having good documentation matters so all of those rules for good writing apply to writing code too including things like when your project is no longer best practice when it is out of date when it is not it no longer works on this build of rails or it breaks everything in a project kill it or update it leaving it out there in the wild is just another way to attract those of us who don't know the difference between predator and prey quite frankly so don't do that and I think this then allows us to optimize the right thing so again instead of sort of the TDD conversation optimize the important things which is yes your code and yes your process and yes the documentation so that we can spend most of our effort and our focus on optimizing the products we're building for people that's the actual objective most of the time we're trying to build stuff that's valuable to people so there's a thing though about this agile which is that when you've got this kind of like working software over comprehensive documentation I posted this thing it works always be shipping great I don't need to go back now and document anything I did it's not really what they mean when they say over comprehensive documentation it really just means like focus on getting the software working first then do your documentation as opposed to document first and then make bad code so part of it is how we think about agile and how we use this word out in the wild and I work in an industry that thinks it knows what agile means and it really really really doesn't and thinks agile just means fast it thinks lean means cheap by the way so it thinks lean is like oh yeah we're totally lean we only have three people on this team we're agile we got this done in only four weeks instead of 12 that's not what this is about but my friend Bill Scott who's a senior engineer at PayPal talks about how agile doesn't have a brain and so I just wanted to pause here for a moment because I know I'm saying like document document document I don't mean to the nth degree or the way we used to do the business analyst would do the specs for software and it would be you know it would kill a forest in order to capture all of the requirements for the piece of software most of which were unnecessary and also didn't really work together but I would just sort of say like all things in balance when it comes to agile but I think there's another part of this which is okay so now we can optimize the code we can optimize the documentation we can optimize the process we can optimize the products but who are we optimizing for who are you guys optimizing for and I would sort of suggest you have kind of three customers you have your product team that you are working with you have your community which will reap the benefits of the code that you ship and you also have your end user who has to be able to find something of value in the thing that you built and this is actually a world I spend a lot of time talking to clients about so I will now move slightly over into the world of analogy and talk to you a little bit about a project I worked on a couple of years ago actually I didn't even work on it we pitched it and we lost and we deserved to lose and here's why so Nike wanted a tracking study for Nike and the company I worked for was in the midst of being bought by another company who wanted to do their tracking study so they had a methodology for doing surveys of customers to find out how was the brand doing out there in the world and they had a point of view and their point of view was that this guy with a lawn mower is the most important guy in Nike's universe because he represents the people who spend the most on Nike's except that Nike doesn't actually I mean they like him thank you for your money sir but they don't care about him that's not who they design products for they design products for the guy on the right the right so they're designing for that guy not for that guy and the company I worked for was suggesting that we should measure the way people thought about that particular brand from the point of view of the wrong guy which would be I guess useful for understanding what guys who wear Nike's to mow the lawn want in a product but it's probably not gonna keep Nike at that kind of height of cool innovative you know cutting edge everybody with a body is an athlete like just do it like that that brand will start to dissolve under the weight of caring a lot about the guy who's just gonna wear Nike's to mow the lawn and that's a place where you have to pause for a minute and go who are we designing for who is this business designing its products for and then how do we design processes and tools and software essentially to help this brand team make decisions that's designed for the right problem the other great example of this is Axe Axe is always kind of in a funny funny situation because their media target they place they place advertising in magazines that are aimed at like 18 to 34 year olds which is kind of a wide swath of men but the people who actually use Axe are like 15 to 18 so that's okay because 15 to 18 year olds read the same magazines that 18 to 34 year olds read for the most part so that's fine you're gonna hit them in the right place but if we're trying to understand whether this ad is funny or appropriate or not and we're testing it against 18 to 34 year olds after about 25 you're not using Axe anymore and you find this humor kind of tired so your ad is not going to test particularly well amongst the group of people you're not selling to anyway and oh by the way the person who spends money on Axe isn't the 15 year old boy it's his mom and so now you have to worry about how racy and sexy can we be in the advertising when it's mom who goes to the grocery store or the Walgreens and buys Axe body wash for her 15 year old because apparently he can't smell himself she's gotta decide that it's okay for her to be putting a product in her son's hand that basically says use this and you will get laid a lot so you know there are a lot of people to keep in mind here and every one of them has a different need and every one of them has a different sort of interest in this and a different stake in the game and some people are just giving you money some people are actually using the thing and some people are trying to figure out how to market this to all of these moving parts which is really kind of chaotic and that's the brave new world of the customer centric coder I'm sorry to tell you which is that you have to kind of balance all of these different customers in order to be customer centric it's complicated but it's worthy and it's a place where you can elevate back up into what an expert really is supposed to be which is kind of consultative and smart and strategic and let's solve this problem together as opposed to worrying about what the deliverable looks like up front okay so then what I come from a world where people worry a lot about making things people want and making people want things that's basically marketing in a nutshell but I think we should be focusing on making things that are valuable making things that people maybe they don't know that they want it but once they see it they're like this is amazing this is the thing I remember seeing the first like when the iPad launched and there were these ads where it's just it's a person like shot from here down at their own perspective and they're like in repose with the iPad in their lap and I was like oh I wanna sit that way and look at the internet and that was it $500 to buy so like that was it for me but that was because they made a product that was actually valuable and we could be doing that we could be doing that a lot more by writing code that creates value as opposed to just writing code that tests well or that looks pretty or is restful whatever that is so when we're all coders I think this means that we can all be awesome because we've got these conversational coders who kind of understand what's going on at a conceptual level they can talk about code though they can't actually produce it you've got customer centric coders who can produce the code and who understand the business needs and the user problems and the actual opportunity and so now we can all be like Agents and Shields an awesome team doing awesome shit and that of course I think is the ultimate goal at least that's my ultimate goal so I think at the end of all of this what you're looking at is more awesomeness and I would like us all to just say challenge accepted and that's it for me