In considering an offer to join us at Artsy, one of our newest incoming engineers asked me a great question: How does the tech team do professional development?
As I thought about it, I began to realize that the answer is “a lot”! Most of our efforts evolved organically. Someone had an idea, and people rallied around it. I thought it would be useful to share, in case others are inspired by what's caught on here. Here are some of the things we do.
Our engineering team used to be organized along practice lines: web, mobile native, and platform. Following our recent product reorganization, we’re primarily organized in product teams, which are more deeply integrated and aligned with our business units. But practices are here to stay. They serve as horizontal channels for developers working in similar technologies to collaborate and share best practices. They each have a lively Slack channel and do standups once or twice a week.
Within product teams, engineers take on work across the stack. Most engineers have one or more zone of expertise, but it's important for us to branch out as well. In my role as a product engineering lead, I'm responsible for helping to support this, to ensure that my team members are broadening in their skills.
In day-to-day work, we do a lot of pair programming and whiteboard architecture on an ad hoc basis. This happens between teams as much as within them. It's common for developers to request code reviews from members of other teams, and equally common for them to provide friendly pointers on PRs they chance upon.
Lunch ’n’ Learn
Every Thursday, we do a Lunch-and-Learn session. Historically, we mostly showed off tech we use internally. But over about a year, most of our tech stack has been presented this way, so we also bring in engineers we know at other companies to share what they’re working on.
Devs are encouraged to attend conferences. The engineering budget covers expenses for 1 per year as an attendee, and unlimited as a presenter. Many of our engineers are experienced presenters -- and I know Orta has even been a conference organizer. So there’s plenty of support for first-time presenters. Lunch ’n’ Learn sessions have served as a place to do a dry run for a presentation.
Professional development isn’t just about absorbing new information, it’s also about teaching and sharing. That’s one of the best ways to truly master a topic. We encourage folks to participate in OSS, blogging (obviously), speaking, and other types of community engagement, and we’ve got really experienced people on all those fronts to support for helping make this happen. We've got team members who help maintain highly utilized community projects, but there are more low-key ways to be involved in OSS. One nice thing about being open source by default is that it gives us ways to contribute to OSS in the course of doing regular product development.
We’ve got an active #tech-learning Slack channel, which people use to share and discuss articles. We also have a number of language-specific Slack channels, such as #elixir, #swift, and #scala (my personal fave).
Newer devs are paired with a mentor, who serves as the point person the newer dev can always talk to. Making this connection official means that it counts as a job responsibility for the mentor. For obvious reasons, mentoring benefits the mentee, but it's good to remember that it also helps mentors develop. After all, teaching someone is the best way to learn.