ds
about
×about
hi, i’m dana
i started out as a web developer 17 years ago with just a design degree and a bit of css and flash knowledge and now i’m a senior engineer with 14 years ruby & rails experience, five gems, and a ruby tattoo. and i love it.
my hobby seems to have become writing linters, i have a source code spell checker that i named spellr, and a tool for finding unused ruby methods etc called leftovers (it has its own unofficial official emoji 🥡)
i really enjoy working on developer tools, whether it’s optimising buildkite pipelines to make them robust and fast, nicely annotating a coverage report, building a visual regression testing system or making a significant dent in more than one monolith’s .rubocop_todo.yml
💖
employment
×ackama
solutions architect remote/hybrid (wellington, nz)ackama is an agile bespoke web development agency
responsibilities:
- fixing bugs, building new features, and tech leading projects with mainly small-to-medium sized rails apps, which involved working with rails, rspec, postgres, docker, typescript, javascript, hotwired, react, sass, go
- moving a large new zealand media organisation’s audio library and pipeline to cloudinary
- adding 2fa and other needed features to an inherited rails/react single-page app
- conceiving of, prototyping, and tech leading the building out of an internal candidate/employee evaluation tool
- fixing a couple issues in osv-scanner in go
- swapped out a rails app’s cms from refinery to a headless drupal install, and implemented a design uplift
- performing other small fixes and features and maintenance on a number of other client apps
- meeting with clients to understand requirements and give demos
- tech leading within one of the three rails project teams at ackama
- preparing well-described jira tickets of upcoming work
- initiating and iterating on a retro practice within the team
- pairing over video calls and occasionally in person with developers of all experience levels
- reviewing design mock-ups at various stages and pairing with designers to find buildable solutions
- reviewing requirements and providing guidance and estimates to the Business Development team
- initially leading a Rails Guild - a place for discussions about the way ackama does rails, and a place for learning together - we’ve been reading through some code, so far we’ve done Set and Timecop and Pundit
- being part of other guild discussions: Front End guild, JS Guild, Architect team
- encouraging improvements to Investment Time engagement within the company - fridays that are devoted to self or ackama development work rather than client work
- encouraging a show & tell practice
- a more engaging method of people giving their plan for investment time
- making it more fun
- coaching/mentoring developers who are new to ruby & rails
- interviewing technical candidates as part of recruitment panels
- improving the technical interview process as part of a working group
- being an employee representative to the leadership team
envato
senior software engineer remote (wellington, nz)envato operates themeforest.net, codecanyon.net, audiojungle.net, videohive.net, photodune.net, graphicriver.net, and 3docean.net, known together as envato market, as well as many other products including elements.envato.com and milkshake.app.
responsibilities:
- fixing bugs and building new features for envato market apps, which involves working with rails, rspec, mysql, docker, typescript, javascript, coffeescript, hotwired, cypress, sass
- writing and running and reviewing many A/B tests on the market sites across multiple rails apps, within a team devoted to conversion optimisation
- improving the market experiment process and tooling, both making changes directly and also designing a solution that another team subsequently built with my guidance
- decommissioning a mostly but not entirely vestigial system that was part of the search pipeline, porting some node code to ruby and confirming its behaviour with the scientist gem
- improving the speed and robustness of cypress tests and their setup in buildkite within a hack-week team (we reduced one pipeline from averaging 10 minutes per build to usually less than 4 minutes)
- keeping dependencies up to date and improving the process for doing so, including migrating from webpacker to jsbundling-rails
- making a reasonable dent in a very long
.rubocop_todo.ymlfile - reviewing all kinds of pull requests from other engineers in the market team at envato
- pairing with engineers over video calls to fix all kinds of issues
- planning and preparing upcoming work with everything from quick video calls to writing RFCs together
- interviewing technical candidates as part of recruitment panels
- mentoring newer engineers
marketplacer
intermediate developer/senior developer/team lead melbourne & remotemarketplacer operates a white-label ecommerce market platform, used by sites such as bikeexchange
responsibilities:
- fixing bugs with and building new features for marketplacer’s rails apps, which involved working with rspec, mysql, elasticsearch, docker, javascript, flow, typescript, sass, react, and graphql
- planning and building extensive new features within project teams, including an event ticketing system, a promotional pricing system, a currency conversion system, and etc
- improving the speed and robustness of rspec tests and the buildkite pipelines with docker and bash
- mentoring developers - two of the people who came to marketplacer as junior developers were leading teams by the time i left
- creating a visual regression system with rspec, docker, chrome, imagemagick, and buildkite
- adding coverage reporting to the buildkite pipeline, in a way that made it easy to ratchet improvements
- extending various marketplacer APIs, and integrating with external APIs
- adding buildkite checks to catch various classes of issues, for example when i had the horrifying discovery that some specs weren’t running because they weren’t named
*_spec.rb - improving performance of many reports and interfaces with sql query optimisations
- keeping the decade old app up to date with rails and other dependencies
- making the whole app pass rubocop and continue to pass rubocop as it updated
- adding spellr to most of the pipelines
- making upstream fixes to various open-source libraries and tools including rails and rubocop
- leading a team focused on reducing tech debt and improving the developer experience
- generating a backlog of tech debt issues and potential solutions
- ensuring the team had things to work on and were unstuck
- pairing when team members were stuck
- advocating for the necessity of the team and its focus
- leading a team focused on improving and addressing issues with orders and carts
- working on a major refactoring project to separate carts from completed orders
- fixing issues with integrations with the range of payment providers marketplacer supports
- prioritising and reviewing the backlog of issues
- ensuring the team had things to work on and were unstuck
- pairing when team members were stuck
- leading a team focused on fixing BAU issues (it was called bauhaus 🏭, possibly my most inspired naming idea)
- ensuring bugs reported by customers had enough information to be worked on
- triaging exceptions as they came in from rollbar, often with the whole team
- improving the consistency of flaky tests
- prioritising and reviewing the backlog of issues
- ensuring the team had things to work on and were unstuck
- pairing when team members were stuck
- thoroughly reviewing pull requests from other developers at marketplacer (for a while we had stats for pr comments, and i was significantly ahead of second place, and people consistently found my comments helpful)
- giving various knowledge sharing talks (such as one on blocks vs procs)
- helping developers resolve their tangled git situations
- answering questions about pretty much everything about the platform as i’d been there so long - one of my coworkers would insist i ‘know too much’ as ominously as possible
- documenting my answers to those questions and others, my favourite such document was called “unwritten rules”
- interviewing technical candidates as part of recruitment panels
3months
web developer wellington, nz3months was an agile web development agency with a focus on bespoke web applications, and in spite of their name i was there for over 4 years
responsibilities:
- building new rails sites for the wide range of agency clients within project teams, which involved working with rspec, cucumber, postgres, mysql, javascript, jquery, coffeescript, and lots of css
- building or updating the occasional non-rails site
- working with clients in an agile development process to determine what we were building
- answering all the css and js questions from coworkers
- maintaining and supporting the various “completed” projects
- designing UIs for some non-public-facing client projects
eTheory
web all rounder - part time and full time palmerston north, nzeTheory was a web development agency with mostly small to medium businesses as clients, they took over inspireNet’s web agency clients and some staff
responsibilities:
- implementing designs from photoshop into html, css, javascript, jquery, and flash with their home-grown php-based cms
- designing and building banners in flash
inspired web solutions & inspire net web services
junior web designer - part time palmerston north, nzinspireNet is an isp that had a small web agency attached
responsibilities:
- implementing designs from photoshop into html, css, javascript, and flash with their home-grown php-based cms
education
×bachelor of applied visual imaging &
advanced diploma of design and multimedia, graphic design
palmerston north, nz
this degree was a broad overview of all things design - i did everything from illustrating comic book panels to etching newly designed logos onto wine glasses to crafting ui designs in flash
while i haven’t exactly ended up with a graphic design career, i’m right next door, and i’m very pleased with the path i’ve taken. i still find the things i learned there useful - i understand & care about the decisions behind the designs i implement, and i’ll carefully consider the ui of even the command line tools that i build
i have a github! @robotdana
gems
i’ve published some gems:
- spellr: it spell checks your source code
- leftovers: it finds defined but unused ruby methods and constants and etc
- fast_ignore: it parses
.gitignorefiles and returns unignored paths - tty_string: it renders a string with ansi codes like a terminal would
- git_ls: it parses the binary
.git/indexfile and lists the files git knows about - validate_html: it ensures HTML is valid (according to nokogiri) as it leaves a rails app
PRs
i’ve written a lot of PRs, here are some i’m proud of for various reasons:
- ecr-buildkite-plugin: allow retrying the docker login
- rubyfmt: fix percent literals, twice
- rails: allow preloading through polymorphic associations, add
compact_blank, and a one-line fix toActiveRecord::Relation.or - rubocop: two improvements to Rails/SaveBang
- ruby: update the
BigDecimal#inspectdocumentation - adyen: remove modifications to core objects