The Changelog: Software Development, Open Source - The Road to Ember 2.0 (Interview)

Episode Date: November 18, 2014

Adam and Jerod talk with Tom Dale and Yehuda Katz about the road to Ember 2.0 and the complete front-end stack it is today....

Transcript
Discussion (0)
Starting point is 00:00:00 Welcome back everyone. This is the changelog and I'm your host Adams Dekovic. This is episode 131. Jared and I talked to Tom Dale and Yehuda Katz about the road to Ember 2.0. Today's show is sponsored by PagerDuty, Hired, and DigitalOcean. We'll tell you a bit more about Hired and DigitalOcean later in the show, but our new sponsor, PagerDuty, I'm excited to have them on board. If you've ever gotten to work only to find something happen when you're out, the server's down, customers aren't happy, chaos everywhere, you got to listen up. PagerDuty decreases alerting noise for operations and developers. When an incident occurs, PagerDuty notifies the noise for operations and developers. When an incident occurs, PageDuty notifies the right team and team member with personalized alerts that fit everyone's communication preferences. Not only that, they also have analytics tools that help you identify common problems, allowing you to make system improvements proactively so you don't have to be woken up at 2 a.m. Sign up for a 14-day free trial at pagerduty.com slash the changelog.
Starting point is 00:01:06 And now, on to the show. We're here with Tom Dale, Yehuda Cats, myself, and Jared Santo. We're going to have this awesome conversation about the road to Ember 2.0. I think it's been a long road, a fun road. You've got lots of things happening on not only the product side where you use Ember, but the open source side where you've got this great direction and a lot of steam happening here. So I want to welcome you guys to the show, so say hello. Hey, great to be here.
Starting point is 00:01:39 And I guess we'll start with Tom. Tom, give a quick intro to kind of who you are and what you do at Tilda and then also what you're doing for Ember. Oh, sure. Yeah. So, hey, my name's Tom. I'm one of the co-founders at Tilda. And I guess I have been working at Tilda, I realize now, a good part of my career, which is really rewarding. So we bootstrapped Tilda, started about three or four years ago, and we work on a product called Skylight. And I'm very fortunate in that I get to work on mostly the
Starting point is 00:02:09 front end of that, which is just a big Ember app. So it's really nice to be able to dog food your own open source so much. And then I guess in the rest of my time, my nights and weekends, is spent working on Ember. So Yehuda and I wrote Ember three or four years ago now. And that was actually coming off the back. I worked on and maintained SproutCore at Apple. And the startup I left Apple to go to after that. And Yehuda? Yeah, so I guess I've been programming for a while now.
Starting point is 00:02:40 I think you have, yeah. For a long time, I hadn't been programming for that long. But now it's been a while. Basically, since the beginning of the jQuery days, I got to miss all the sad, sad years of dark days of the web, i.e. winning. I basically came on right after the end of that, which was great. The fun times.
Starting point is 00:02:59 Yeah. I mean, there was still a lot of work to do, but it was no longer a den of despair. Was that when Firefox had just kind of taken up some of your share? Yeah, Firefox just came out. jQuery just came out. Rails just came out. So basically there was hope for once.
Starting point is 00:03:15 So I did that for a while. I also did a few different companies. And Tilda, like Tom said, the reason why I was really excited to do Tilda was that I had done a bunch of... I've been part of, at an early stage, a lot of VC-funded startups. And I was finally in a position to start one and try to bootstrap. And honestly, it's very frustrating at times, obviously, like anything in life. But as a whole, it's pretty much everything I hoped it would be.
Starting point is 00:03:44 And it indeed lacks many of the things that were sad about VC-funded startups. And you guys started off with Tilda was all consulting, wasn't it? Or did you have product plans right away? I think we always knew that we wanted to do a product. But unfortunately, you had mentioned that he was at several early-stage startups. None of us was independently wealthy. So it's pretty hard to bootstrap a company when you're just, you know, making an engineer salary. So we use consulting as a mechanism to avoid the whole VC fundraising death march, which has been really, really great.
Starting point is 00:04:27 Although, as you said, stressful at times. But I think actually the best thing for us about doing the consulting is it has really opened our eyes about how to run an open source project because we get to go around to so many different companies. And each company has such a different culture, has such a different process, and has very different requirements. And so being able to kind of peek behind the curtain at people who are all these different companies that are using Ember and see how their needs are different. But also, most importantly, how their needs are the same has been really, really, really helpful in terms of kind of steering Ember in the direction it needs to go. Also in terms of product, one thing that worked pretty well for us is when we started thinking about it, we thought of a few different options. And many of the options actually were similar to things that other companies have done
Starting point is 00:05:15 and sold big to Google. But we actually focused on a product that we thought could be sustainable over the long term that we knew people would actually pay for. And that constraint actually ended up being far more interesting and important than a lot of the other constraints. We could build a lot of cool stuff,
Starting point is 00:05:30 but actually focusing on something that we knew people would pay decent money for actually is what drove us towards the product that we ended up building. Interesting. So, incorrect if my history is wrong, but I feel like Tilda and Ember were born around the same time. I know it was originally SproutCore, and you guys kind of moved away from there. Was Ember kind of like a core strategy of you guys from a business side, or is open source a core strategy that you just said it a strategy because I think people may get the impression
Starting point is 00:06:05 that we did Ember because we want to become Ember Inc. Right. And we want to sell these consulting packages, you know, or be like the MongoDB or be like a Meteor where the whole company, the company is the open source product and the open source product is the company in a lot of ways. But that's something that from the beginning we knew that we wanted to distance ourselves from because our belief is that the strongest open source projects are led not by one company but by a coalition of companies.
Starting point is 00:06:35 And I'm very happy with where we've ended today because we could go out of business tomorrow and Ember as a project would still continue to be very, very healthy. Most of the maintainers do not work at Tilda, which is really, really great. If anything, I think open source is just a huge part of who, especially Yehuda and I are, and that was one of the benefits of starting our own company because so many times we've been at these corporations where we would have to expend so much energy just fighting with management, trying to convince them that open source was a valuable thing. And now we have our own place and we can say, you know, we don't have to have that discussion.
Starting point is 00:07:14 Everyone coming in just assumes and knows that open source is a huge priority for us. I can especially see that on your side, Tom, as being at Apple with, you know, the secrecy thing. Of course, they do have open source things, but I think wasn't Sprout Core, was it open source? Sprout Core was open source, and it was definitely very unusual for Apple to be doing open source at the time. It was just a weird thing. It just didn't fit into the culture of Apple, and it was really, really painful because every time we wanted to submit a patch publicly, we had to hand prepare diffs
Starting point is 00:07:46 that would be sent to a lawyer and we had to annotate each section of the diff explaining what was going on and identifying if there was anything that could be patentable. Sorry, I got to check on that one. That's such a buzzkill. It's like a lawyer-based pull request. I definitely agree with Tom
Starting point is 00:08:02 that I think it's less about making Ember a big part of Tilda and more just I think I agree, me in particular, but I think Tom, the reason we're friends is that we share this. We care a lot about open source in general as people. And as Steve Jobs said, you should do the thing that you're passionate about. And I think people often underestimate that. They underestimate the fact that you're going to be doing a startup for years and years of your life. You actually need to be doing something that you can work nights and weekends, that you can get up at night when things are stressful and still push through.
Starting point is 00:08:36 And I think the fact that we both really care about open source, and everybody else at the company basically also cares about open source, that means that when times are tough, it's something that we can look at and say, this is all worth it. And I think if we had, you know, we could have built Skylight with less open source, and that would have been possibly a successful product, but I think it would have given us less motivation to keep going all the time. And I think people just, yeah, like I said, people forget the fact that being passionate about what you're doing is how you keep going. Awesome. And I mean, why do we start our own companies or bootstrap if you have that
Starting point is 00:09:11 privileges so that you can be the kind of company that you want to be? So it makes total sense that you guys are doing open source beforehand, just that's who you are. So let's talk about Ember. Maybe Tom, give us kind of the blimp view of what Ember is for those people not exposed to the product. And then maybe Yehuda, if you can give us a brief history of maybe how it started at SproutCore. I know it's been a long history, but if you could summarize it and bring us up to where we're at today. Sounds good. So I think at a very high level, Ember.js is a JavaScript framework for building apps.
Starting point is 00:09:43 It's not really for building individual islands of richness. It's not for building little widgets that you might put on your page. It's for building client-side apps whose architecture is more similar to a phone app or a desktop app than a traditional server-rendered web app. But I think what's really interesting about Ember is how much it's evolved. So when we started Ember in, I think it was back in 2011, it was a purely view-based component library, basically. So it had handlebars, templates, and you could plug those templates
Starting point is 00:10:20 into some kind of data source, which is usually a controller, and that was it. And I think if people know of Ember today, probably one of the things that they think about it, one of the most widely known features is our router, because the router that we have in Ember, which basically keeps your application in sync with the address bar in your browser, that's definitely an industry leader. I think we've got the best router on the market there. And that didn't even exist when we started the project, which is pretty incredible.
Starting point is 00:10:53 So this is kind of this iterative process that we've applied to Ember, where, again, we go and we talk with so many developers and we see where their pain points are. And Ember is all about just rolling common pain points for web developers into a single community solution that everyone can kind of use and agree on so we don't spend time everyone solving it a thousand different ways. So when we started, we were just this kind of component library, kind of similar to something like React today. But quickly we discovered, okay, well, people are having a lot of trouble, one, making apps that didn't feel broken, because JavaScript apps felt and continue to feel today sometimes extremely broken in terms of like their back button and reloading. So, and we're also having trouble trying to figure out, okay, what data is on the screen? What templates are on the screen right
Starting point is 00:11:39 now? Keeping everything in sync, and in other words, bootstrapping the application as it starts up. And the router was kind of a nutcrack for both of those. You know, we kind of cracked the nut of, oh, you can actually manage application state and have great URLs through this single abstraction. And so that was Ember 1.0, was the introduction of this new router. And over the past year, we've been iterating a lot on what are the other pain points. So the biggest one that we've identified in the last year is build tooling. So every project, every company we went into, some people are using Grunt, some people are using Gulp, some people are using Broccoli.
Starting point is 00:12:16 Everyone's got a thousand different hand-rolled buggy scripts to handle the same set of problems everywhere. And they're not shareable. So we'd go in and I had to learn their build system because it was different from the last place I was at. So Ember CLI has been the biggest component we've been working on this year. It's been very popular. So I like to think of Ember as having kind of evolved into this complete front-end stack where you can kind of take Ember off the shelf. You can boot up a new app in literally 30 seconds. Boom, you've kind of take Ember off the shelf, you can boot up a new app in literally,
Starting point is 00:12:45 you know, 30 seconds, boom, you've got a new Ember app. Everything you need is there, and you can start being productive right away. Cool. I kind of want to stop you there. I'm curious. I have a question for both you guys. You mentioned, Tom, that, you know, the router, and you got the broken back buttons, and you said there's a lot of JavaScript apps that are just still kind of broken today. and i think we all feel that pain from time to time um there are some vocal kind of opponents to the front end stack uh that ember angular are providing um most notably you know dhh is kind of and the base camp crew um have kind of gone the other direction and um vocal people like i know gary bernhardt oftentimes just says don't
Starting point is 00:13:26 ever use javascript because it always gary says don't use any software at all that's true that's true he's generally mad at all software and he tends to make me mad too just listening to him like you know what you're right man so you know you guys have obviously heavily invested into javascript um i wonder where your guys take us on that is it just because we're doing it wrong or is there some fundamentally still like technology needs that need to be there before we can have robust reliable javascript apps so i actually find it a little bit ironic that dhh is so against the front end but i also understand it um and i i kind of want to answer the earlier question that you have which is about the history because it sort of feeds into this so i basically started my career working on a project called
Starting point is 00:14:07 Merb, my open source career, which was a competitor to the Ruby on Rails framework. And essentially the idea behind Merb was, Rails basically got it right, but there are some problems that Rails has. Most notably at the time, the modularity and plugin system was pretty weak. It didn't really have a well-defined way of hooking into the framework. And you sort of just went out, the plugin system was pretty weak. It didn't really have a well-defined way of hooking into the framework. And you sort of just went out, the plugin system was like go SVN clone some stuff into your directory and hope everything
Starting point is 00:14:32 works and people weren't using Ruby gems. And the idea behind Merb was let's get a lot more serious about what the plugin API actually is, how plugins hook into the lifecycle, and let's try to keep the core a little bit smaller so that the things can be swapped out in a more predictable way. That was the idea behind Merb. And when I went to work on Rails,
Starting point is 00:14:50 that's sort of what we did. And I worked on that for probably 18 months, revamping the plugin system, rebuilding the controller system from the ground up to be built in a more modular way so that things could be, in a layered way, so things could be pulled out as needed. And I think that that strategy is very effective because on the one hand, the idea behind Rails is everyone's doing the same thing all the time. And because everyone's doing the same thing all the time, let's have a single solution that the community maintains as a group that everyone agrees is the right answer, right? And that, I think, is very powerful because the alternative is what we see in the JavaScript ecosystem today for the most part,
Starting point is 00:15:27 which is that everyone starts a new project and then they spend, like Tom said, literally weeks trying to figure out which set of tools is the right point
Starting point is 00:15:35 at the hype cycle to jump in and use it. So you have this mega hype fatigue. Every time anybody starts a new project, they have to spend weeks trying to figure out
Starting point is 00:15:44 what's the right thing. And I think Rails did a couple things really well. It said, we're going to have a shared solution, but also we're not going to be like Java and take forever to change. Every new version of Rails is going to take a look around and try to incorporate and bring in things that the community has decided are the right practices. But at the point of Rails 2, there was a bigger problem, which is that Rails had gotten too big as an ecosystem to have one opinion be the only opinion. And so there were some things that people were doing,
Starting point is 00:16:10 like RSpec and Haml, where people were able to sort of sneak in through the fact that Ruby is a very dynamic language and break in and say, okay, we're going to use Haml instead of ERB. But Rails 2 internally was really not designed for this. And so what was starting to happen was that new versions of Rails tended to break plugins.
Starting point is 00:16:30 In order to upgrade to Rails 2.3, whatever, you may have had to wait weeks to get Haml or RSpec to update. And this was a really big issue. And so I think what Rails 3 showed was that you could have all the benefits of having a single maintained stack, but you can build it internally in a nice modular way so that if people want to write a plugin that lets you swap out ERB for Hamel or test unit for RSpec or whatever they want, that you can have a reasonable assurance that things will tend to work. And on the flip side, you can have a reasonable
Starting point is 00:17:00 assurance that the core team is still focusing on bringing in newer features from the ecosystem. So a really good example of this would be the asset pipeline, right? I think the Rails core team discovered that just, you know, concatenating JavaScript wasn't the end of the story. We needed a bigger solution. And so Rails now has pretty much, I think Ember CLI does a good job with this, but a pretty close to best-in-class solution for building assets, to the point where a lot of people will use Rails just for the asset by point. And this is sort of a balance that you have to have. You want to build your stuff internally so you can plug in at appropriate points.
Starting point is 00:17:37 You want to have a thing that the entire ecosystem uses. And then you also want to make sure that you're able to iterate fast. And I think, unfortunately, when DHH took a look at Ember at first and the entire ecosystem, what he discovered correctly was that we were still extremely early days. We were still trying to figure out what it even meant to build a complete front-end stack. And the vast majority of the JavaScript ecosystem,
Starting point is 00:18:01 unlike the Rails ecosystem, which DHH is so used to, hates the idea of building shared solutions. Everybody wants to build their own thing. Everybody wants, people are so afraid of falling behind that they're willing to go and look at, they're willing to try every new thing that comes out just to make sure that they don't miss something important. So what ends up, what ended up happening is DHH went, he took a look at the situation. I believe he, his team tried to use Backbone. Backbone is so far away from the philosophy of Rails
Starting point is 00:18:28 that it's not at all surprising to me that he considered it a total failure. And then we, Ember at the time, was completely unready to deal with people who were trying to do it. We were pioneers, essentially. We were exploring the space. We were trying to figure out what it even meant
Starting point is 00:18:42 to build a front-end application. So today, Ember sort of gets attacked. So Ember is basically under attack from two sides. There's one side where people are saying, people are looking at Ember as if it was the equivalent of a thing like React or Backbone or Angular. And I mean Angular 1.0 here. Angular 2.0 is trying to push a different direction. But they look at Ember and they say, well, the JavaScript community doesn't have this idea of convention over configuration.
Starting point is 00:19:08 They don't have this idea of trying to build a community around things. I think if you're from Rails, it can feel very frustrating. And many people don't even really take a close look at Ember to see these days if it does, it feels like Rails. And I don't mean feels programmatically like Rails. I mean feels like that kind of ecosystem
Starting point is 00:19:27 where people are pushing forward. And then on the other side, so you have people from Rails saying, oh my God, it looks like the JavaScript ecosystem is crazy. And then on the other side, you have all the JavaScript people saying, oh my God, how could you build such a large, monolithic, vertically integrated stack?
Starting point is 00:19:41 This is clearly terrible. And so just the noise around Ember is a little bit different because of And so just the noise around Ember is a little bit different because of the ecosystem and the noise around Rails. Let's pause the show for a minute and give a shout-out to a sponsor. Hired.com is sponsoring the show this week, and the URL you need to go to is hired.com slash changelogpodcast. Again, hired.com slash changelog podcast.
Starting point is 00:20:08 And when you go there, they're going to give you a, they're going to double the signing bonus that they give you if you accept a job on hire.com from $2,000 to $4,000. Every week on Hired, thousands of tech companies in San Francisco, New York, Seattle, and LA bid on hiring awesome developers, providing the salary and equity up front. Some of their most in-demand jobs are web and mobile developers, DevOps, UI, UX, and even some product managers. The average developer gets about five to 15 offers with equity, with salary, all that up front. And even if you're not looking for a job, but you might know someone who is, you can refer them to Hired and get an awesome bonus as well if they accept the job. And the amount of that one is $1,337 total lead.
Starting point is 00:20:58 So go to Hired.com slash ChangeLawPodcast and get hired. So do you think that just the pioneering that has been going on and maybe perhaps the fragmentation in the ecosystem leads to less than reliable JavaScript apps at the end of the day? I think if you have the right abstractions, you can absolutely build great JavaScript apps. And this is, I think, where the server-rendered camp is a little bit wrong.
Starting point is 00:21:28 You can introduce a lot of complexity on top of people's existing stacks, and they're willing to accept it. But in order to get really, really, truly great performance out of a server-rendered app, like something written in Rails, you have to add a lot of complexity. And that's complexity that if you just build the app in Ember that you don't have to deal with just to get that kind of performance, right? Because you're moving the logic from the server to the user's browser. There's no cache in the world that is going to be faster than that.
Starting point is 00:22:01 Now, if you're a really seasoned Rails veteran, you've got the stack, you're super productive, it doesn't really surprise me that people are kind of going to calcify into that, right? Because they're super productive, especially as the JavaScript ecosystem matures. But there's going to be a day when the industry shifts, and a lot of the people who have calcified on server rendering, I think, are going to end up with products that are being smoked by the competition. Because to be honest with you, if you use a JavaScript app, a really well done JavaScript app, it does all the routing on the client side, it has really rich interactions that just aren't possible when you have to have the browser and the server coordinate. You use an app like that, it feels so great, it feels so fast. Going back to something that has to talk to a
Starting point is 00:22:43 server just feels antiquated. And again, there are things you can do, you know, Russian doll caching and so on, but they introduce a lot of complexity, especially for new learners who may not be familiar with the stack. Now here's an additional concept you have to learn. And a lot of people are on crappy Wi-Fi networks. They're on slow 3G networks. It doesn't matter how fast your app renders on the server if the pipe to get to them is slow. So maybe for our listeners, maybe either of you could give
Starting point is 00:23:11 a couple Ember apps that you think are really well-written JavaScript apps. Obviously there's Skylight, which is your guys' product, surely. Which is the best one by far. We like Skylight. If you want to see the reference implementation, skylight.io, by the way. I know Heroku built their
Starting point is 00:23:27 new dashboard on Ember, which is really nice. Are there any others just off the top of your head? There's a wide range, and kind of surprising. I think maybe a year or two ago, there was this meme that JavaScript is really great for toolbox apps or editor apps where you have to do
Starting point is 00:23:43 a lot of interactivity and you have to log in any you know, any kind of like editing or management or any kind of creative thing. But for content sites, content sites, obviously JavaScript is totally inappropriate. But there's two major content sites that I can think of off the top of my head, which is Vine, the Twitter's video sharing app. Their whole web experience is an Ember app. It's vine.co. And Bustle is the other one. Bustle is a pretty, very successful women's news website, bustle.com. And the entire front end is Ember. And you can really feel it.
Starting point is 00:24:16 As you click around, man, it responds so, so quickly. And you wonder, how the heck did they get it this fast? And it's because it's an Ember app. Yeah, and I think in terms of non-content sites, Discourse and Ghost are two open, people often ask about open source projects. Discourse and Ghost are two open source projects that are written in Ember
Starting point is 00:24:35 and I think do a reasonably good job. Discourse is really, really fanatical about performance, so maybe if you go look at it, you'll find some stuff that they do to really squeeze the last drop of performance out. Ghost is a little bit more idiomatic, but both of them are examples of real-world, fairly large and complicated Ember applications that work well. And those are both open source. So you can go take a peek under the hood and basically see how the sausage gets made.
Starting point is 00:24:56 And I think we're both pretty proud about how they turned out. They're not these incomprehensible messes. I just love the fact that when I go look at Ghost or Discourse or Travis, which is also an Ember app that's open source, and I go look around to try to get my head around what's going on, it's pretty easy for me, having rarely looked at this code base, to get a sense of what's going on,
Starting point is 00:25:18 where things are located and all that. Which is a thing I got used to being true about Rails, but is rarely the case in JavaScript applications. When you drop into most open source projects, it's like, oh my gosh, where do I even begin? You kind of have to survey the entire code base just to even start adding a feature. But because of Ember's strong conventions,
Starting point is 00:25:34 I can drop into something like Discourse or Ghost or Travis and I want to change this template. I know exactly where the template is because it's based on what the URL I'm looking at is. Cool, we'll link those up in the show notes for the listeners to go click through and check out. But let's look to the future now. So 10 days ago I'm looking here at a post on the EmberJS GitHub the road to Ember 2.0 RFC. Tom posted this.
Starting point is 00:25:59 I'm sure he didn't necessarily write the whole thing himself. It looks like this was a community effort. You know it just came to me in the shower when I wrote it down. But man, well thought out, first of all. I mean, I appreciate how much thought you guys are putting into the software, because that can only lead to good things. But
Starting point is 00:26:19 maybe just high-level summary. I think, if maybe I'll give you what I think it says, and you can refute or say I'm right. Major points that you made in this is that this is not going to be a big bang rewrite. You're trying to have stability without stagnation. This is a phrase you guys used. You had some big bets in 2014. You have some more big bets for the future.
Starting point is 00:26:45 A lot of this comes from learning from the community. You're going to be simplifying things, which is always nice, especially when you had a thing that's been evolving over time. And you have some big features that you talk about there at the end. Is that a top level pretty good or did I miss something? Yeah, I think probably the only major thing that people have talked about that is top level relevant is that a lot of the ideas that we got for Ember 2.0 that are starting to land already
Starting point is 00:27:11 actually came from the React project. React is a pretty great project. I think they've been doing cool stuff. They call themselves just the ViewLayer, but their ViewLayer has some really great ideas in it. A lot of the ways that we're thinking about simplifying going forward has been adopting some of the ideas from the React project. Cool. Now let's go back to the beginning, the big bang rewrite. I've done some Angular apps.
Starting point is 00:27:36 I've done one Ember app, which was about a year and a half ago before you guys were 1.0. This seemed like a shot right across the angular bow here after their announcements at NG Europe about their 2.0. Yeah, I think a lot of people felt like we were trying to capitalize on their misfortune because I think the stuff they announced actually wasn't new. All the details had been out in the public for at least six months.
Starting point is 00:28:04 But I think the way that they presented it maybe... Scared some people. Yeah, scared some people. They reacted pretty strongly to it. So I think a lot of people thought that we saw this news and, you know, started, you know. We went back to our dark, smoky room and we're like, how can we nail these guys? But the truth, unfortunately, is a little bit more boring. All of the plans, all the details, essentially,
Starting point is 00:28:30 that you see in that document were from the last two core team meetings. Now, the most recent core team meeting, very coincidentally, was scheduled months in advance for around the time when the Angular 2.0 announcement was made. So the timing certainly looks suspicious. I will grant people that. But I promise you that I have an email list showing that this is scheduled a month in advance.
Starting point is 00:28:53 And so the last two core team meetings, we like to do face-to-face meetings with the core team. We all fly into some city. Everyone pays out of pocket, so it's really awesome of them. And I thank all the core team members for really paying out of pocket to contribute to this open source project. How big is that team? It's like 11 people now.
Starting point is 00:29:10 Wow. That's a big meeting. Yeah, it's a big meeting. So we all fly into, last time I think we did New York, this time we did Chicago, and we all sit in a conference room for like eight hours over the weekend, eight hours per day over the weekend, and we try to really nail down the details of the roadmap of the framework. And everyone on the core team has a product that is built using Ember or has clients who have products built using Ember. And so the commitment to stability without stagnation was not just to try to get back at Angular.
Starting point is 00:29:47 I don't think anyone on the team is that petty. It was simply the fact that we have strong incentives not to break anything because we've all got apps that we make our livelihoods from. I think on the flip side of breaking things, I think all of us have applications that are competing with much bigger players. We're running startups, working with small companies, and we can't afford
Starting point is 00:30:07 to let the opinions of Ember from 2011 calcify and control what we're able to do in 2015. It's important for us to continue to look at what's going on and make sure that the cutting edge of what's possible on the web is also possible on Ember. These are basically the two pressures that seem very contradictory. And actually, kind of interestingly, a lot of the response to the Angular announcement was, well, you need to make progress,
Starting point is 00:30:38 so what other choice do you have? You have to break everything. And I sort of think about it the opposite, which is, if you're breaking everything all the time, then how do you ever get anything done, right? So you need to figure everything. And I sort of think about it the opposite, which is if you're breaking everything all the time, then how do you ever get anything done, right? So you need to figure out a way. It's basically like just, it's a little harder and it requires more thought,
Starting point is 00:30:54 but it's not like we're the first people in the world to ever figure out a way to improve the situation, to make things more cutting edge without stagnating. And in fact, the web is all about that, right? The last five years, everybody says moving at web speed, but what is the web all about? The web is all about not breaking the web while still adding the features, right? It's exactly this. I sort of found
Starting point is 00:31:14 it ironic that people were using the web speed as a explanation for why you have to break everything all the time when the web, as its prime directive has, you can't break anything ever. You know, it's just annoying. Like, trying to move things forward in a backwards-compatible way
Starting point is 00:31:28 requires a lot more time, and it's just annoying to do. As an engineer, it's just annoying. And so that's why I think it's so important to use open-source projects that are kind of aligned with your interests, because I promise you, if I was just working on Ember as my full-time job,
Starting point is 00:31:44 I would not bother with this. It's only because we have the product that we can't break that we go through the pain of maintaining backwards compatibility. What's your guys' plan as far as doing that, your methodology for maintaining the stability while you're still moving forward? I can talk about this. Not surprisingly, our plan is essentially derived from what the browsers do. The browsers sort of had exactly the same situation. Somewhere around the time that Chrome came out,
Starting point is 00:32:12 the browsers were really excited about moving forward, but they were stuck in these multi-year-long release cycles. I think Firefox 3, 3.6 was this huge release that took forever, and Chrome was frustrated by this, and they came up with this idea of the six-week release cycle. And the way that that works is that every six weeks, every time you add a new feature, you add it behind a feature flag, so it's encapsulated. And every six weeks, you decide what new features can make it onto the beta branch,
Starting point is 00:32:39 and every six weeks after that, you move things from the beta branch to the release channel. And the way that this works is it allows people to be very, very aggressive on the master branch. They can do whatever they want. They can add whatever features they want. They can not break on the web, but they can do things that are aggressive. But that doesn't necessarily directly affect the next release. That requires more thought about stability, more thought about deprecations, and things like that.
Starting point is 00:33:03 And so when we hit 1.0, I sort of saw that we had the same problem. And we adopted the six-week release cycle pretty much verbatim from Chrome and Firefox for Ember. And actually the Rust project also recently announced that they were going to do the same thing. So I think there's something to it. If you really care about balancing these two priorities of how to keep things stable and not break all the time, but also keep things moving,
Starting point is 00:33:29 the idea of there's just this rhythmic cycle and every six weeks your features either made it and if they didn't make it, they're just on the next, the Chrome team calls this the train model. So you either make the train or you're on the next train. The level of pressure is super low. People get their work done. I haven't had, it seems like if you ship every six weeks, the level of pressure would be insane.
Starting point is 00:33:46 But actually, Ember has been the least pressure that I've ever felt on an open source project for shipping in my entire career. And that's because it's just, you know that you can make the next one. Yeah, you fall behind on a feature and instead of saying, well, we're going to push back the release
Starting point is 00:33:59 and everyone has to wait weeks and weeks and weeks to get access, get the benefit for all the stuff that's already done. Well, I don't get this feature done today benefit for all the stuff that's already done. Well, you know, I don't get this feature done today, but it'll be out within six weeks. And you're thinking a lot more about individual features than you are about big releases, which I think is pretty awesome.
Starting point is 00:34:16 I want to talk a bit about the big bets, because sometimes when you say bets, it's sort of like you're not really sure. And I guess to a degree, maybe you weren't very sure. So you placed some pretty decent bets in 2014 that worked out well. And then some of those bets are kind of playing into what you're going to do with 2.0. Can you talk a bit about the work you did on the CLI and eventually how ES6 models will become first-class citizens in that respect?
Starting point is 00:34:40 So I've been working on ES6 modules for a couple of years. I'm on TC39, and I joined the champion team you should explain what TC39 is TC39 stands for Technical Committee 39 which sounds like something out of the Central Bureaucracy in Futurama that's like saying El Nino in Spanish for the Nino it's just the 39th technical committee that exists That's like saying El Nino is Spanish for the Nino. Yes, exactly.
Starting point is 00:35:10 It's just the 39th technical committee that exists in ECMA, which stands for European Computer Manufacturing Association or something like that. Anyway, so that committee is responsible for making JavaScript, and I joined the group of people working on the module spec pretty early. Not early in the module spec lifetime, but I think early in people's consciousness about ES6 modules existing. And one of the first things that I really wanted was, I said, well, modules are a somewhat involved thing. At the time, modules didn't support single export or default export and a bunch of other stuff. And I said,
Starting point is 00:35:39 I think it's really important that we actually start getting some real-world usage of modules so that what we feed back into the ES6 process has reality. So I wrote a really bad transpiler for ES6 modules to AMD. And very early on, both because I was a big believer in modules being a thing and because I really wanted to make sure that the thing that we shipped out of JavaScript was good, I moved a lot of the Ember community over to using ES6 modules. And that was definitely a big bet because I think the whole,
Starting point is 00:36:09 even today, the module ecosystem is heavily fragmented. And there was a, at the time, there was this meme that, well, like TC39 made it, so clearly it's going to fail. Everyone should just use CommonJS modules. And so I really just wanted to make sure that the thing that actually shipped was good, was a good quality thing. So we did that. Some of the very earliest adopters of ES6 modules
Starting point is 00:36:32 in the Ember community really drove what ended up being the ES6 spec, which I think is quite good now. Basically, it has many of the features that people come to expect from Node modules. And I think along that process, so basically before ES6 modules were a thing, it was pretty easy to just copy and paste some code,
Starting point is 00:36:51 put it into a file, and sort of develop the same way that most people developed and maybe concatenate at the end as a final build step. But basically as we added ES6 modules, it became clear that everybody who used ES6 modules was going to need a build chain. And so Stefan Penner started to work on this thing called Ember AppKit.
Starting point is 00:37:09 Ember AppKit was literally just a grunt script and a bunch of scaffolding and you would clone this grunt repo. It sounds kind of lame in retrospect, but first of all, having one tool that everyone uses is great. But second of all, having a thing that you're iterating on,
Starting point is 00:37:27 even if it's not the best thing in the world, gives you a sense of what actually is the requirement. So we spent, I don't know, like six months or a year iterating on Ember AppKit just to get a sense of what is actually the requirements. And then more recently, this year, we moved all that learning into a more abstracted thing that you could download, install, update,
Starting point is 00:37:46 unlike Ember AppKit. And that became Ember CLI. And I think just having a central place where people could say, here is my build process. It involves ES6 modules and concatenation and maybe hashes for cache busting. And you start with that set of things. And then before long, you have the add-on ecosystem,
Starting point is 00:38:05 you have additional tools, you have proxies pointing at your server, you have all these additional workflow tools. Basically you have a central thing which is how you build an Ember app. And that ended up being, it started with a little tiny kernel of let's get into a modules world
Starting point is 00:38:21 instead of a globals world. And it has expanded more and more into the way that people think about building Ember applications. And it's really fast, I think. It's really fast and is such a huge productivity booster. Stuff that people would spend literally weeks setting up and tailoring for their app,
Starting point is 00:38:37 now you get it in seconds. And in fact, I haven't asked for anyone listening who may have tried Ember before, let's say a year or two ago, and maybe it wasn't to your taste, try it again with Ember CLI. Because for me, this has just totally changed how I develop web applications.
Starting point is 00:38:53 I'm extremely excited about it. Yeah, and by the way, Tom says literally weeks, and it sounds like an exaggeration. Yeah, not an exaggeration. Yeah, we've worked with clients where we're there for three months, and there's two weeks weeks later people are still discussing should we use Grunt or Gulp or whatever.
Starting point is 00:39:10 And there's these huge meetings with all the quote-unquote stakeholders. It's like, oh my god, this is totally a solved problem. Why are we discussing this over and over again? I think especially Rails developers will appreciate Ember CLI because I've talked to several Rails developers, self-identifying Rails developers, who told me, I thought that I just hated JavaScript. But then I tried to use Ember CLI and I realized
Starting point is 00:39:33 that a lot of the stuff that I love about Rails isn't inherent to Ruby, that I can have that same or similar experience in JavaScript too. I think this is actually a lesson that Go made stark and I work on Rust also, and Rust sort of copied, which is that people don't necessarily think that carefully about workflow tools, but having amazing workflow tools sort of's like peeking under the skirt. It's like, oh, now I have to think about all this stuff, as opposed to, okay, I want to generate some docs here. I have a tool command, I generate some docs. And just having that work is pretty nice. I was going to say, a friend of the show, Justin Searles, who I think we had on a few episodes back,
Starting point is 00:40:18 doing Lineman JS, I saw him in your guys' RFC comments, pretty excited about Ember CLI and what you guys are up to with that. So I think that's a big win. Here's a guy who cares a lot about build tools and command lines and that kind of thing. Yeah, no, Lineman is awesome. And I think of Ember CLI as basically an evolution of like,
Starting point is 00:40:37 okay, Lineman is awesome. It embraces a lot of these ideas. What can we do if we bake in even more integration with the framework? I mean, to be honest... Like bridging build tools in the front mean, to be honest, one of the things that really, really hurt the early Ember build tools efforts, and I think hurts a lot of other efforts as well, is that the way most people start by building build tools rebuilds everything all the time, or may end up rebuilding a lot every time you make any changes.
Starting point is 00:41:03 And I think Gulp tries to deal with this and it's largely successful with some problems. But Grunt doesn't solve it at all. And a lot of people will build tool chains on top of Grunt and they'll demo it, they'll go to meetups, they'll build small projects with it and then you start getting people trying to build bigger things on top of it and you're just embedded inside of a big company and all of a sudden everything is super slow
Starting point is 00:41:27 and there's not really a lot of feedback to say, okay, well maybe Grunt was not the best idea. So we actually used Grunt with the original Ember AppKit effort and it just became obvious very quickly that we needed something that would allow you to do incremental rebuilds, which is, it sounds obvious, but for some reason in JavaScript the idea that you have an incremental rebuild, that when you make a change to one thing, it should only cause a compilation of the things that changed, is still not conventional wisdom, I would say. And that was, I would say getting to that point goes from being something that demos
Starting point is 00:41:58 well and people like to play with and go to meetups and show, and goes to something that can be a real productivity booster, is actually solving that seemingly boring technical problem. Let's pause the show for a minute, give a shout out to a sponsor, DigitalOcean. Simple cloud hosting built for developers. In 55 seconds, you'll have a cloud server with full root access and it just doesn't get any easier than that.
Starting point is 00:42:23 Pricing plan started only five bucks a month for half a gig of RAM, 20 gigs of SSD drive space, one CPU, and one terabyte of transfer. That's a lot for $5 a month. DigitalOcean also has data centers all across the world. New York, San Francisco, Amsterdam, Singapore, and their newest region, London. You can easily migrate your data between those regions, making your data always closest to your users.
Starting point is 00:42:51 Use the promo code changelognovember in lowercase. It's important that you use lowercase. changelognovember to get a $10 hosting credit when you sign up. Head to digitalocean.com right now to get started. And back to the show. It seems like you guys have learned a lot from the community over the last couple years. Huda, you
Starting point is 00:43:12 touched on it with React. You also said in the post that you saw from Angular that easy onboarding is a big win for getting people on board. It sounds like the CLI is going to help out in that effort. Tom, maybe speak to the virtual DOM, what you've learned from React, and how you guys are going to get that stuff into Ember here soon.
Starting point is 00:43:29 Sure. So I think a lot of the people, this kind of gets back to the discussion we were having a little bit earlier about why do people still prefer to write server-rendered apps. And one thing that I didn't mention is that the programming model is just so easy. If you think about how people build server-rendered apps, request comes in, you get your model data out of the database, you hand it over to your view layer to render, and you return that output, and that's it. And every time
Starting point is 00:43:54 you handle a new request, because HTTP is stateless, you start from scratch. Conversely, things like Ember and Angular have these two-way data bindings, right? And it's really easy to end up in especially a larger sophisticated application, which is stateful. So as the user's looking at it, it's not like the state is getting reset. You're constantly having to keep everything in sync yourself, and you're making these changes to these objects, and it's really easy, unless you're diligent about it, to end up with an application where you can't yourself reason about how data flows through it.
Starting point is 00:44:31 But in order to make two-way bindings work, of course, you kind of have to do that. So to me, the brilliance in React is bringing back a programming model that is as simple as server rendered apps. So, for example, you just set your model. Let's say you have a WebSocket, and it gets new versions of a model streamed in every 30 seconds.
Starting point is 00:44:56 Well, all you have to do is take that model and say, okay, replace the old model with the new one. And because React does this diffing strategy, you basically re-render the entire app as though it was server rendered. It's not just set the model to a new model. It's basically, I want to replace this little bit of state and also re-render everything.
Starting point is 00:45:16 I don't want to have to figure out how to tunnel through this specific change. Just re-render the universe. So here's this change. Which sounds like it would be slow. I was going to say, doesn't that sound slow to re-render everything for a small change? So that's the brilliance of React, I think,
Starting point is 00:45:28 is that they've figured out that JavaScript engines are so fast that you can quickly implement these diffing algorithms that go through and quickly find the changes and reflect those from the virtual DOM into the real DOM very, very cheaply. So that, to me, is the core of React. I think a lot of people like to reason about why it's becoming very popular, but to me, that's the nut of it.
Starting point is 00:45:50 It's that it makes front-end programming feel as simple as it was when you were writing your Rails app. And I think, just to be clear, I think there are definitely edge cases with that where you're re-rendering too many things, and there's also problems with how do you know when you get a model from the server what exactly you poke at to get it're re-rendering too many things and there's also problems with how do you know
Starting point is 00:46:05 when you get a model from the server what exactly you poke at to get it to re-render. But I think the reason why people like React is that so many cases when you're building web applications are sort of these intra-component or inter-component cases where you have a little cluster of components
Starting point is 00:46:21 and all the communication and all the state changes happen inside of this little cluster of components and you the communication and all the state changes happen inside of this little cluster of components. And you can get so far in React just by saying, okay, I have this little widget, the widget changes some state and re-render the little cluster of components that I'm inside of and don't have to worry about how to
Starting point is 00:46:38 figure out how to tunnel some events through data binding. Honestly, both Ember and Angular fell into a trap of, even though both Ember and Angular fell into a trap of, even though both Ember and Angular have the notion of both events and data bindings, I think data bindings feel so cool for cases where they're really appropriate
Starting point is 00:46:55 that people start tunneling events through data bindings. And that, I think, honestly, when I look at the real critiques that a lot of React people have about Ember and try to understand, okay, while you were an Ember developer, you were reasonably productive, but you find yourself way more productive in React. What is happening? One of the things that I see over and over again, and this is something that really played into the Ember 2.0 plan,
Starting point is 00:47:18 is that people are abusing, and I say abusing, that sort of blames the victim here. People are using a tool that we're telling them is good, which is two-way data bindings, to express something that's fundamentally an event. And I think a big part of Ember 2.0 is to refocus energy away from two-way data bindings as the primary method of communication and move towards events as the first way
Starting point is 00:47:42 that you think about it. And you're starting to use data bindings one or two way when they become appropriate for cases where they're appropriate and have them be sort of things that you start opting into as the situation makes them appropriate. I think that's definitely a mistake that we made. We added almost too much sugar around two-way data bindings. And that kind of led people down this path of using them as an event bus.
Starting point is 00:48:04 As kind of this really hacked together event bus. And I think that was a lesson that maybe we actually over-learned from Angular. Because I remember watching presentations where people would show Angular, be like, oh, look at how easy it is to set up this two-way binding. And I think I got a little jealous
Starting point is 00:48:17 at how easy it was because that easy on-ramp was so important. And at the time, two-way bindings were, you kind of had to have them. It was like, you know, you had to have them even to participate in the competition.
Starting point is 00:48:28 But I think one thing that we should keep in mind is that, this is a sad thing about the JavaScript community, is that everyone's always looking for the one true solution.
Starting point is 00:48:37 So first it was two-way data bindings and now it's one-way data flow, events up, actions down, and it could be trans, what is it?
Starting point is 00:48:47 It's the thing that came from the Clojure guys. Oh, transducers. Transducers, right. It could be channels. Everyone's always looking for the one true solution that solves every problem. That's what makes it tough about the JavaScript community. There's always the right way of building apps today.
Starting point is 00:49:01 And if you're not that way, it's like, get out of the way. But I think what's way more exciting, and something that is way more fun as a programmer, and this is something that I really love about the Rust community, actually, is trying to find contextually appropriate solutions. So yes, channels are great in some cases. Maybe transducers are great in some
Starting point is 00:49:17 cases. Two-way data bindings, totally great when you're building a form, and you're just trying, you just want to make sure that when you type something, it actually updates the object, right? You don't want to have to have a callback. just want to make sure that when you type something it actually updates the object. You don't want to have to have a callback. But trying to say like, okay, well I had situations where 2A data bindings were broken,
Starting point is 00:49:32 switch all the way to events. I had a problem where events were broken, switch all the way to 2A data bindings. That's basically what we constantly see in the JavaScript community and it's, to me, by far the most frustrating thing. Yeah, but I think this is actually, in my opinion,
Starting point is 00:49:44 the secret to Ember's longevity is that Yehuda and I spend an inordinate amount of time talking about other frameworks and really analyzing them. People really like this aspect. People really hate this aspect. Well, why? Let's try to really truly understand. And we always incorporate that and fold that back into Ember.
Starting point is 00:50:03 And I think that's why it always feels like, I think communities naturally can kind of butt heads sometimes. And I think that's why it was first, it was Ember versus Backbone. Who's going to win Ember versus Backbone? Then it was like Ember versus Angular. Who's going to win Ember versus Angular? And now a lot of people are like,
Starting point is 00:50:19 oh, Ember versus React, who's going to win? But the truth is we're shameless about stealing great ideas. We stole some great ideas from Backbone, stole some great ideas from Angular, and now for Ember 2, we're stealing a ton of great ideas from React. And so in my mind, the strength of Ember and the reason why it has this longevity is because we don't have a problem saying, you know what, the way that we were doing before was bad. Let's do it this new way, and let's make sure that everyone who's building an app today can get there, that they have a path for transitioning. But I think also, to be clear,
Starting point is 00:50:50 we don't whip around and say, oh, everything we were doing is totally broken. I think there are totally legitimate use cases for two-way data bindings and totally legitimate use cases for all these things. So it's more about finding what basically people got kick puppy syndrome
Starting point is 00:51:07 around two-way data bindings for good reason. And the answer is not, I think often people throw the baby out with the bathwater and every six months there's a new baby that's being thrown out with new bathwater. A lot of babies. Well, it just seems like you're learning from the community well here. I mean, you say it well in the spot where you say learning from the community,
Starting point is 00:51:26 where you say we're well aware that we don't have anopoly on good ideas, that you'll incorporate things as they come along. So it just kind of makes sense that that's the direction you head. Yep. Well, let me say this. So, you know, obviously at the changelog, like, we've been watching. We kind of just keep our thumb on the pulse. It's what we do.
Starting point is 00:51:41 So I've been watching your Ember grow, and I've been a part of the Angular community and the Backbone community and the Ember community kind of on the fringes. I remember the old, I think even you were on, maybe it was JavaScript Jabber back in the day with Jeremy Ashkenes talking about one-way versus two-way. And for me, the most surprising thing
Starting point is 00:51:58 about your announcement here, and I think the most impressive, actually, is what you say here. After a few years of having written Ember apps, we have observed that most of the data bindings in the template engine do not actually require two-way data bindings. And just the ability to say, you know what, it's not like it was a terrible idea, but at the end of the day,
Starting point is 00:52:19 we're willing to grow and we're willing to say, you know what, right now this is actually a better best practice. We're not going to hold on to that old idea because it was ours. Jeremy pulled that snippet and tweeted literally LOL on Twitter. Well, it had to feel probably not too bad for him. I think what's kind of, the mistake that we made is actually a little bit subtle. And the mistake that we made was that at the time we said, well, there's one-way data bindings and two-way data bindings
Starting point is 00:52:45 and if you use a two-way data binding without setting then it's just a one-way data binding so we thought we could simplify the model by just saying they're all two-way and if you don't want to mutate something then don't and the mistake that we made there was that we didn't realize the importance of seeing from the point where you're actually writing out a component whether or not it's going to be mutated. So basically from our perspective we said,
Starting point is 00:53:10 a one-way data binding is just a two-way data binding that isn't being set, that isn't being mutated. But that just wasn't a good programming model. People would do something that they thought was an immutable data binding, they would try to give some value to somebody, expect it not to get set, and then some other programmer somewhere else or some other third-party library all of a sudden would start mutating something, and people would just get confused
Starting point is 00:53:34 about what was going on. So I think saying it's not enough to say it's just a two-way data binding that you didn't set, let's explicitly say that you should opt into cases where you want it to be immutable I think ends up being good. And I think that's actually a lesson that we learned from Rust in some ways.
Starting point is 00:53:50 Yeah, well, we stole the syntax from Rust, but basically Rust... A lot of stealing happened. Sounds like we need to get you back on and talk about Rust, Yehuda. Yeah. I know we were talking to Steve Klabnik, who's a changelogger, to have him come on and talk about Rust, so maybe we'll have both of you on sometime.
Starting point is 00:54:05 I think we're one of the first production users of Rust, actually. Yeah, I think OpenDNS is maybe the ape in earlier. Okay, we're number two. Happy to be number two. We're used to it. One last question, just on the roadmap. Back when I was using Ember, my biggest problem with it was just how immature Ember data was. It sounds like it's still not hit a 1.0.
Starting point is 00:54:31 Is that true? And what's the plans with Ember data? So we have not hit a 1.0 yet, but we are very close. We kind of had to do a big rethink on Ember data. I think one thing that you'll see from our history is that we have a very strong commitment to semantic versioning. And I think at this point you can trust us that when we declare 1.0, we mean it,
Starting point is 00:54:54 that we're not going to introduce breaking changes. Unfortunately, that does mean that we pack as many breaking changes as possible into the free 1.0. How many can we squeeze into this one? Yeah, well, we're just not going to... Math.random. Yeah, we're just not going to ship something that we're not proud of.
Starting point is 00:55:08 And if we don't feel confident that we can maintain it for the next two, three, four, five years, ten years, we're just not going to ship it. And so finally with Ember Data, I can confidently say that we've reached that point. There's just a few little things that we need to button up
Starting point is 00:55:22 before we declare our 1.0. But probably the biggest thing was trying to solve this issue of relationships. It turned out, I don't think we really fully appreciated this when we signed up for Ember Data, because on the surface, it looks just like an ORM, which looks like ActiveRecord or any of these things. But it turns out to be an order of magnitude harder problem. ORMs are pretty well understood, because as it turns out, ORMs have a synchronous access to the database. You block the request while you access the database and your ORM works.
Starting point is 00:55:52 But with Ember Data, what I don't think we fully appreciated was that we were basically getting ourselves into a distributed computing problem where you have the source of truth on some server somewhere, on some server, on some database. And at any given time, you only have a small subset of that truth. And it streams in over time and it can change. And you simply cannot get access to any information that you don't already have synchronously. Just impossible. So we had to build a very robust system for dealing with this ambiguity and the fact that we could never have the full set of truth at once, guaranteed. And to be honest, the reason why Ember Data was so unstable was that we
Starting point is 00:56:32 tried a bunch of different approaches and essentially every approach had its ups and downs and we sort of moved towards an approach that works, but it was not I think people expect a much simpler kind of problem than it is. And I think if you look at the ecosystem, there are libraries for, like Backbone has some very, very simple,
Starting point is 00:56:57 I guess the charitable worth use, data syncing built into it. There are some libraries for Angular, there's like REST Angular, and there's like a built-in resource, dollar resource. But the thing that none of them tackle that was by far the biggest challenge is this notion of relationships. So, you know, let's say I'm writing some blog software and I have a post, and a post can have many comments. That seems like the
Starting point is 00:57:19 simplest thing in the world if you're a Rails programmer or a Django programmer. But actually modeling that, building software that was flexible enough to handle that case was so difficult. So I just want to be clear, obviously a lot of things have the notion of relationships in them. I think what Tom is meaning here is that a lot of applications start off and they essentially download all the data that they're ever going to see up front. And you can easily write code
Starting point is 00:57:45 that assumes that if you have post has many comments and you're starting out, that the comments were just downloaded together with the posts. But then over time, you're like, well, I have a huge blog. I don't want to download every single comment.
Starting point is 00:57:57 So you break it apart. So now your comments are asynchronous. And then later on, you discover, and in Ember, this is not even avoidable, you want to allow people to go directly to a particular post. So basically the order that you may download the data is totally random.
Starting point is 00:58:12 People think, oh, well, I just won't deal with that. But not being able to link directly to something in a JavaScript application is basically just a non-starter. So very rapidly, without even trying very hard, you get into a situation where you have objects with relationships where the order that they come in is both asynchronous and not exactly determined, but where you want them to be linked together and you want to be able to make changes to either side and have them reflected on the other side. And basically the problem that I just
Starting point is 00:58:40 described is the problem that we've been working on solving in Ember Data for the past 18 months. Before we tell off the call and go into our super awesome question, which is, who is your programming hero to each of you? Maybe it might be best to close off by kind of summarizing what version 2.0 marks for Ember. I know you summarize it pretty well here in your RFC, so I'm just sort of using that as a bullet plate. Either of you can take that. But we've got the Jerrods out there who've used the 1.0 and then have used it all along, but what's 2.0 and what's the onward direction? So I'll give an inarticulate answer and maybe Tom can correct me if I get anything wrong. But I think what 2.0
Starting point is 00:59:19 is, is us taking a lot of efforts that have been going on in the community to build a complete front-end stack and making them part of Ember itself. So we have Ember CLI, we have hopefully Ember Data and other pieces of the ecosystem, and the Ember Inspector, and basically saying these are all part of the first-class experience of Ember that every new Ember developer should use. Yeah, and I think kind of that goes along with that is that we really want to make
Starting point is 00:59:47 Ember as accessible as possible to the widest range of people as possible. And that means dropping the learning curve. So Ember 2.0 is really about thinking, okay, well, we have two concepts here, but I think there's one that can fit both scenarios. So let's get rid of
Starting point is 01:00:03 that extra concept. Basically really distilling it down to the essence of the framework as we've kind of, as it's become more apparent over the past two years. Well, we always get some great answers when we ask these questions, but feel free to share a couple or just one. It's really up to you, but Tom, we'll start with with you you can't pick each other though that's cheating is that true? actually if I can get sentimental for a moment I have to say that Yehuda is definitely my programming hero
Starting point is 01:00:33 which is why it's such a privilege to get to work with him each day and I know that sounds like really biased because we started this company together but I have learned so much from him because I think he does a really awesome job distilling so many different people. Like, he's constantly quoting maths to me.
Starting point is 01:00:51 He's constantly quoting DHH to me. Gang of Four, you know, all of these historical things. I have no idea how he keeps them all in his head. So, well, yes, I may be slightly better looking than Yehuda. Absolutely. Only slightly? That's gracious. At the end of the day,
Starting point is 01:01:06 I have learned so much and for me it's a privilege to come into work every day and get to work with him. I feel like you need another person. No, I think it's true. It's you, bro. All right.
Starting point is 01:01:18 Now I feel... No, it's true. Now you tell Tom how awesome he is. That is a first, though, to have the hero on the show with the person who says it so sounds legit though it sounded sincere yeah it did
Starting point is 01:01:29 I appreciate that Tom alright who's your hero so my programming hero is actually Matz and I say this for a couple reasons so first of all I think Matz is extremely underrated and I think part of that is the fact that Matz is Japanese and doesn't and speaks English with difficulty Extremely underrated. And I think part of that is the fact that Mats is Japanese
Starting point is 01:01:45 and speaks English with difficulty, and he gets a lot of shit thrown in his direction. And I think he... I could just imagine that it must get to him. But he's not out on Twitter battling the fight, so people are just constantly talking about him as basically incompetent, a moron, idiot, worst language designer ever, worst implementer ever,
Starting point is 01:02:06 and I feel like people should give him a little more credit for building a language that is as successful as it is. But I think beyond that, I look at Ruby 1.9 and I look at Python 3, and people really, really do not give maths enough credit for thinking through the requirements of making such a big breaking change in a way that would get adoption. And this is a topic for a whole different discussion. But I think Matt's really does a really good job of thinking about how people use his software, having some level of empathy for it, and thinking about what you have to do to actually get people to move along. I'm not going to say Mats has never made any mistakes in his life. Obviously, everybody building something as big and complicated as Ruby
Starting point is 01:02:53 makes mistakes, and certainly Mats is not the best VM author in the universe. But I think Mats has done a really great job of thinking about why people use software. My favorite thing he ever wrote or presented is 2003 Ascon Talk, which I can get you a link to, where he basically talks about how, just like human language controls how we think, how human language makes us think
Starting point is 01:03:19 in a particular way, how programming language can do that. He talks about how he designed Ruby to help people think clearly when they're programming. And I just think people don't give Matt a lot of credit for being a really good language designer. When it comes to Ruby, I can say Jared and I were just at Keep Ruby Weird in Austin, and it might have been a little bit of bias because it was a Ruby conference, but we have this video coming out sometime soon called Beyond Code
Starting point is 01:03:47 where we pretty much interviewed as many attendees as we possibly could on camera. So for once, we're breaking into the video side of, I guess, media creation. But a resounding change, Jared, the question was, which software has changed your life the most? I'm summarizing that to a T, but everyone saidy and all the things that was beautiful about the language so it's it's funny to hear you say how bad mass gets his criticism because he's japanese speaks slightly broken english and doesn't really translate that well but wrote a language that that helps programmers think in english so much better than they've ever done before.
Starting point is 01:04:26 I think people just assume that a lot of people's success is accidental, and people, I think, say, well, maybe math is in the right place at the right time. But honestly, reading that 2003 OSCON presentation makes it clear to me that he was thinking very deeply and very carefully about what he was trying to do.
Starting point is 01:04:42 We'll definitely get that link in the show notes. If you can dig that up and email it to us or text it to us or whatever, let us know, but we'll put that in the notes for sure. Well, Tom, Yehuda, you guys are great. Man, I just sit back in awe. Tom, you mentioned Yehuda is one of your heroes. I don't often say my hero on here, but you're definitely one of them, Yehuda,
Starting point is 01:05:01 because just the way you articulately explain what you do, why do it why the software should be a certain way and tom to what you mentioned on how he kind of um this isn't a you hooda party but but just the fact that like you you do you you quote the the greats you know so you you know take it like philosophers you keep those notes in your head you know to to make good software and you do it well. If I might say, the thing that's really astounding to me about Yehuda is how much he's willing to play the long game. So there are all of these open source projects coming to fruition right now. You know, with Broccoli, Ember CLI, Ember Data, ES6 modules, JavaScript Promises, Ember itself. All of these things, you know, being there, I've seen him working on this stuff for four or five years.
Starting point is 01:05:47 Like, to me, Yehuda has such a crystallized vision in his head of what web development should be like. And he also has the unrelenting energy and patience to work with people who are pretty obstinate to make that vision come true. And to me, that's just like a really astounding thing. That's a quality that not a lot of people have. Yeah, I hope in general that if people feel moved by it, that they think about playing the long game a little bit more. I think programming could use a little bit more of it. Well, you said the web speed earlier, like as if we should just constantly break stuff, which is good to a degree if you're trying to, you know, push a product.
Starting point is 01:06:21 But, you know, we shouldn't be so whimsical about how we ship. It should be with purpose and plan. But at the same time, to use your FC as a good example of listening to the community and adopting what works best and admitting when we're wrong and making changes as needed for the better of the community. I think you can gain a lot more momentum. Gaining momentum takes time. And if you do it slowly and carefully, you gain a lot more momentum like gaining momentum takes time yeah and and if you do it slowly and carefully you gain a huge amount of momentum where you can definitely you can sprint out ahead really quick and then lose momentum if every six months you're asking people to do a
Starting point is 01:06:57 whole new thing well the jared's mentioned earlier we'll have to get you back on to talk about rust steve's definitely that would be awesome calls well we've been wanting to have a conversation for a while but uh before we close off i want to give a quick shout out to three different sponsors that make this show awesome and possible aside from the guests of course um pager duty uh hired.com and digital ocean we're obviously hosted on digital ocean love those guys page duty um keeps me from having to get up deep at night. The call goes to the right person and hired. You guys are just awesome as well. Great show today, guys.
Starting point is 01:07:32 Next week, the next show we have planned is with Dave Cannata on Buckets.io. Hopefully it does actually be the next one in case we actually have a show in between now and then. Let's say goodbye, y'all. Thanks for having us. be the next one in case we actually have a show in between now and then, but, um, let's say goodbye y'all. Bye.
Starting point is 01:07:46 Thanks for having us.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.