2017 was a big year of growth and change for Olio Apps!
Our small team grew from four to seven people, and it was the first full year in our new office - having moved in October of 2016.
The last two and a half years have been a transition from solo to duo, to many person team.
In many ways, we’re becoming more and more of a “real” company.
We created a handbook, where we document The Olio Way to build software, our on-boarding process, and our standard policies and procedures. Everyone on the team contributes to improving it and making it a useful resource.
All employees now receive the full range of health benefits, a 401k plan, company equipment, funds for education, plus the all important free coffee and snacks. Another key benefit is technical mentorship. All employees have weekly one on ones, and we track annual goals for career development and growth.
When coding, we often work in pairs, which helps smash through hard problems, rather than try to solo-hero our way through it. We’re also big believers in peer review - all code goes through a pull request process where at least one other person reads through it, and either signs off or requests changes to fix or improve things.
We started a monthly lightning talk series this year. Anyone can give a short 5 minute presentation to the team on whatever they like. They’re generally about technical topics we’re learning, or the mechanics of a current project. The act of writing, and creating a short presentation really helps solidify knowledge, with the bonus of spreading it to all members of the team.
We attended two conferences this year, Gophercon in Denver and Chain React here in Portland. A few of us also attended a one day class on the basics of Sketch.
We even had our first official holiday party with our friends and families, complete with food, drinks, bowling, table tennis and video games. It was pretty sweet.
We set up this blog half way through 2017, and posted a few articles last year. It was a great start, but we’re planning to ramp up the frequency in 2018.
Shoutbase, our approach to time tracking, received numerous improvements, including new teams and goals features, as well as a redesign and new logo. Almost weekly, we do a one-day team “agile swarm” on Shoutbase where we knock out some new feature or smash some bugs.
We shipped production code to client projects in at least 6 languages - backend services in Go, Java, Python, and Ruby, frontends in JavaScript, and now TypeScript.
TypeScript is the latest addition to our stack and a huge boon to productivity. It eliminates whole classes of errors at run-time, by introducing compile-time type checking to JavaScript. It even lets us enforce immutable data structures and functional style - via TSLint. This is essential, and we wouldn’t start a new web front end or mobile project without it.
A couple years ago we made a bet on React and Redux, as our frameworks of choice for front end development, and this has really paid off. This pair is currently the most popular choice in the community, for good reason. This has yielded many libraries and frameworks we get to re-use and avoid reinventing the wheel.
React Native has been an excellent path to native mobile app development - front end web development skills directly translate, and we’ve now shipped multiple apps on iOS and Android. Sharing the same business logic code as your web app is a huge benefit, that most alternatives just don’t have. In fact we have developed an in-house framework for doing just that, factoring out common code into a separate package that gets consumed by both web and mobile versions of the same app.
Speaking of bets, another was Golang, which has also turned out quite well! Go’s popularity keeps surging, it’s performance keeps improving, and the great tooling lets us easily collaborate and ship high performance yet lightweight backend services.
As we continue to build on these same stacks with each new project, we refine our approaches and solve common problems. Building many small to mid-size client projects allows us to step back each time, re evaluate our choices and tweak things again when there is little to no code, which you just can’t do as easily in longer running legacy code bases. We’re slowly extracting these common patterns and solutions into frameworks which keep speeding up our productivity.
Continuous deployment and delivery is a huge force multiplier, and we keep refining our approach. This is generally the first step when we start a new project. It’s much easier to get working by first continuously deploying the initial “hello world” of the project and iterating the process as the project grows, instead of trying to bolt it on later. It’s super gratifying for us and for clients to see software come to life as we build it, not to mention the faster feedback loop that allows us to course correct sooner rather than later.
We experimented with Clojure, GraphQL, and a couple machine learning techniques this year, and I imagine we will probably start using one or more of these in a production project next year.
Overall, we’ve come a long way. Goodbye 2017! Happy new year!