My name is Kamil Trzciński and I am a Distinguished Engineer as part of the [Memory team][/handbook/engineering/development/enablement/memory/], and I live in Poland.
I joined GitLab in 2015, June. I contributed to GitLab a way before me joining the company. My most noteable contribution was GitLab Runner at the beginning of 2015, which got me hired into GitLab in the first place.
I decided to write the GitLab Runner, because I wanted to learn Go. The GitLab Runner is my first actual project written in this language. Go was ideal choice for it due static compilation (easy to distribute), great support for Docker and very efficient execution model (able to concurrently execute many jobs at once). Additionally, I always loved simplicity of Drone.io. I used a number of ideas and implemented them in a initial version of GitLab Runner, allowing it to heavily use Docker.
My primary focus is a work related to Memory team and a work related to CI/CD space. I take an active part in a number of discussions related to the above topics, because I'm simply interested in a topic and think that I can provide a useful feedback.
I start my work around 10 am (CEST/CET time) with a breakfast and a first cup of coffee. Sometimes it is 9:45, sometimes 10:30.
I spend my morning mostly looking over TODOs, MRs and check what did happen since the yestarday. This is also time when I have coffee chats with other people, but I usually prefer these to start around 11 am.
During the day, I mostly tend to concentrate on my personal work. I'm also usually available for random interruptions from the team or peers on topics that they need extra pair of eyes. I have a lunch around 1pm-2pm.
Afternoon is usually occuppied with meetings. During that period I rarely look at MRs/TODOs, and rather spend time on meetings or contribute to discussions on issues or merge requests.
I finish my day between 5pm and 8pm, depending on a day, and how focused I'm on getting something done.
It is common for me to be on a Slack till late hours, but this is not indiciative of me working, rather indicative of me being in front of computer and doing some other stuff, like watching movies, or working on a hobby projects.
In general I aim to work on average 7.5hr per-day (with lunch), but this varies between days.
I have a strong tendency working on many topics at the same time as I always have many different ideas that I'm passionate about.
Working on many topics at the same time is sometimes challenging due to context switching, but I usually do not find it very tiresome. These are reason why I like doing that:
My way of speeding up learning process is creating a Proof of Concept. I do it for a various reasons:
I like working on many merge requests at a single time. I tend to aggressively split my work into a very small mergeable chunks, and merge them early. It is common to me to have a work divided into 4-5 MRs that depend on each other and create some sort of chain. To help with constant rebases I do use my script rebase-all that does all heavy duty work.
In everything that I do (myself or when reviewing someone else changes) I always aim to slightly improve the code around the given change. My idea is that spending 10-20% more time on resolving technical debt does allow us to constantly refactor the codebase without doing refactors specifically. My perception about scheduling refactors is that this is usually a bad idea. I find it much easier to constantly refactor the codebase while working on a new features. I do expect from anyone working with me: do a little more than it is described to make our live easier in the future.
A few examples how I approach above:
While doing my work or looking over someone else work I usually care most about:
Outside of purely implementation aspects I do also care about:
I work always from home. I don't really like working from co-working spaces. I find my chair and big desk to be a deal breaker for me.
I'm big fan of the virtualisation. I try to virtualise all my systems and seemlessly switch between them using the same keyboard, mouse, and monitor. I automate as much as possible of my work and my environment. This is why I have a 4x4 keyboard to control all aspects of my work environment. This is connected to ESP8266, which sends commands over MQTT to Home Assistant, the Home Assistant later controls all my lighting, PCs/Macs, Monitors and Speakers and switches and turns on or suspends them if needed.
As for the system that I use. I do have tendency on changing constantly my working system: for most time I work on Mac, but also used Desktop Linux for over 3 years. I even had a short episode (around week) trying out Windows.
Recently, I do all my GitLab related work in Visual Studio Code, which connects to my Ubuntu VM virtualised on PC. I do all my work remotely, using Mac only as a good looking desktop. I maintain my own GitLab Compose Kit to have a fully immutable development environment. I use it exclusivelly for last 3 years.
I do not store any of keys on a disks. I use Yubikeys to authenicate everywhere. I have a Yubikey for each computer that I use.