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. We also built some cool stuff for virtual events.
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.
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.
The software as a service business The Lookout Way was formed out of the software-supported aged-care business Five Good Friends in July 2021.
In September 2022 I added an Engineering Enablement specialization to my responsibilities. This entails supporting the other engineers on the team. This can mean facilitating the sharing of solutions, promoting and encoding practices we'd like to adopt, as well as making time to provide information and advice.
Five Good Friends used Basecamp's Shape Up project management methodology. Every eight weeks we split up into small, specially formed teams of about three or four people. These teams are tasked with solving problems and, importantly, trusted to figure how best to solve them. The time needed to learn about the problem is built in. Often that can even result in refocusing the problem itself. The whole process is very collaborative and dynamic, I love it.
Another enjoyable feature of Five Good Friends engineering culture is a focus on asynchronous communication. We write medium length almost blog posts to each other about problems we're trying to figure out, as well as cool and interesting things we've found. We pour a lot of information into GitHub pull request descriptions as well as our individual commit messages. I've been working fully remote now for over a year and it's been working wonderfully.
Finally, further to the idea of "trust", we're really trusted to apply our expertise. In my first two "cycles" (eight week blocks of work on a particular problem) I was asked to make some recommendations regarding front-end architecture. I was given scope to really prove out a solution I wasn't 100% sure of. I'd not tried it before, but I thought it, or something like it, would be suitable for Five Good Friends specifically. We're now in the process of rolling out that architecture (ViewComponent and TailwindCSS, plus some utilities to tie them together) across the whole codebase and so far everyone seems really happy with it.
As part of adopting ViewComponent we were able to upstream some performance improvements.
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.