I'm a technical consultant who works to help companies launch products, make more sales, and reduce operation costs. I've been shipping production code since 2008, my technical strength is unpacking and simplifying complicated systems.
Strikingly / SXL.cn
Tools used: AWS: EC2/ECS/Route53/S3/SQS/SNS/KMS, Docker/Kubernetes, NGINX/Lua, Ruby/Rails, Node.js, React
Responsibilities: Architecture Design, Infrastructure Setup, Building Services, Developer Ergonomics, Hiring, Mentoring
Strikingly is a website builder that allows people to build portfolios, blogs, ecommerce websites, and personal websites easily without ever writing code. Because Strikingly powers millions of websites across the world, every problem it solves has to be systematized to scale.
Some of the things I've been responsible for during my time here:
- Built and released a highly user-requested feature: automatically generate and provide HTTPS for user sites. This improved SEO and security.
- Reduced user-site server costs by 35% and added high-availability by building a low-latency service that caches responses while serving content to users.
- Improved SEO and page-speed score for millions of user sites by deploying a Lambda function that generates and inlines critical CSS for a user site.
- Designed, deployed, and maintained our CDN infrastructure in Japan, USA, and Europe with AWS ECS. This allowed our user sites to load twice as fast for our international users.
- Extended and refactored our internal user payment system. This allowed us offer more products in different package combinations.
- Interviewed backend candidates, helped on-board new developers, added on-boarding material, and simplified the development setup required by containzerizing dependencies. I also contributed to the hiring initiative by presenting in RubyConf China 2017 and giving speeches for local meetups.
- Improved code contribution practices by writing guides, enforced best practices for having code reviewed, and mentoring developers to improve their proposal submissions.
Responsibilities: Coordinate product development with fully remote team, manage junior developers, design and setup infrastructure, backend/frontend product development, setting up data metrics
NomadPass is a platform designed that allows digital nomads to find high quality locations and meet fellow traveling professionals. For businesses, it provides a service that organizes retreats and business-ready locations to offer remote work for their employees. As a social community with users and customers all around the world, the development involves a lot of geographic-based features and dev-ops setup for low latency wherever the users may be.
My role at Nomadpass was as a senior developer in a fully remote position. I mainly helped the project stakeholders prioritize against technical realities, mentored less experience developers, reviewed code, handled architecture design, and more importantly, built the product from
rails new NomadPass.
Mojotech is an agency that specializes in web and mobile development. They have an exceptional team of engineers that take a disciplined approach to software engineering (which includes scientists from NASA and the U.S. Navy). When I joined Mojotech, my goal was to gain a broader experience by working with many startups solving different technical problems.
While I was there, I helped transition developers to Spacemacs, taught programming workflows (and ways to optimize them using elisp), went to conferences, and contributed to internal projects in Clojure. I worked on 3 client projects during my time there:
Responsibilities: Architecture Design, Product Documentation, Networking Analysis, Prototyping Solutions (Clojure)
Braingate allows tetraplegic patients to control computers and robotic arms with their thoughts. My responsibility was pairing with Mojotech's CTO to come up with an architecture for how components communicated that was resillient, simple to program experiments on, fascilitated diagnostics, and allowed the patient to be mobile.
Some of the design challenges of the architecture involved making trade-offs in the component protocols, high bandwidth transfer of sensitive data between components, accounting for energy-usage constrains, allowing the system to be troubleshooted by administrators, and allowing the existing researched math models to be used.
Responsibilities: Architecture, Technical Risk Assesment, Priority Management
Collect Now connects specialized lawyers with businesses who need legal help claiming invoices. My responsibility was to lead the technical aspects of the project discovery. This involved assessing areas of technical risk, prototyping, estimating, clarifying, suggesting trade-offs for solutions that would be faster to implement, and settling on a technology stack according to their needs.
Stack: Ruby/Rails, PostgreSQL, React/Redux
Countr is an online marketplace where people shop, accrue a score for buying and sharing, and use that score to get discounts. The items listed were targetted toward a high-end audience, so a requirement when building the website was a high degree of front-end polish. The website is a single page application (configured with Webpack) using React to render, Redux to handle state, Mocha to test examples, and jsverify to test properties.
Stack: Ruby/Rails, Go, React/Flux, MySQL, Redis, AWS: S3/RDS/SQS/EC2
My responsibility was identifying the most critical internal issues and building the tools to optimize those processes. I created an improved administration backend that customer service agents used to manage accounts and address campaign issues. I also created a fulfillment backend that allowed us to scale with dozens of printers across the US, provided flexibility for bulk or one-off orders, showed late jobs at a glance so the internal could triage, and provided metrics for business to analyze the performance of each fulfillment partner. Each of these panels were designed by talking with the people who would use it, identifying priorities, and iterating based on requirements as the company grew.
The development team size was over 20 developers. Some of the important lessons I learned through working with many developers, large datasets, and high traffic throughput:
- Proficiency with Git
- Setting up data replication and sharding in Rails with Octopus
- Micro optimizing SQL queries
- Principles of maintaining and architecting large code bases. Additionally, experience with breaking a monolithic application into microservices
- Troubleshooting and techniques for handling large queue sets in Redis/Sidekiq
- Tracking memory footprint in Ruby code to handle issues like swapping and memory leaks
- Aligning deployment of separate applications and schema changes to prevent issues like the two generals problem
- Techniques for caching pages with dynamic data. (e.g: setting up http level caching on campaign pages and loading ajax to check for auth status)
Mentor @ Firehose project
Responsibilities: Mentoring Junior Developers, Code Reviewing
The Firehose project is a paid (~$8,500) educational program that helps students go from beginner to employable developers in under a year. Students need mentors. That's where I come in. Students would come with questions about technical details, career advice, and architectual suggestions. I would check up on the progress of assigned tasks and helping them through areas they were blocked on.
Consulting / Mentorship / Speaking
Aside from some local Hackathons, I served as a mentor at the Brown University Hackathon: Hack@Brown. My responsibilities were to find projects that were stuck on a technical problem, help them through it, then find another technical problem. Rinse and repeat for 24 consecutive hours.
I also did some speeches at local Ruby meetups in Providence, and was invited to present at the 2017 Ruby Conf in China.
In between mentoring and speaking, I also take on short-term consulting work to help startups solve urgent scaling or tech-debt problems.
Responsibilities: Lead product development for backend and frontend, Coordinate with Stakeholders
Stack: PHP, MySQL, Redis, Apache, Linux
"Accelerate Product" was a tool designed by the financial group ACG as a flagship product to supplement their financial consulting business. The platform provided a service to record and broadcast high-quality video interviews that allowed a marketplace of investors and hedge funds to accelerate the typical due-diligence process. This allowed investors to vet a broader range of investment options faster, and allowed entrepreneurs seeking investment to have a wider reach. The platform went offline in 2014.
Stack: Ruby/EventMachine, Objective-C, PHP, MySQL
Mino Monsters is a role playing game where you collect and train a team of monsters to battle with other players. The game moved from web-based, to Facebook game, to an iPhone app and hosted >1.5 million players. I co-founded it with my friend Josh, and together we became the youngest y-combinator founders.
The responsibilities of a founder vary a lot, but my focuses as the CTO were:
- Interview technical candidates
- Develop game features
- Handle high traffic growth
The biggest challenges were re-architecting the server side to be compatible with each platform change, and handling the player traffic at our scale of growth. This became a crash course in engineering management, startup strategy, metric analysis, and designing highly scalable systems (e.g: understanding threads/processes/load-balancers)
Stack: PHP/CodeIgniter, Node.js/Socket.io, MySQL, Memcached
Crysandrea was a forum with customizable avatars, virtual currency, and mini-games. It had over 40k users, brought in $xx,xxx/year and a community of players who enjoyed signing in day after day. I led the development, design, and managed the artwork/event coordination. All while in high school.
Eventually, the project lost its steam, and I decided to open source it. It was the first project that gave me some capital and technical confidence in dealing with production websites. Some of the big lessons for me were:
- Optimizing SQL queries with
EXPLAINand identifying good candidates for indexes based on cardinality
- Moving logic into queries so that I didn't have to load every object into memory.
- Strategies for transfering/deploying with minimal downtime, DNS management
- Developing complex game interfaces with lots of dynamic data.
- Tracking down memory leaks in Socket.io (using
- Managing my work and organizing priorities.