I've been working as a web developer and designer for the past seven years. In that time, I've been lucky enough to work up and down the stack with some really amazing people. Learning from, and with, colleagues and clients is one of the many reasons I love doing what I do.
I've worked in range of positions, as an individual-contributor (design and development), as a technical leader and as a project organiser.
I'm curious and try to keep an open mind. Changing careers from music education, to design, to software engineering has made me comfortable with being a beginner.
Front end web development
I've done a few types of front end development, from WordPress themes to universal React applications.
I've been writing HTML since 1996 when I was putting together dinky Geocities sites. I always have the generated HTML in mind when using tools that abstract over it, this includes everything from Markdown to React. I think this is helpful. The browser can help you out a lot if you give it the right hints, from simple stuff like viewport meta through to keeping custom form controls usable for keyboard and screen-reader users.
I started to use React extensively in early 2015. We chose to replace Outfit's Angular 1 prototype with a Rails app decorated with React components. We even achieved progressive enhancement by using a pretty nifty gem to render components on the server side as part of Rails' usual view rendering process. I thought that it was all pretty amazing.
I got write a lot of code using React at everydayhero. All new user interfaces were written in React, and we had our own component libraries and tooling to make building universal apps and static sites a bit easier.
Modern CSS is amazing. For example, the tools we have now for managing layout work wonderfully and the consistency across browsers is better than ever. That being said name spacing is still hard. I've worked with a few different convention-based solutions like Block Element Modifier and Atomic CSS. I've also worked with tools that try to automate scoping like CSS Modules and CSS in JS. Another tricky bit is code reuse. I've used SASS to get variables and mix-ins, I've used PostCSS-cssnext to get something quite like custom properties in browsers that didn't yet support them, CSS in JS also works really well here.
Fullish-stack web development
I've been responsible for the deployment and operation of production applications and services. This includes instrumenting them and then using that instrumentation to diagnose any issues they may have. It has also included developing or choosing and implementing tools and processes to help my colleagues ship faster and safer.
Application frameworks and ecosystems
At both NetEngine and everydayhero I got to kick off brand-new Ruby on Rails apps and maintain well-used older ones. A Rails application that has stuck close to convention can be a very pleasant thing to work on.
I've deployed a few web services in Node.js. These have been of a few different flavours: view-rendering, queue-working, http-api-ing and combinations thereof. It's good to have an ecosystem full of packages which all compose nicely.
One of the tasks undertaken by my team at Genie Solutions was to replace a couple of services written in Go. Being that we had no-one with Go experience on the team I took it on myself to learn as much as I needed to make the changes we needed during that transition.
I've written a lot of Haskell over the past few years, despite not using it professionally. I co-facilitated regular Friday afternoon learning sessions at Stacktrace. We worked through Brent Yorgey's CIS 194 lecture series and QFPL's three day functional programming workshop. Recently, I implemented Thinkster's RealWorld API specification in Haskell as a fun learning exercise.
My real job at Stacktrace was to work on an event-registration system. This was implemented as ASP.NET app, written in C# and deployed on Azure infrastructure.
The teams and technologies I've worked with while deploying these apps has changed a lot over time. Initially we shipped using Capistrano straight onto dedicated, lovingly tended, EC2 instances running Ubuntu. Later we built docker images, pushed them to a registry and then pulled them onto CoreOS servers provisioned by Ansible. Later still we ran Consul, Vault and Nomad clusters on Centos servers all provisioned by Terraform and Salt. More recently we've been migrating to AWS Lambda and Fargate services provisioned using CloudFormation.
I've used a range of monitoring and observability tools such as Datadog, Librato, Amazon's CloudWatch and the ELK stack (Elasticsearch, Logstash, and Kibana). I love logs (structured), believing that it's nearly impossible to have too many.
I got my start in web development through being hired as a designer for a software company. I have designed user interfaces, visual identities and promotional material. I really love great typography and good, sound structure. Should you like to see more I have a portfolio you can check out.
At the time of my starting at Genie Solutions it had just gone through a period of rapid growth. They were looking to make many changes simultaneously: the nature of the business, the way they worked, and the tools they used to build and deploy software.
As a senior developer I saw it as my responsibility to act as an intermediary between leadership and engineers, both on my team and others. I would try to advocate for solutions to pain-points raised by engineers. I would try to establish patterns and practices more in line with those wanted by the engineering leadership team.
Working at Stacktrace allowed me to work on a team that was embedded in a very large organisation; hundreds of developers trying to work together. This has been an invaluable lesson in some of the challenges that can present when large, distributed organisations have to move collectively in one direction.
At everydayhero, I learned how to run and maintain web applications at scale with a large and experienced team. Together, we kept the main customer facing application running and improving, built a high-throughput behavioural email system, and built useful developer tooling.
At Outfit, I designed and led the development of a branded asset producing application in partnership with Red Hat's Asia Pacific brand manager, Andy Fitzsimon.
This was my first leadership role. The team started with only me and grew to include six junior and senior engineers. The team was great, so I spent as much time as possible ensuring we had a shared understanding of upcoming work and how it related to the problems we were solving.
At NetEngine I got to work with many experienced software engineers on a variety of problems, using a variety of technologies and approaches. The people I worked with here were real mentors, many of them very passionate about their craft and eager to share the knowledge they'd gained.
As a web focused software consultancy we worked on lots of different problems for different clients. We helped certification businesses build workflow management tools, we helped start-ups build impact placement platforms, and we helped solar inverter manufacturers build customer dashboards.
At Decomplexity I began to learn about UI Design and front end web development.
I was selected as a member of the branding team for the 2012 Graduate Exhibition, Nonparallel.
I was offered a position working full-time as a designer in my final year. As such the Bachelor's degree I was studying for remains incomplete.
For two years I got to sit in the Guitar chair for the Conservatorium's premier big band, The Con Artists.