I'm available for hire as a consultant in the following areas, explained in detail down the page:
Interim CTO or Technical Product Manager
Full Stack Software Engineer (Web and Mobile)
Setting Up and Managing Software Development Teams
Graphical Tools and Libraries with C++ and OpenGL
Interesting Fringe Stuff
Drop me an email if you're interested in working with me!
I am most useful when I'm in the role of Interim CTO or Technical Product Manager, where I am building a new product from scratch in an unexplored or growing market. This work generally entails a combination of following jobs:
Deciding what product to build, based on a hypothesis or narrative from the founding team.
Deciding how to build the product. This involves deciding what programming languages to use, determining initial infrastructure requirements, researching APIs and open source libraries, and so forth.
Designing and developing an initial software prototype. Depending on the budget, I may do this work myself, or hire a team to do it.
Shipping the product without being crippled by overwhelming technical debt.
Processing feedback from customers, and then building new features based on this feedback.
Figuring out post-release solutions for maintenance, testing, outage management, monitoring, security, analytics, and so forth.
I can do full stack software engineering, as long as I am supported by a solid product manager or product-focused CEO. Here are some of the technologies I can work with to build a web application:
Postgres, Redis, MongoDB.
Various build tools like webpack, gulp, jenkins etc.
AWS EC2, S3, Cloudfront, Lambda, etc.
In addition to this, I have a lot of experience in building apps for mobile phones. From 2008 to 2014 I more or less worked exclusively on apps for iOS and Android. As of 2018, I'm a lot more comfortable on iOS than Android.
I've also been developing in C++ for the last decade. Many of these projects are covered on the projects page.
I've managed small teams of highly talented engineering professionals, primarily in Silicon Valley and New Zealand. In all cases, the teams have been a mix of employees, contractors, and vendors, both local and remote.
Most recently at iCracked, I lead the team on the Ocean project at iCracked's HQ in Redwood City, California. The project was very complex and had both hardware and software components, and we had to hire accordingly. I lead the process of hiring local and remote team members and conducted multiple job interviews. I helped setup a partnership with a local hardware engineering company to perform electical engineering work. I also managed relationships with external hardware vendors and contractors, who made up the majority of people on the project. I faciliated regular meetings for all stakeholders in the project. Finally, I managed the development of all the software for the project, with a small team of - at most - five engineers at iCracked, and two remote contractors.
(People are hard to retain in Silicon Valley, but I am most proud of the fact that core team members who worked on Ocean went on to even greater things at companies like Twilio and Uber)
Prior to this I managed a remote team of software engineers, artists, and testers for three years at PlayCoMo. Team members were located all over the world: New Zealand, Australia, Indonesia, Canada and so on. The team worked on a large number of games for iOS and Android, shipping multiple titles and getting millions of downloads for each game. We punched above our weight by shipping more games than was reasonable for our small team (never growing beyond about 20, by my estimation). We were never in "crunch" mode for any of the projects, and I only remember one self-inflicted all-nighter the entire time I was there.
For much of my career I've produced graphical tools and apps. Some examples:
With so much uncertainty about whether a mobile game will succeed or not, it is probably best to experiment with a tool like Unity first. However, Unity is a broad brush and has many drawbacks. Many mobile game companies prefer to use their own engine because it allows them to completely customise their development process.
I've developer three mobile phone game engines. My first engine, known as HDK v1, was initially written to support the game Smashed and has been open sourced here. I worked on a second version of this engine that I need to clean up and release on github. I later worked on the CDK game engine for three years, using it in multiple games for both iOS and Android, with millions of downloads.
I've dabbled with the following technologies. I haven't shipped anything substantial with these technologies (yet), but I know enough to be dangerous:
Machine learning, particularly GANs.
Simulations in virtual environments, particularly when coupled with ML.
Getting the most out of AWS Lambda (see https://github.com/cdave1/serverless-helloworld).
Crypto currency stuff: ERC721 contracts (e.g. cryptokitties), and Stellar anchors.
I charge by the month, and a typical contract is for 1 month of work. I prefer contracts that go for longer than that. For contracts that are shorter than 1 month, we'll divide my monthly rate by the number of days you want, and add a small amount of overhead.
I require a small deposit - usually no more than a third of the total - before beginning work.
I normally work remotely from Wellington, New Zealand. I primarily work with companies in the United States. I can travel to your office for meetings on longer term projects.
Please drop me an email if you want to work with me and tell me where you see me fitting into your project. From there, the next step is likely a phone call!