Mid-week Checkin

It’s Wednesday night and as expected it’s been both an exhausting and rewarding week so far here at the Front End Web class. Here is the table of contents we’ve been working through:

  • Introduction
  • Chapter 1: Setting Up Your Development Environment
  • Chapter 2: Setting Up Your First Project
  • Chapter 3: Styles
  • Chapter 4: Responsive Layouts with Flexbox
  • Chapter 5: Adaptive Layouts with Media Queries
  • Chapter 6: Handling Events with JavaScript
  • Chapter 7: Visual Effects with CSS
  • Chapter 8: Modules, Objects and Methods
  • Chapter 9: Introduction to Bootstrap
  • Chapter 10: Processing Forms with JavaScript
  • Chapter 11: From Data to DOM
  • Chapter 12: Validating Forms
  • Chapter 13: Ajax
  • Chapter 14: Deferred and Promises
  • Chapter 15: Introduction to Node.js
  • Chapter 16: Real-Time Communication with WebSockets

And what’s up next:

  • Chapter 17: Using ES6 with Babel
  • Chapter 18: ES6, the Adventure Continues
  • Chapter 19: Introduction to MVC and Ember
  • Chapter 20: Routing, Routes and Models
  • Chapter 21: Models and Data Binding
  • Chapter 22: Data: Adapters, Serializers and Transforms
  • Chapter 23: Views and Templates
  • Chapter 24: Controllers
  • Chapter 25: Components
  • Chapter 26: Afterword

Entering the class I was a little worried that my past web development experience would have made the early chapters moot, but to my enjoyment there is a lot of new web features and tools available since I did Rails full time back in 2012. Flexbox is particularly interesting and has me excited to do some testing to see if it will help me solve some layout concerns I have in my side project.

I also enjoyed the time we’ve spent working in pure JavaScript. We built out a very modularized system that would react to a simple coffee order page. I appreciate how we’ve taken the time to learn JavaScript from the bottom up. It makes you better understand and appreciate what more advanced tools like Babel and Ember are doing.

Tonight we closed with web sockets which is something I’m really hoping to embrace on future projects. Live content, no reload and real-time collaboration is where it’s at.

And then of course comes the “ranch” venue itself. Being able to get away and focus on the learning is priceless. Afternoon walks help clear your head. Here are some photos. Wish you were here. 🙂

Regarding Knight Rider and Delegation

One of the saddest aspects of being a Big Nerd Ranch instructor in 2016 is that students these days do not appreciate the Michael Knight is to Delegation, as RoboCop is to Subclassing discussion of yesteryear.

From Cocoa Programming for OS X: The Big Nerd Ranch Guide:


Let’s start with a story: Once upon a time, there was a man with no name. Knight Industries decided that if this man were given guns and wheels and booster rockets, he would be the perfect crime-fighting tool. First they thought, “Let’s subclass him and override everything we need to add the guns and wheels and booster rockets.” The problem was that to subclass Michael Knight, they needed to wire his insides to the guns, wheels, and booster rockets – a time-consuming task requiring lots of specialized knowledge. So instead, Knight Industries created a helper object, the Knight Industries 2000, or “KITT,” a well-equipped car designed to assist Michael Knight in a variety of crime- fighting situations.

While approaching the perimeter of an arms dealer’s compound, Michael Knight would say, “KITT, I need to get to the other side of that wall.” KITT would then blast a big hole in the wall with a small rocket. After destroying the wall, KITT would return control to Michael, who would charge through the rubble and capture the arms dealer.
Note how creating a helper object is different from the RoboCop approach. RoboCop was a man subclassed and extended. The RoboCop project involved dozens of surgeons who extended the man into a fighting machine. This is the approach taken by many object-oriented frameworks.

In the Cocoa framework, many objects are extended in the Knight Industries way – by supplying them with helper objects. In this section, you are going to provide the speech synthesizer with a type of helper object called a delegate.

What do you think the new metaphor should be?

PragProg Thanksgiving Sale

I started reading books from the Pragmatic Programmers back when I started learning about Rails 1.0 and over the years have built up quite a significant library from them.

They are having their annual Thanksgiving sale, 40% off all ebooks (code “turkeysale2015”). A great time to load up for some holiday reading.

My recommendation this year is The Nature of Software Development. It shares many core values I have about software development. It’s a short read with lots of quirky sketches. I highly recommend it.

There was also a talk at ETE from Ron about the book but I’ll continue to recommend the book itself more as I think it’s a little more focused, better value for your time.

Designing & Planning Your iOS App Workshop Recap

Workshops are a new effort from the Philly CocoaHeads group. Basic idea is: one workshop every other month, the workshop is a one day 5-6 hour event, that covers a single topic. Our first one was on Intermediate Objective-C and our second one, which was held last Saturday, covered Designing & Planning Your iOS App.

Kotaro Teaching

Overall the workshop went well. Kotaro Fujita was our main presenter and did a great job of alternating lecture and hands on exercise. At the end, attendees presented what they had worked on and how their app ideas were evolving. The crowd was great with lots of great feedback too. Some of my notes:

  • When brainstorming features consider using index cards or mind mapping software. I like MindNode Pro and Trello.

  • Spend LOTS of time wire framing, sketching, etc. Be mindful to separate your design time from your production coding time. It’s easy to fall into trap where you are coding things that will not work and this is very expensive. Way better to validate your designs with prototyping first.

  • Document what problem each screen is suppose to solve. Also document the emotions you expect the user to have. For example, on first launch what is your user asking themselves, how can you help educate them? Are you using verbiage they understand? How fast can you deliver your first WOW moment?

  • Get users involved as soon as possible. Preferably before you start to code. Should have some level of idea validation before starting.

  • Once you release a build, make customer support your highest priority. Answer every email/tweet within the hour. Let them call you. Doing this is a huge part of getting people to trust you and then later recommending you and your product.

Related Resources

In the spirit of the talk I wanted to share some other related resources.

So there are two great online courses going on right now regarding starting a startup people might be interested in:

Some of it is a little heavy on the VC-funding but otherwise lots of great things to think about.

Another video I find really helpful to watch and re-watch whenever thinking about which projects I want to work on: How great leaders inspire action by Simon Sinek. His explanation of “Why/How/What” is very inspiring for me.

For some design fundamentals consider reading Design for non Designers by Robin Williams and Don’t Make Me Think by Steve Krug

Finally I’ll mention the the Lean Startup Book which I reviewed back in 2013. It still is a favorite book of mine with some awesome ideas on working fast and based on validations and learning.

Side Projects

Sorry for the dead air over the last few months. Things got a bit hectic at my job and I couldn’t seem to find the free time to post. On the plus side, things are starting to calm down. We’ve shipped some more software and I’m finally catching up with some side projects.

One project which I started at the March CocoaHead Hackday is GoldCards. It’s an iOS reference tool for Hearthstone.

  • GoldCards Screenshot 1
  • GoldCards Screenshot 2
  • GoldCards Screenshot 3
  • GoldCards Screenshot 4
  • GoldCards Screenshot 5
  • GoldCards Screenshot 6

While I want this to be a Universal (iPhone and iPad) app in time I think I’m going to finish up a few more loose ends and release it as an iPhone-only app for now.

Another big side project is CocoaLove, an iOS-focused conference coming to Philly. I’m on the planning committee (sponsorship and AV to be specific). I’d also like to help build a simple conference app with the schedule and what not. Shouldn’t be too hard considering my history with such things.

In addition to all that I’m also trying to catch up with some web tech, Ember and Node to be precise. There are a few things on my idea board that could utilize such skills so I’m taking some time reading books and going through Code School examples to catch up.

Book Review: The Lean Startup

With the sale of ProfitTrain complete, my schedule has room for a new project. There’s a handful of ideas I’m working through, but, before I jump into one, I think that now is a great opportunity to catch up with some business books I’ve had on my radar.

The Lean Startup

The Lean Startup, written by Eric Ries, is a book I first received from New Relic through some promotion. Sadly, I wasn’t in much of a reading phase at the time, but with a secondary recommendation the other day, I decided to go ahead and start reading.

First, the book defines an entrepreneur as:

an organization dedicated to creating something new under conditions of extreme uncertainty.

Using this definition, Eric explains that you can find entrepreneurs everywhere, from the typical garage startup to a division inside a larger corporation that’s been told to start a new initiative or project.

Some might say that we live in a golden age of entrepreneurship, but, while the overall number of new startups is increasing, success continues to be a real challenge. Lots of startups are failing because of elements that can actually be avoided. The Lean Startup is a movement that challenges entrepreneurs to work less on instinct on more on measurement in order to quickly learn what it takes to build a sustainable business.

Too often product ideas will come to a team and they’ll enter a long development cycle, only to find out that they’ve spent all their money and built something they can’t sell or that nobody wants. The Lean Startup encourages building “Minimum Viable Products” which will help start a real feedback loop with customers as soon as possible. Only by working with real customers can you truly learn.

Learning is an important, if not the most important, aspect for the Lean Startup movement. It should be at the center of how you spend all your time. If you are working on something that is not going to help you learn about customer behavior or evaluate a company risk, it’s probably just waste.

The heartbeat of a Lean Startup is the feedback loop, named “Build-Measure-Learn.” In practice, your actual feedback loop might look something like this:

  • Figure out what you want to learn about your customers.
  • Figure out how you’ll measure it.
  • Build it into the product.
  • Deploy it to the customers.
  • Measure customer behavior.
  • Use these measurements and metrics to define future work and pivots.
  • Repeat.

The feedback loop should be as small as possible.

When it comes to metrics, Lean Startup does warn against “vanity metrics” — these might be reports or charts that look good at first glance but don’t really represent whether your business is really growing. Consider an app that gets 1,000 downloads per day but also has a bounce rate of 80%. What if that remaining 20% decays over time to leave you with only a handful of active users. Showing a “Total Downloads” chart might make the team feel nice inside, but does this represent the real growth rate of the product? What you need to track will vary per business model, but the recommendation to be wary of “vanity metrics” is true for all.

There is more advice in the book, including some suggestions on using “Five Whys” to help find root causes of problems, along with a reminder than no system is perfect for everyone. That said, I really took a liking to the ideas of Lean Startup. I’m currently reading a nice followup book, Running Lean, which has a collection of real world approaches to applying Lean Startup to a business or product prospect.

Regardless of what my next project may be, I’m definitely interested in applying The Lean Startup to see how it works out.

To learn more, you can check out the book’s website: theleanstartup.com.