What can we learn from Pokemon Go about designing incentive systems?

Last time I looked at why Pokemon Go is fun. Here’s what we can learn from it’s game mechanics.

What can we learn from Pokemon Go about designing incentive systems?

Start with why. Give people a purpose.

I want to be the very best, like no one every was. To catch them is my real test, to train them is my cause.”

-Pokemon Theme Song

Clear purpose established. Being the best means beating other people in battle at these gyms or collecting all the Pokemon.

Give simple instructions for how to achieve their purpose.

They need strong Pokemon, how do they get those?

  1. Walk around
  2. Catch Pokemon
  3. Train them
  4. Bring your pokemon to battle other teams at gyms

Ok, it’s a little more complicated than that, but here are the different paths that you can take towards becoming the best. It involves a lot of walking and waiting. It’s a lot like fishing actually.

Screen Shot 2016-07-18 at 1.50.10 AM.png

Make it advantageous to recruit their friends to help them.

This is way more fun when you do it with friends. It’s like you’re going on an epic adventure and you’re probably going to need a team to beat the other team at the gym.

People like being part of teams. Teams provide identity, belonging and purpose.

What draws people into the game?


I found out of about the game from a friend, who found out from their Facebook feed.


To many people, Pokemon bring back fond memories of spending hours playing a fun game.

Low time commitment

It’s easy to get into because the game doesn’t take much time to play.

Novelty and quick progress

At first, everything you catch is new and leveling up is pretty fast.


The game doesn’t teach you how to play it. It makes you feel special when you learn it’s secrets and share it with your friends.


What keeps people in the game?

Friends / News

Even if you managed for forget, new people discovering the game and posting it on Facebook sucked you back in. Just walking by Central Park, you can see lots of people standing around and playing at night, which makes you want to play the game.

Random rewards

There’s been research done by psychologist who showed that random rewards reinforced behaviors the most. Randomness is everywhere in the game: catching pokemon, which pokemon appear, what pokemon hatch from your eggs, what items you get from pokestops.

Progress bars

In the game, there’s progress bars for everything to show you how you’re doing and how far you are from completing the next challenge. Trainer level, egg hatching, pokedex, and candies needed to evolve. As you progress through the game, things get harder but not so hard that you can’t handle them. It kind of puts the blinders on you like a horse and keeps you focused on what’s straight ahead. Playing the game is easy. In life, you have to make your own progress bars and it’s not nearly as clear cut and you also have to know where to go.

Competition / Glory / Honor (“My life for Aiur” mentality)

At the higher levels of the game, it really comes down to making a better pokemon than everyone else and showing them off at the gym, which are like leaderboards. Rarer pokemon tend to have higher power caps, so that incentives people to go off the beaten path. The game gives gyms proment positioning and makes taking over enemy gyms easier by giving you six pokemon to use. This gives everyone a chance at holding the hill and feel the glory of winning.

What makes people quit?

The game keeps freezing


My ears keeps freezing

No one wants to walk around when it’s 30 degrees outside.

The virus harms the host

If you think of Pokemon Go as a virus, anyone who’s played pandemic would know that you don’t want to kill the host too quickly because it’s able to be spread to another person. In this case, if the game starts to take over too much time, people will stop.

People get bored

After you’ve caught most of the common Pokemon, you have to go out of your way to catch more, which might not be worth the effort. Then progress is slow to level up or catch Pokemon and people will get bored.

The competition gets serious

Horseraces aren’t fun if you’re way in the back, so once the gyms get to a high enough level, it becomes discouraging because you’re comparing yourself to others and you feel bad each time.

The competition isn’t fair

No one likes being part of a rigged system, whether that’s Pokemon or the economic system. Right now, the items in the game give people advantages, but most of them still require the user to commit a lot of time to getting results. If you can start trading or buying Pokemon, it might spell the end as people with more money can just buy what they want and people who grind through the game feel cheated. Part of the promise of the Pokemon theme song is that any 10 year old kid can become a Pokemon master. It’s like the American dream. If you walk around long enough, wait long enough, you will get your reward. That dream should not just be for the 10 year old kid with rich parents.


What makes Pokemon Go so fun?

Pokemon Go has been blowing up this week. As a product manager, I like to figure out what make products great, so here’s what’s I like about Pokemon Go.

What makes Pokemon Go so fun?

Pokemon Go is nostalgic because it fulfills the childhood dream of actually being a Pokemon trainer, except now we’re adults so we can go whereever we want and we have no curfew. Attributing it’s success to just nostalgia is oversimplifying and not recognizing that it addresses real psychological needs.

It turns an ordinary walk into a chance to catch a rare pokemon, an epic triumph. Much of life is routine and drudgery. This turns ordinary moments into potentially exciting ones.

It gives clear direction for how to be the very best in an otherwise open-ended world. A lot of young ambitious people want to be the best, but what the best means and how you get there are ambiguous. Pokemon Go is easy because it has answered those questions for you. Religion has a lot of value to a lot of people because it provides an organizing view of the world. It tells you what to do and tells you how to do it.

It shows progress in a world where you often don’t have a clear measure of progress. How often do you know for sure how well you’re doing in your job or your relationships. These are difficult cognitively taxing questions. If only life had progress bars too.

It helps break down walls between us and strangers on the street. In New York, standard protocol is not to talk to people on the street. This game is an easy way to connect people in the same way that sports teams are fodder for small talk.

It makes me walk even more. I already walk 5 miles a day, but now I walk 20% more.

It gives people a fun casual activity to do with friends at any time that doesn’t (necessarily) involve going to a bar. When you friends what they want to do, the first two things that come up are going to a bar or a having dinner. Museums are great, but there just aren’t that many things you can do at night. It’s addressing a real hole in the nightlife scene for people who don’t want to go to bars.

For these benefits, what does it cost me to play this game?

It’s not a big time commitment because you actually have to walk places to play the game and I mostly play it as I’m already walking to places.

Sure, my phone will die faster (so I bring a battery).

I have to recognize that games like this are meant to be addictive. Even if you’re not playing the game, it may affect how you experience other pleasures. In the brain, connections that are used more often are strengthened. If you spend too long getting most of your enjoyment from one source that may crowd out other enjoyable things.

The mind share is the biggest cost to playing the game. Just like how I only drink with friends, maybe it’s best to only play Pokemon Go with friends. And for goodness sake, pay attention when you’re crossing the street. #priorities


The Best Credit Card Rewards Calculator

There are so many articles about what the best rewards credit card is. They talk about all the features, pros and cons. Revolving categories. Redemption minimums. Cash back pretending to be miles. It’s really complicated.

You know what would actually answer this question once and for all? If we just calculated your expected rewards from each card and compared them. So, that’s what we’re going to do.


Credit Card Rewards Basics

Rewards are only rewards if you’re not paying interest. If you still have balances, pay them off before continuing. You should be paying off your balances every month for the rest of this to be relevant.

There are cashback rewards, there are miles at airlines or hotels, and then there are cashback points pretending to be miles. Here, we’re going to look at the first and the third types.

Length of credit history makes up 15% of the FICO credit score so you should have some cards which are open for a long time. Let’s see what are the best credit cards in the long run.


What’s the best cashback credit card to have forever?

You want the redemption rate to be the highest after the sign up bonus has already been obtained. This is the card that you will be spending most of your money on.

What you want to avoid is keeping a card with an expensive annual membership fee open for a long time. It’s not doing you much good.

Screen Shot 2016-07-07 at 4.47.10 AM.png

Citi DoubleCash is the best in this case and that’s great because it also doesn’t have an annual membership fee, so you can keep it open forever without paying for it each year. Also, unlike cards that can only be used to redeem for travel, DoubleCash can be redeemed for anything.

I calculated these numbers using the average New York household spending from before. This example household spends $25,143 a year on their credit cards.


What’s the deal with Sign Up Bonuses?

Notice how I said that permanent cards don’t take into account consider the sign up bonus. Here’s why:

The best credit cards in the long term are not the best in the short term, because sign up bonuses make up a large part of the value of rewards cards.

Screen Shot 2016-07-07 at 4.53.24 AM.png

Compare the first year reward values to second year reward values. The red arrow shows Citi DoubleCash. It’s no longer the at the top of the list because all the cards above it have some sort of signup bonus.

If you average the signup bonus over the years that you have the card open, here’s what you get.

Screen Shot 2016-07-07 at 4.56.28 AM.png

As time goes on, the cards separate into two groups, one around $500 a year and another around $375 a year.

Now, looking at just the top cards in the first year compared to Citi DoubleCash.

Screen Shot 2016-07-07 at 4.58.25 AM.png

Notice how these cards start very high due to the signup bonus and then fall below DoubleCash over time. You could stop using the card once you have the sign up bonus, but that generally means having to cancel the card because these signup up bonus cards tend to have annual fees. Cancelling cards affects the length of cards open and so has a small negative effect on your credit score.


I don’t spend 25k on my credit cards in a year. Does the math change?

Remember that these numbers were calculated off an annual household spending of 25k.

What happens if you spend less?

12k a year

Screen Shot 2016-07-07 at 5.16.32 AM.png

Citi DoubleCash is still the best card in the long run.

Screen Shot 2016-07-07 at 5.18.22 AM.png

But, in the first year, we see some other cards with signup bonuses overtake DoubleCash.

If you spend less than 12k a year, you may not spend enough to get the signup bonus (ex. Barclays Arrival and Capital One Venture requires 3K spent in three months).

What happens if you spend more?

50k a year

Screen Shot 2016-07-07 at 5.30.25 AM.png

In the long run, DoubleCash still comes out on top. Interestingly, at 95K annually, Barclays Arrival actually equals DoubleCash.

Screen Shot 2016-07-07 at 5.27.22 AM.png

In the short run, DoubleCash is actually doing better now as the weight of the signup bonus is reduced by the increase in spending.


What about airline cards, American Express membership points and hotel cards?

They’re very complicated because they can be redeemed for different values depending on how they are redeemed. Another subject for another time.


What’s the best cashback rewards card?

For most people spending more than 8k a year, Citi DoubleCash is the best. It gives you the most money without considering signup bonuses.

There are many good cards above with signup bonuses and you could chase them, but it may not be worth your time. You might as well find a card that will last you a lifetime.

Sounds like dating.

A Curriculum of Guides about Blocks in Objective-C

Recently, there was a question about blocks that I couldn’t answer so I took a note to review it.

I came upon some great articles. Seeing the same elephant described by different people invariably leads to a comprehensive understanding of the elephant (much in the same way that taking beginner swing dance classes from 4-5 people leads to better fundamentals).

With no desire to write an inferior blog post, I’m going to review the ones I found, much the same way that I review restaurants.

The Guides

Mike Nachbaur: Using GCD and Blocks Effectively

Tutsplus: Objective-C Succinctly: Blocks

AppCoda: Introduction to Objective-C Blocks

Apple Working with Blocks

Matt Nunogawa Objective C Blocks: Summary, Syntax & Best Practices

Conrad Stoll Blocks, Operations, and Retain Cycles

I’ll be looking at:

  • explanation of why it’s important
  • completeness vs depth
  • the example code
  • ease of transferring examples to projects
  • how beginner friendly it is

Which should I read first?

Starting from Square One

Go with Tutsplus: Objective-C Succinctly: Blocks. It’s short, has useful examples and memory is well explained with diagrams. It stops short of retain loops though, which is a vital topic. Also lacking is why blocks are used (when would I want to use a block? what would I have used otherwise?).

AppCoda (Introduction to Objective-C Blocks) is really known for their app tutorials. They explain very well why you would use blocks and lead you through an example of how it would be used in a practical situation with an actual app.

Mike Nachbaur: Using GCD and Blocks Effectively extends deeper into asynchronous callbacks, introduces Grand Central Dispatch, and the idea that retain cycles can happen.

For Programmers from Other Languages

Matt Nunogawa (Objective C Blocks: Summary, Syntax & Best Practices) writes his blog directed at programmers from other languages and overviews blocks with greater examples for retain cycles and how to avoid them.

Bonus: Conrad Stoll (Blocks, Operations, and Retain Cycles) writes about a real example of a bug that his team faced with retain cycles and blocks.

For Quick Reference After Learning It Once

Apple Working with Blocks documentation can be a bit dry and doesn’t give much guidance for when to use it, but if that doesn’t bother you, then by all means go ahead. It’s very comprehensive.

Playing with iOS MapKit Part 1: MapKit Tutorials

Playing With MapKit

Part 1 MapKit Tutorials

Part 2 Reverse Geocoding and Custom Annotation Callouts

Part 3 Making it Pretty

Part 4 Race Conditions, Other Bugs, and Wrap-up

A main difference between a smartphone and any other phone is that smart phones can tell you where they are. What does location tell you? Location provides context about what you are doing, where you’re going, and by extension, who you are.

Apple makes it easy to show this information on a map with MapKit.

At the Flatiron School, I got a good foundation for learning frameworks, but hadn’t worked with MapKit yet. Since it felt core to many mobile apps, I decided to explore it.

Demo Video

Here is a demo of the finished app. All the code is on Github.

First Stop on the MapKit Train: Tutorials

Whenever I get into a new framework, I learn best by jumping right in and  doing it. Tutorials are a great way to get started. They help me focus by limiting scope and stay productive before my natural curiosity wants to go down some rabbit holes. I also don’t want to reinvent the wheel.

If I have seen further it is by standing on the shoulders of giants.

-Isaac Newton

Searching for iOS Mapkit tutorial, I find some by Ray Wenderlich, TechTopia, and AppCoda. All three have been really useful in the past. I went with the TechTopia one because it was written about iOS 7.

Tutorial 1: Make a MKMapView and Show the Current Location


  • Add the MapKit framework
  • Make a MKMapView with Storyboards and import MKMapView
  • Assign the MKMapViewDelegate to the view controller
  • Set the MKMapView to show the current Location
  • *Not In Tutorial: Asking for Permission to Access User Location
  • *Set the location in Simulator
  • Zoom in on the MKMapView by changing the region
  • Change the MKMapView type
  • Update the MKMapView using the MKMapViewDelegate methods

*Most of this is already well explained in the tutorial. I want to point out two bumps on the road.

1. Simulator does not have a GPS, so you have to set the location by the menu bar: Debug -> Location -> Custom Location.

Google maps will give you latitude and longitude for any location if you click on the map. If it’s an icon, right click and click “What’s here?”.

Note: Sometimes the location doesn’t show up in the simulator the first time I run it. When I run it on another sized simulator, it works. Don’t know why this is.

2. More importantly, iOS 8 requires that you get permission to use the user location.

How to Get the Current Location Authorization Status

    CLAuthorizationStatus status = [CLLocationManager 

CLAuthorizationStatus is an enum of

  • kCLAuthorizationStatusNotDetermined = 0
  • kCLAuthorizationStatusRestricted = 1
  • kCLAuthorizationStatusDenied = 2
  • kCLAuthorizationStatusAuthorized = 3 (Deprecated iOS 8)
  • kCLAuthorizationStatusAuthorizedAlways = kCLAuthorizationStatusAuthorized = 4
  • kCLAuthorizationStatusAuthorizedWhenInUse = 5

Statuses start out as kCLAuthorizationStatusNotDetermined

How to Ask the User for Location Authorization

If you want current location data only when the customer is using the app:

[self.locationManager requestWhenInUseAuthorization];

If you want current location data even when the customer is not using the app:

[self.locationManager requestAlwaysAuthorization];

Here I have my CLLocationManager as a property of the class. Change self.locationManager to the name of your locationManager.

How to Add Properties to your Info.plist

Even though you think you’ve requested authorization, you are likely still missing one more piece.

Properties List

In the Supporting Files Folder of your app directory, there is a Info.plist file.

It’s a properties list that your app uses through out the app.

You have to have a property in there for NSLocationWhenInUseUsageDescription (or NSLocationAlwaysUsageDescription depending on which permission your asking for), which tells the customer why you are asking for their location information.

Permission Popup

How to tell if you received location authorization

There is a delegate method for the location manager that tell you when the authorization status changes.

- (void)locationManager:(CLLocationManager *)manager 

The status here is the CLAuthorizationStatus.

Remember to set the locationManager’s delegate to the class that implements the delegate method. In this case, I’ve set the delegate to self inside my view controller.

self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;

Tutorial 2: Add Local Search with MKLocalSearchRequest and Display Results as MKPointAnnotation


  • Add a textField so the user can input search terms
  • Add an IB action for the textFieldReturn to call the performSearch method
  • Add a performSearch method that sends a MKLocalSearchRequest and handles the MKLocalSearchResponse by parsing its array of MKMapItems into MKPointAnnotations

This was pretty straight forward. Apple makes the searches super easy by giving you completion handlers.

How to Perform a Local Search

You just need a MKLocalSearch object and a MKLocalSearchRequest object.

MKLocalSearch *search = [[MKLocalSearch alloc] 

and call

- (void)startWithCompletionHandler: 

Tutorial 3: Find Directions with MKDirectionsRequest and Draw Them on the Map


  • Add a ResultsTableViewController to show the names and phone numbers of the venues
  • Add a RouteViewController to show the route to the destination
  • Set up a MKDirectionsRequest with a source and destination in the RouteViewController
  • Make a MKDirections instance that calculates directions
  • Pass the MKDirectionsResponse to a showRoute method that adds an overlay of the polylines of the MKRoutes in the response to the map
  • Set up how the overlay will look


The tutorial sets up a custom UITableViewCell, but that’s not really necessary because you can set the title as the name and the subtitle to the phoneNumber.

Why am I in the middle of the ocean?

It’s important that you implement the MKMapView delegate method

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:
(MKUserLocation *)userLocation

Otherwise, you’ll find yourself in the ocean next to West Africa a lot (that’s what happens when your coordinates are (0,0)).

How to Get Directions

Make an instance of MKDirections and call:

- (void)calculateDirectionsWithCompletionHandler:

Up next: Going beyond the tutorials

Flatiron School Week 12 – iOS Full time Report

For notes on the first half of the program, check out the halftime report.

The End of the Beginning

These three months have been a tremendous experience. I recall other three-month periods where nearly nothing has changed. In stark contrast, I didn’t know anything about making apps three months ago and now I can make 80% of the good ones out there and I will soon be able to make the last 20%.

Amidst celebration, the feeling of the real world seeps in. The realities of finding a job are readily apparent. These three months have been a working vacation, a sabbatical, with no need to worry about worldly concern, just code. Yet, this search feels so much different from the post-college job hunt. That felt like gauntlet of hurdles, where the goal was to shape myself into the candidate that would be hired. This feels like a dating process. Maybe it’s always been that way, and I’ve only now grown mature enough to see it as such. I go into each interview, each conversation with as much thought about how much I like them as I do with how much they may like me.

Flatiron School Placements

This week, there’s been a lot of job advice, most of which I agree with wholeheartedly.

  • The placements team tell us how to prepare for the technical interview.
  • They tell us how to think about the long term (your career) not just your first job.
  • They tell us how to network.
  • They help us practice mock cultural and technical interviews.
  • They host talks to connect us with alumni and industry people.
  • They help us with our individual situations and questions.
  • All these things are meant to help us get a get a job.

Note: If you’re an international student, it may be hard to find a company to sponsor your work visa. 

Note 2: iOS developer make slightly more than Ruby on average.

I’m expecting the job finding process to go through a few iterations and take at least 2 months.

My advice: 1. Just like dating, you have to go out there, meet people and build relationships. 2. Keep coding to keep improving yourself. 3. Stop when you’ve found a place you’re excited to work for at least a year or two.

iOS Client Projects 

In interviews, people like to see that you’ve worked on projects before and especially if you’re worked with clients before.

One of the things that no one told me was that iOS students have client projects for the last four weeks. Ruby students work on their own projects.

I worked with a team for a client called HireCanvas, which makes the college campus recruiting process easier (how appropriate for my situation).  We helped them build out a iOS version of their web app.

Half of your time will be spend figuring out where to go

  • For the first eight weeks of labs, objectives and deadlines were established for us. Coding as a career gets real when I sit in front of a computer and spend half the time figuring what needs to be done when and what should be done next. Not having this structure makes me appreciate the time and thought put into designing a curriculum. On the project, we also have to make choices that will determine whether the project will be done in time. Do I use a cocoa pod or build my own?

Git only gets real in groups

Teamwork helps you figure out what makes good teammates

  • The other thing about working with people is that it helps you develop an intuition for who you would want to work with and who you wouldn’t. Sometimes people surprise you. You might think that an experienced programmer would be great to have on a team until you realize that commitment was a more important trait to look for.

Communication Communication Communication

  • As with any type of project, communication turned out to be key. When communication breaks down, people assume the worst and death spirals are started. Talking through it, you realize that the thing you were worried about was not that important to the other person.

A note on legal agreements

Read before you sign. Try to change what you don’t like.

Unlike software agreements, employment contract and non-disclosure agreements should be reason to pause. People will pressure you to sign, so you can get the job. They will tell you that it’s standard practice. That’s a whole lot of bs.

If they’re never going to use a part of the agreement, you shouldn’t have to agree to it.

Make sure you understand what you’re signing and if you don’t like it. Ask if you can change it. A lot of times it’s so boilerplate that the people you’re working with don’t even know what’s in it. If it can’t be changed, ask whether it’s worth taking on the work. I’d rather forgo a project than sign something I’ll regret later.

One thing the school could have done better was show us the legal agreements we would need to sign for the client projects and for attending the school before money and time was spent.

Overall Lessons

1. The number one goal for coming to Flatiron School is to learn how to be self-sufficient as a developer

Use the time to learn to fish and you will have skills for a lifetime. Use this time to try and fail, not produce a portfolio or kickstart your startup. The real world is not as forgiving.

2. Flatiron School brings together very nice, talented people. Build relationships with them.

For most of college, I didn’t appreciate the diversity of human talent and what I could learn from others. At Flatiron, the side projects I’ve seen really brings out people’s passions. I appreciate being around so many talented people (students especially).

3. Have enough living expenses for 6 months before you come to Flatiron

People who only had four months are now scrambling to find the first jobs they can. That’s an unenviable position to be in. Give yourself the time to think about what you want to do after Flatiron. You might be a different person by then.

4. Learning to code will make you feel more empowered than ever before

Not only can you make other people’s dreams come true, you can make your own reality.

Flatiron School Week 7 – Week in Review

Topics: APIs + Core Data, Authentication, Multithreading

Mistakes and Lessons

Symptom: API calls don’t tell you a lot when they don’t work. I wasn’t getting anything out of an internet request. Debugging API calls can feel like a text based adventure.

Mistake: Errors in strings are hard to debug. Apparently, when I had made the url, there was an extra “%”.

Lesson: Copy and paste urls that work from Postman, or use an encoder to convert strings to urls.

Symptom: When I changed the colors in my bocce game, the logic for choosing the next team to go broke.

Mistake: I had changed my colors away from the default colors (e.x. blueColor) to RGB values and had used == to compare the objects. The correct way to compare the objects is using an isEqual. Turns out that when you use [UIColor colorName] using == to compare is ok because they are at the same memory location.

Lesson: Use isEqual with objects and == with primitives.

Notes to Self

There are some times when I just have to slow down and plan out how something works. I was making a tableView that updated an API and a Core Data store. This very quickly got too complicated to keep in memory and I had to write down the interactions step by stem.

My partner and I decided to divide and conquer a lab. It became very hard for me to test along the way, because I was dependent on his piece to make mine work.

“If You Want To Go Fast, Go Alone. If You Want To Go Far, Go Together”

Flatiron School Week 6 – iOS Halftime Report

The Economics of Flatiron School

While I was still employed in Virginia, I thought long and hard about the value of going to a developer bootcamp.

Before deciding to come to the Flatiron School, I had gotten back into programming after a hiatus in college. I had taken a couple high school CS classes and I felt confident that I could learn to code on my own. I knew it would take longer than if I came to a bootcamp. Maybe 6 months instead of 3 months. $12K was a lot of money to me and having grown up without a lot of money, this would be the most money that I had spent on anything, so understandable this was a big decision. (I just noticed that it’s now $15K. My logic still applies.)

Whenever you quit a good job, there’s a lot of uncertainty. What if I don’t find another job? What if I don’t like New York?

Pre-Flatiron Pro/Con List


  • A community of people to learn with
  • Frequent feedback from instructors
  • A structured environment that kept me moving forward
  • Placement services afterwards
  • Alumni connections
  • A commitment device
  • Getting a job 3 months earlier
  • Connect with the NYC tech community


  • Spend 4-6 months of living expenses
  • Move to a more expensive city.

After a week, I realized that the math was actually really easy. Even if I got a job that was 60K, which is on the low end, I would be gaining $15K for having a job for three months earlier. So that by itself would equal the tuition, and I would be getting the other benefits thrown in as well.

That’s a no brainer, I gave my notice the next day.

A review of the first half

The Curriculum

We do a lot of labs here. One thing that I didn’t realize is that there is a lot of setup involved. In cooking, there is the concept of mise en place, or putting in place, that needs to be done before you can fire up the stove. It’s mostly cutting vegetables and measuring out slices and it’s really boring. Fortunately, the labs often have a lot of the setup done for us, so that we can get coding right away. That’s work that I would have had to do myself if I was learning on my own.

For the first six weeks, I’ve worked 55, 62, 60, 51, 62 and 52 hours, been able to do the labs and work on stuff on the side. I would say that 55-60 hours is probably a minimum number to everything done and work on side projects. I don’t think I would have worked this much on my own. The 12K was a commitment device to work hard. Being surrounded by talented and motivated people doesn’t hurt.

A lot of the iOS curriculum is being built out and sometimes I feel like a beta tester. That’s how something work though. No one is going to hand you perfect code. The swift change will also mean more changes for the curriculum. iOS is new and fast moving.

The Instructors

Most of the time, you can get a lot of instructions from tutorials, stack overflow and documentation. That’s when you don’t need an instructor. But there are also times when you hit on a problem that’s really annoying and you have no idea what to do. Apple Mach-o linker error is my least favorite. The error codes never make any sense. I google around for a while and don’t have the answer. That’s when you need an instructor.

The Students

Having 17 other people work on the same labs helps in a couple ways.

1. If you’re stuck, someone has the answer.

2. You solidify your learning when you explain a concept to someone else.

3. You crowdsource better ways to do the same thing.

Otherwise, I’ve been really impressed by the other students who come here. They’re thoughtful, entrepreneurial, artistic, and fun to hang out with. And they’ve all quit their jobs to be here, just like me.

One major advantage of working in a team is that you realize how hard git is with when you work with another person, something I would have waited to learn if I had taught myself.

The School

When you go to a “school”, it’s easy to forget that the Flatiron School is a startup. From hearing what the team believes, I think they know the importance of maintaining the brand and investing in the education of young people. They seem focused on the long term and building the HBS of developer schools.


The school is in downtown New York. There’s a lot of places for lunch here.


Coming in, I had doubts about how much I’d prepared. I don’t feel that anymore. Six weeks in, I’m pretty comfortable that I can figure it out if I don’t know something. I know how to read Apple documentation, google stack overflow and ask for help. In fact, I think this comes more naturally to me than most people and the more code, the better I get.

This week, we learned about APIs and this was really the first time when coding became real. I can now build programs that change the state of the physical world. That feeling is incredibly empowering.

Notes for the second half

1. Maintain health

2. Appreciate the people and the time that we have left

3. Make good art

4. Do a lot of work

There’s two more weeks of instruction left before client projects start. My Flatiron presents is in three weeks, so there’s a lot to be excited about.

RGB Express <3

I love the level loading animation.

I love that it taught me how to play the game without any words. It’s so intuitive.

I love that the game play is working through constraints to find a path through the craziness of life. It’s not just delivering packages, it’s practicing how to go to the gym, do laundry, blog, go to your friend’s happy hour today without going crazy.