I’m really excited to announce the availability of BugHub for Mac on the Mac App Store. http://bughubapp.com/ Go get it, then tell your friends!
About four years ago I got involved with perhaps one of the most exciting technologies to hit the web… ever: Cappuccino is a desktop web framework for creating amazing desktop like experiences in the browser. Cappuccino, created entirely by volunteers and backed by a three person startup rivaled great technologies like GWT and Sproutcore, both of which were/are backed by large companies (Google and Apple, respectively) For the first time, we were pushing the boundaries of what the web could do. Every single demo always ended with people saying “wow” or “that’s amazing”.
As you might imagine, Cappuccino is a pretty ambitious project and after about 5 years we’ve made some incredible strides; bringing the power of Cocoa to web developers. So why isn’t everyone using Cappuccino? A few years ago a trend began towards “micro JS”. The idea being, we should be using tiny little libraries for everything and hope they work together; even jQuery is too big to be considered “micro”. This trend really favors front end web developers, who tend to not have a software engineering background. There is very little overhead in learning a “micro” library that only has two methods… contrast that to the thousands of methods and dozens of classes in all of Cappuccino.
Shortly after this trend began, Cappuccino’s biggest competitor, SproutCore, jumped ship and started working on project Amber, a competitor to backbone.js. Through a series of unexciting events project Amber exists today as Ember.js.
Ember is very close to the “micro” side of things, but at a “whopping” 49KB (
less than a second download on a dial-up internet connection)it’s still far too big for many. Yet we conveniently forget that loading just a few images will quickly surpass that 49K of code. The hilarious obsession with file size is the start of my frustrations with the web community. The community has tossed out everything we’ve learned from the last 30 years of building applications in favor of being able to put something together quickly with complete disregard for maintainability or extendability. Now, people compare Backbone to Cappuccino, or Ember to Rails. Cappuccino, Backbone, and Rails all serve completely different purposes, and saying you don’t need one because you have another is just asinine. Nevertheless, next week we’ll see another blog post somewhere talking about why client side MVC is terrible (or great).
Even though Ember is a small library (compared to Cappuccino, GWT, and Spourtcore) people still complain about the learning curve. One particular comment caught my attention:
If it’s going to take me at least a day or two before I begin to understand, how long is it going to take the rest of my team?
This reaction to Ember just baffles me. Your day job is to build a piece of web software and you can’t take a few days to learn the ins and outs? Presumably you’re in a large team because this project is important and will take some time to complete. Nevertheless, I’ve seen this reaction many times in the web culture. This mentality is pretty rare in the world of native development though. Almost every decent developer I know has no problem spending a weekend learning some new and cool tool, but sadly, this spirit seems to be absent from the web culture.
As if throwing out battle hardened application design paradigms weren’t enough, these new web technologies now need to re-solve problems Cappuccino solved 4 years ago. Modules: after 3 years of bickering back and forth we still aren’t any happier about module loading on the web; Cappuccino made this a language feature from the very beginning. What about widgets? Did you see the neat little alert/button/widget set on Hacker News the other day? Don’t worry, you’ll see another tomorrow, if you missed it. jQuery UI existed long before Cappuccino, and it gave you some nice little controls to add to your website. Then Cappuccino comes along and provides the best UI layer the web had ever seen, it blew everyone away… because we didn’t cut corners. We spend time implementing each widget ourselves, leaving us with complete control over each component, and we paid careful attention to the algorithmic performance of everything. A perfect example of this is the TableView component in Cappuccino. Even with thousands of rows the tableview still scrolls just a smoothly as a desktop app, but yet today the modern libraries are still shipping subpar experiences; giving in to the idea that the web can never bring the same experience a native app does. The other day I made a bare bones list view (because someone told me it couldn’t be done) in less than 200 lines of code… these are not hard problems, and they’ve already been solved!
Nevertheless, we’re four years later and the only thing we have to show for it is easy rounded corners, and yet another UI library that doesn’t really work well. It’s incredibly disappointing. I want to solve new and hard problem, not recreate a terrible 4 year old widget library… again. That’s why I’m done with the web.
Had we released 280 Slides today, in 2011, it would generate as much excitement and be considered just as innovative as when it was released 3 and a half years ago.
In a couple months I’ll be joining Google, working on a team building Google Now. Google Now is one of the most exciting pieces of technology I’ve seen in a long time. It’s solving problems that couldn’t be solved four years ago. It’s these kind of technologies that are going to be at the center of people’s lives as we move forward.
Meanwhile, the web community will continue to solve the same non-problems over and over again. My parting words to the many friends I’ve made in the web community is to think outside the box like we used to. Don’t be afraid to invest a week learning something new. Cappuccino, GWT, and Sproutcore were born out of necessity; don’t stop breaking boundaries because it’s now easy to add rounded corners.
(Obviously these opinions are my own and of course do not represent the opinions of my future employer)
Please share your thoughts on Hacker News.
My comment addressing Hacker News: https://news.ycombinator.com/item?id=5418655
You will remember Steve Jobs because he gave you your iPod, or iPhone.
We will remember Steve Jobs because he gave us a career.
I will remember Steve Jobs because he gave me a sense of entrepreneurship, design, taste, and product. He made the change he wanted in the world. He was truly inspiring.
A few months ago I shipped my first product, TimeTable. It was a wonderful experience finally getting a product out the door and into the hands of people that wanted to use it, while simultaneously putting a little extra money in my pocket. It’s difficult to foresee the future when your vision is clouded by the effort of getting a product out the door. I put my life into TimeTable for about a year to get to where I am today, and even with all its flaws and shortcomings I can honestly say I’m very proud of the product I’ve brought to market.
Over the course of the last year and a half I rewrote TimeTable 3 times, the first time I was almost ready to ship when I realized TimeTable was no longer the application I was hoping for. It had turned into just another web application. Around the same time I realized this I saw 280North give their first demo of their interface builder for Cappuccino applications called Atlas. They had recently released their latest version of Cappuccino which included a beautiful new theme called Aristo designed by SOFA. I had experimented with Cappuccino in the past concluding that debugging Objective-J was too difficult and that’s where my experimentation with Cappuccino stopped. Atlas just like 280Slides blew my mind. I was faced with the decision to drop everything I spend the last several months writing and pick up something I was totally unfamilar with or continue with what I already created.
I discussed the decision with Francisco Tolmasky and reluctantly I dove head first into Cappuccino. What I didn’t realize at the time is how much it would help me later on in the future. I won’t go into that here though.
I think most developers would agree it’s easier to learn something if you have a goal to accomplish. My goal was TimeTable, and boy did I learn. The problem with that philosophy is evident when you look at the code supporting the application you’re writing… IT SUCKS. I looked at TimeTable and noticed while the application was much better than what I had originally, it still wasn’t what I had hoped for. Moreover the code was completely unmanageable. So I decided to rewrite the application for the 3rd and
I still remember staying up until 3am only to get up for an 8am class. It’s amazing how much work you can get done when no one else is awake. This hard work paid off, as I was able to finally get my product out the door. It was a nerve racking experience trying to get complete strangers to pay for something you’ve created. I consulted a few friends and a local business that specializes in getting startups off the ground. The advice I heard everywhere: “SHIP”. Get users as soon as possible and get something out the door to start making some money. I knew the time was right to put version one of the product out there. The biggest hesitation I had was whether or not to file for a LLC. My gut told me yes, but I also wasn’t sure if it was going to be right for me. However, I chose to go ahead and make my business official by registering RCLConcepts as a LLC.
So it has been three months since I shipped TimeTable and I’m happy with the response. Shipping a product is a major feat and I hope I have many more in the future. TimeTable has made me question my ambitions for the future. I now wonder if my dreams were ambitious enough. I couldn’t have ever imagined how far I’d come in a single year, and I hope the progress I’m making as a developer, businessman, student, and open source contributor doesn’t end any time soon. Time will only tell.