What am I looking for?
I’m looking for a full-time position as a software engineer or developer advocate, but am open to contract work in the near-term.
(Through Authentic Engine, I also consult on open source governance, participation, and sustainability issues.)
I prefer to work remotely or in Portland, Oregon. Relocation is not something my family and I are considering at this time.
I would like to work for a tech-focused company of at least 20 people, preferably headquartered in Oregon, California, or Washington state (where labor laws aren’t entirely terrible). The type of product I work on isn’t super important to me, although it would be fantastic to join an organization who participated and supported open source in a meaningful way.
Download a pdf version of my resume.
Who am I? I am…
- An experienced, well-rounded software engineer with a focus on web applications and developer tools.
- An experienced open source community leader, maintainer, and contributor.
- Adept at learning new languages and technologies as needed in order to get the job done.
- Adept at triaging and debugging issues.
- Informed by a sys admin’s (dev ops) point of view when programming, because I started my tech career as a student assistant at the UC Davis NOC.
- Good at translating material between technical and non-technical folks. (And I enjoy it!)
- Good at assessing the needs of customers (users) and advocating on their behalf within an organization.
- Excellent at seeing systems and identifying how changes in one part of the system will affect other parts.
- Adept at breaking complex projects down into manageable steps and keeping the project on-track while coordinating work amongst all the players involved.
- Able to create and manage project budgets, especially when resources are tight.
- Someone who delights in working on complex problems with cross-functional, diverse team members.
- Self-starter who knows when to stop and ask for guidance and is also able delegate when appropriate.
- Willing and able to maintain and improve “legacy” systems when no one else wants to.
- Knowledgeable about open source governance and sustainability issues.
- Excellent at building community through conferences, user groups, meet ups, distributed on-line activities, and more.
- Skilled at creating and delivering high-quality talks and tutorials on complex topics.
My technical career spans 15+ years and includes roles in engineering, developer advocacy & marketing, project & product management, technical writing, and training. I have broad, hands-on knowledge of business development and operations, from for-profit to non-profit entities.
My passion is for applying open source tools and methodologies to help organizations create and maintain successful technology products.
Download a pdf version of my resume.
Where am I most likely to succeed?
I am most likely to succeed on a team and within an organization where:
- Communication is clear, specific, direct, and honest.
- I am able to give meaningful input about what I’m working on and how.
- Leadership provides clear, consistent information about the goals we are collectively working towards.
- We work on hard problems together and build the best solution given the constraints.
- It’s okay to say you don’t know and you’re encouraged and supported in continued learning.
Got leads? Get in touch!
You can drop me a line directly: ck [at] christi3k [dot] net. You can also DM me on Twitter @christi3k.
Anecdotes about my work…
If you’re interested in a complete run-down of my work history and professional accomplishments, download a pdf version of my resume.
But, for a bit of insight into the kinds of projects I like to work on and am good at, check out the following anecdotes. (Links to code and specifics forthcoming as I track them down…)
Ease a bottleneck of Google Code-In participation
In preparation for Zulip’s participation in Google Code-In, I created tooling that enabled project mentors to create a remote development environment with a single command. The tool uses the Digital Ocean Python SDK and takes as an argument a student’s GitHub user name. It then creates a new Ubuntu virtual machine and sets up the Zulip development environment using the student’s fork. Upon completion, it prints connection details for the mentor to share with the student.
Impact: This tool eased one of the biggest pain points for Code-In mentors and students alike, which was initial project setup, and allowed students to get working on their first features without getting bogged down in getting their environment setup.
Process 5+ years of donor data and more
To enable efficient and reliable data imports into NumFOCUS’s Donor Management system, I created a command-line app using Python 3 that processes csv files exported from multiple different sources. The app is extensible and support for new data sources can be added using Python derived classes. Processing rules for each data set are specified via yaml files easily editable by non-technical users.
Impact: We were able to use the same tool to quickly and accurately process and import 5 years worth of historical donor data as well as on a continuing monthly basis.
Deploy FirefoxOS Geeksphones
While on staff at Mozilla and part of the Technical Evangelism team, I oversaw the development and production of Mozilla’s first Firefox OS developer device with our partner, Madrid-based Geeksphone. Two models were created, the budget Keon and the higher-end Peak. In addition to acting as liaison between the relevant teams (including Engineering, Finance, and QA) at both companies, I also created and implemented the program that distributed the devices to our global developer community.
Impact: A significant number of mobile app developers, localizers, and testers we able to contribute to Firefox OS because they had a test device.
Run a community open source conference
Open Source Bridge is the conference for open source citizens. Its content spans multiple platforms, languages and technologies. The number of participants varies, but is between 400-500. The conference is run entirely by volunteers. I have been involved with the conference since it started in 2009, when I was a speaker and volunteer coordinator. From 2011 to 2015 I served as co-chair, overseeing the entire event.
Impact: Hundreds of people strengthened their connection with the open source community, found jobs, found teammates, and otherwise developed the career through involvement with the conference.
Deploy open source collaboration tools on a shoestring
While on staff at NumFOCUS, I increased the number of open source collaboration tools available to the community by deploying and maintaining a number of web services using Chef and the Digital Ocean Python SDK, including: the NumFOCUS Community Wiki at wiki.numfocus.org (powered by MediaWiki), Etherpad Lite, discourse.numfocus.org (powered by Discourse), and chat.numfocus.org (powered by Zulip).
Impact: These tools increased community collaboration without requiring a burdensome amount of work by NumFOCUS staff to deploy or maintain.
Revitalize a neglected project wiki
While on staff at Mozilla, I Led a successful community-driven effort to revitalize Mozilla’s 10-year old MediaWiki-powered wiki. This included the halting and cleanup of spam, installing a major version upgrade and default theme change without any significant downtime, and fixing and closing all outstanding security bugs.
Impact: Significantly improved the usability and readability of MozillaWiki, one of the projects most used collaboration and documentation tools.
Jumpstart an app localization effort
At Mozilla, I implemented a three-part project to help developers localize their open web apps: 1) Localized the Firefox OS Boilerplate app using webL10n library, 2) Wrote developer documentation explaining how to localize apps, and 3) Implemented an easy mechanism for developers to collect localized content for their apps from both volunteer and paid localizers (Transifex).
Impact: FirefoxOS app developers were able to get started localizing their apps quickly because they had readily available examples and a platform for doing so.
Create a MediaWiki extension that eases a pain point
At Mozilla, I noticed that many teams were taking meeting notices using Etherpad and then archiving the notes to MozillaWiki. To make this as easy and quick as possible, I developed the ImportFromEtherpad MediaWiki extension using PHP and Pandoc.
Impact: This extension is used daily by Mozilla staff and volunteers to quickly create pages from Etherpad documents, saving them time compared to doing it manually.
Make deploying a MediaWiki instance easier
At Mozilla, I worked with WebOps team to develop a git-based deployment model (to AWS) and regular release cycle on Mozilla-hosted infrastructure (Apache with multiple web-heads, MySQL, SSL, front-end caching).
Impact: Making, testing and deploying changes to MozillaWiki became easier and more reliable enabling us to roll out changes more frequently, with fewer resources and less risk of downtime or having to rollback.
Improve the contributor on-boarding process
I worked with open source group chat app Zulip to improve their new contributor on-boarding process, which included writing the following guides: Setting up the Zulip developer environment, the “Hello World” webhook integration, using Git and GitHub with Zulip, and more.
Impact: Reduced barriers to participation in Zulip by new contributors using the three most common operating systems (Windows, macOS, and Ubuntu) and providing a straight-forward introduction to using Git/GitHub.
Use Python and BeautifulSoup to make an annoying job less so
As host and producer of the Recompiler podcast, I do most of the audio engineering. This includes adding show notes — in the form of chapters — to the audio file as well as to the accompanying blog post. To make this task easier, I wrote small tool in Python 3 using BeautifulSoup to parse the Hindenburg file and automatically generate show notes in both HTML and plain text formats (since SoundCloud doesn’t allow HTML in track descriptions).
Impact: Using the tool to generate show notes saves me several minutes and lots of aggravation during the production of each podcast episode.