About MeI love software engineering because with just a computer, I can make things that help people. The feeling of finding elegant solutions to complex problems is very satisfying. Using maths to visualize and model problems makes the future seem closer. Being creative and making something amazing gets me up early.
I've built multiple large apps in the following technologies:
AI / Chat Bots
Facebook Messenger Bot
This Facebook Messenger bot asks for ingredients and makes recipe suggestions based on the users responses. Responses do not need to be structured. As long as the user mentions an ingredient and a positive or negative sentiment, it will return recipes that include or exclude those ingredients. "I really love artichoke" will look for recipes with artichoke. "I'm allergic to peanuts" will return recipes without peanuts.
A Slack chat bot I built using Go. Domain is workplace acknowledgment. Can handle many different tasks, including asking surveys, pulses and propping getting team members talking positively about each other. Functionality also includes mentioning team members, communicating results to an API, and handling edge cases like preventing a user from mentioning a channel when they didn't intend to.
At ZipBooks, I build a machine learning system to offer suggestions for transaction categorization. I used fasttext to quickly train a general and account model daily. When a user first creates their account, it uses a general model, trained from previously categorized transactions accross the whole system. After they start using the software for a few days and categorize their own transactions how they like, the suggestions become more personalized to that account.
ZipBooksI led the engineering on ZipBooks. ZipBooks is the best online accounting software. We've been able to build new features fast, easily write tests for everything along the way, and our load/response times are very very fast.
CalveticaCalvetica was the first 3rd party calendar app on the App Store. I built the first version as a personal project with a friend in 2010. Over the years it has done $550,000 in sales. At one point it ranked #50 in top paid apps. We invented infinite scrolling month view that you now see in the default Calendar app.
Day OneI worked as an employee on Day One, the iOS and Mac App. Day One is massively successful and the Mac App won an Apple Design Award.
Teem (EventBoard)You'll find EventBoard on iPad displays outside the conference rooms of tens of thousand of companies including Uber, Dropbox, Twitter, Stripe, Slack, Yelp and Airbnb. I did the "Find a Room" feature on the displays and later co-led the overhaul of the authenticated front-end in Ember.js. I emphasized testing and set up a deploy pipeline that never pushed broken code.
FamilySearchAt FamilySearch I did three significant things. First, I worked on a team where we built a prototype of a user-friendly web interface for people to collect family memories in a skuemorphic book. I was in charge of the front-end dev to make it work. Second, I built an iOS prototype (and an open source client) so that people with iPhones could browse their family tree and attach media to their ancestors, like being able to record interviews with family members using the app. Third, I used d3.js to build an interactive fan chart so people can browser their tree in a delightful way. Check out those animations…
Objective-C / Swift
|Touch Forms||The forms framework that should come with UIKit|
|Fake Events||Allows you to add lots of test event data to an iOS simulator or device using EKEventKit framework|
|Xcode Plugin||An Xcode plugin for aligning code so it's more readable.|
|FamilySearchCocoa||An easy to use library for interacting with the FamilySearch.org API on iOS or OS X|
|AutoKhan||Auto plays Khan Academy videos one after another.|
|Big Splash tvOS||Unsplash Client For Apple tvOS|
|MTAnimation||Animate UIView with 25+ timing functions. (Bounce, elastic, exponential, etc.)|
|MTPDF||Objective-C PDF objects. Doing my part to help us stay out of the headache that is Core Foundation.|
|MTPocket||Cocoa Web Requests|
|Jumper||Time and date library in Swift.|
|MTGeometry||An extension to Core Graphics Geometry. Intersections, scaling, etc.|
|MTDates||A thread safe date calculation library with all the date functions you'll ever need.|
|MYSForms||Easy forms for iOS|
|MYSRuntime||Obj-C Library that makes runtime self-inspection and class modification dead easy.|
|MTStringAttributes||Easier way to create an attributes dictionary for NSAttributedString|
|MTQueue||Add blocks to queues in a super terse and readable way!|
|MTPencil||Draw animated lines (like an invisible pencil) with Core Graphics. (Prototype, will get much better).|
|MYSCoreText||An Objective-C wrapper around Apple's Core Text framework.|
|MTTimer||An Objective-C timer that restricts firing to a time range. If it's called BEFORE min, it waits for min. If it's called AFTER max, it's called at max.|
|MTFittedScrollView||A UIScrollView subclass that resizes itself to fit around its content.|
|EKEventToiCal||Returns a string in iCal format for an EKEvent object.|
|Flunk||A gem for testing Ruby on Rails web APIs by simulating a client.|
TeamsI love to work in a team and the strategies that help a team work efficiently. As we see in large corporations, 2 heads aren't always better than 1. When done correctly though, 2 heads can be as good as 3.
TestingWhen I first got started programming, I remember the anxiety of pushing code to production. Since then, I've learned to love testing and the safety and peace of mind it provides. There's no greater feeling than seeing all green with 100% test coverage. Pushing to production with confidence is very satisfying. I also really enjoy the challenge of finding ways to test things that are particularly hard to test.
BusinessI love to study business and, in particular, startups.
Solution: To be a successful business, there has to be a real problem that people want a solution for. Even if they don't realize they have the problem until they see the solution.
Execution Provide a solution for which the experience of using is better than experiencing the problem. Hopefully, much better.
Distribution Spend less money finding, converting and fulfilling a buyer than you make from that single buyer.
Obviously, I love to help the businesses I work for execute an amazing experience that makes customers not only keep coming back, but love the product emotionally.