I care a lot about being a genuinely good person and treating people right. I strive to be kind, generous and ethical in everything I do. Being humble and selfless is seriously important to me. I want to be the kind of person who's easy and enriching to work with, the kind of guy that you're really grateful to have on your team.
I'm passionate about doing work that makes a positive difference in the world. It doesn't need to be as glamorous as curing cancer or something like that, but it does need to be genuinely valuable. It needs to solve real problems and make people's lives better. Too many businesses, teams, etc. really only exist to make money; I think that's a shame, and I think we can do better.
I'm genuinely committed to the constant pursuit of mastering my field of work. I've chosen software development as my career, and I intend to become the best I possibly can at it. I don't want to be a halfway decent developer; I want to be a great one. I'm always working to learn more about what I do and looking for ways to improve. I'm definitely not one of the best developers out there and likely never will be, but I'm on the path to mastery and I intend to be on it for a very long time.
I focus on writing code that works correctly, is reliable and is easy to maintain. I aim to build products that meet needs and are easy and enjoyable to use. I take the time to truly understand problems so that I can create well-designed, quality solutions. Well-made software can do amazing things. Poorly made software can be a real pain. I work hard to consistently produce the well-made kind. I put a lot of effort into keeping my schedule, health and other factors in balance so that I can stay fresh and do my best work.
Ultimately, I choose to be a developer because I love doing it! I love writing code; I love creating beautiful, useful software. Building things with nothing more than a laptop and some know-how is a blast. I find joy in it, and I want the work I do to create joy in the lives of others as well.
I fell in love with the Ruby language pretty quickly. I'm a huge fan of the elegance of the syntax and it's focus on programmer happiness. Writing Ruby feels natural and easy while still providing powerful tools and constructs. Most of the code I've written so far in my career has been Ruby.
I think Rails is a fantastic framework for web development. I really appreciate the focus on convention over configuration and sensible defaults. It also pursues Ruby's goals of emphasizing programmer happiness and enabling beautiful code. I'm impressed by how productive I can be when I work with Rails. Even having been around as long as it has, I'm still excited by the progress and additions being made to the framework.
I really enjoy building REST APIs. Being a back-end guy, I really like when I get to focus on just the data and don't have to worry too much about visuals. A quality API goes beyond just returning the right data. It includes things like semantically correct status codes, helpful error messages, predictable URL structures and secure, user-friendly authentication. Whether the API is intended to be consumed by an external application or by a companion front-end application or both, I really enjoy working with REST APIs. (As long as I can use JSON and not XML. )
I'm a big believer in automated testing. Well tested code is easier to work with, easier to depend on and just makes for better software. I don't typically practice true TDD, but I write tests frequently as I write implementation code. I don't think of writing tests as only an investment in the future (though it certainly is that); I think writing tests improves the quality of your code and your software immediately, and there aren't very many cases where you wouldn't want to write tests.
I really enjoy managing source code with Git. I think there's a lot of value in not only putting your code under source control, but in taking the time to do it well. I think a well-crafted Git history in a project can be a really valuable resource. It can be helpful to your team (or you) in the future and also improve the quality of your code as you're committing it. It's common for me to write lengthy commit messages and take the time to revise my Git history as I'm working on a project.
2019, Personal Project (WIP)
Temperature Alert is a small API only application that sends SMS notifications to users when the temperature in their area hits the user's configured alert thresholds.
For example, I keep my windows open at night during the summer to let in the cool night air, and I use Temperature Alert to remind me to close the windows once it gets hot enough outside.
The back-end logic for configuring alerts and delivering notifications is complete, but the API is not.
I'm building the application with Rails 6 and testing it with RSpec. SMS notifications are delivered via AWS SNS.
Primary Technologies: Rails 6, AWS SNS, REST API, RSpec
2019, Journal Technologies
Cloud Accounting is an API only application that serves as a central storage location for all payment transactions from other applications in Journal Technologies' cloud suite.
Prior to building Cloud Accounting, each individual application stored transaction information. By instead storing all transactions in a central place, we did complicate the implementation for the other applications in some ways because they now had an additional dependency to interact with, but we improved the security of the financial information and we made life easier for the people in accounting because they only had to go to one place when they needed any financial data.
I was primarily responsible for building the application. I used Rails to build the REST API, and I used rspec_api_documentation to document it. I also built an admin interface using thoughtbot Administrate. The API was secured using token based authentication and the admin interface was secured with Okta single sign-on.
Primary Technologies: Rails 5, REST API, RSpec
2018, Journal Technologies
Case Notifications is an application that consumes event data from courts (a hearing was scheduled, a document was filed, etc.) and then summarizes and distributes that event data to subscribers through SMS and email notifications.
I built a RESTful back-end using Rails which integrated with a React front-end. I also built a companion AWS Lambda function which notified the Case Notifications application when a new data file had been uploaded to AWS S3. I also built an admin interface using thoughtbot Administrate. The user facing application was secured with Auth0, and the admin interface was secured with Okta single sign-on.
One of the interesting parts of this project for me was the performance optimization required. Some of the courts we expected to integrate with could have tens of thousands of events a day. I did work that optimized processing and importing these large data files which improved the import time for 10,000 events from about 5 minutes to about 4 seconds.
Primary Technologies: Rails 5, AWS Lambda, REST API, RSpec
2018, Journal Technologies
ePayIt is a payment system designed to integrate with courts. It allows users to pay fines, pay fees, make payments on payment plans and perform other financial transactions associated with the court.
I primarily did back-end Rails development, but I also did a little front-end development and some internationalization. I also spent a lot of time improving the test coverage for the application.
Primary Technologies: Rails 5, RSpec
2018, Journal Technologies
DailyJournal.com is the official website for the Daily Journal news corporation. They provide legal news for law professionals in California.
I spent my time fixing bugs and adding small features. I also found and fixed a number of security vulnerabilities. Another teammate and I dramatically improved the test coverage of the application.
Primary Technologies: Rails 4, HTML, RSpec
This application was built for the MIT Sloan School of Management. It syncs student and course data from an existing system to Sloan's Canvas LMS instance. Syncing primarily happens via scheduled jobs but can also be done through one-off jobs.
The application makes extensive use of asynchronous background jobs for both the one-off and scheduled sync tasks.
I did full-stack development on the project. Myself and another team member built a Rails back-end and a React, Redux front-end.
The front-end is a dashboard that allows administrators to see which jobs are running, manage scheduled jobs and allows them to execute one-off jobs.
Primary Technologies: Rails 5, React, Redux, HTML, CSS, RSpec, Jest
2017, Atomic Jolt
Konbata is a Ruby gem which converts SCORM packages and zipped PDFs into Canvas LMS courses. It can generate an .imscc file (a standard learning management system file type) and also upload that .imscc to create a course in a Canvas instance. Konbata was designed to process interactive and non-interactive SCORM packages along with zip archives containing PDF files.
I wrote the large majority of the code for the gem along with creating the documentation.
Primary Technologies: Ruby, RSpec
2017, Atomic Jolt
At the time, Senkyoshi was a superior alternative to the official Canvas converter from Instructure offering better conversion of Blackboard content. Perhaps it still is.
My contributions to this project were limited. I fixed bugs, added small additional features and cleaned up the documentation a bit.
Primary Technologies: Ruby, RSpec
I wouldn’t describe myself as a full-stack developer. I’ve done quite a bit of front-end development in the past and I can still do it if I need to, but it’s not my current area of expertise. I prefer back-end development and that’s what I’ve focused on for the last little while in my career. I enjoy back-end work more and I feel like I have more natural aptitude and value to contribute in that area.
I’m conscious of basic performance requirements and pay attention to the performance of the code I write, but there haven’t been too many projects I’ve worked on thus far where performance was a high priority. I’m not the kind of guy who can eek out every drop of performance from an application. (If I was I probably wouldn’t be using Rails, right? I kid, I kid. Rails is great.)
I don’t have a traditional computer science background and heavy computer science topics have never been terribly interesting to me. If something requires lots of math, sophisticated algorithms or other such things, I don't have a lot of supporting skills to offer.
I've been married to my wonderful wife since 2013. We have 2 delightful (and sometimes taxing) children with a third on the way. Our son Aiden is 4 years old, and our daughter Teshia is 2. Our baby is due at the end of 2019.
I'm a devout Christian, and I'm actively involved in my church.
Some of my hobbies include biking, reading and ant keeping.