Building a Culture of Collaboration and Excellence From Scratch

We built a culture of collaboration for our brand new team, which helped us grow the team and achieve excellence.
We’ll dive into our experience, methods and outcome, so you can also make your developers proud of your team!

boaz frenkel
Similarweb Engineering
7 min readAug 7, 2022

--

Photo by Cherrydeck on Unsplash

Last year I joined a fantastic, publicly-traded company as the only iOS developer. They had several very successful teams and products, but as a non-mobile-centric company, iOS was not the most important platform. This meant that there were several iOS products that nobody had maintained for a while and very little iOS knowledge in the organization.

I was the first and only iOS developer then, but the plan was to expand the iOS team from one to three-four pretty quickly.

There were a few teething problems we knew we’d need to face, like How can you prove this team can be super valuable? And how can you make great developers want to join this new team?

I’d been part of building several iOS teams in the past, and I knew that just a few excellent iOS developers could contribute to the whole company. I also knew that the benefit would be tremendous if we could attract great talent.

I wanted to bring this experience, combined with my knowledge from my clinical psychology studies, to the table. I wanted to be part of a team whose expertise and culture stood out.

The main point of establishing a new culture is to let people feel comfortable. Let people know they are valued, and their opinions matter and have an impact. Everyone should be part of the culture building.

In this post, I’ll share our road to attaining our goals that, hopefully, will drive you to establish a great culture of your own.

What can you gain, and what are the benefits of having a strong team culture

  1. Most importantly, developers that are happier in their day-to-day job
  2. Developers are empowered to improve themselves and others
  3. A “learning and growing” environment that contributes to their knowledge-base
  4. Better communication, which in turn makes collaboration easier
  5. Hiring is easier because you can explain the benefits of being part of a great team
  6. More productive and professional team members

There are many more advantages to add here, but generally, developers are looking for a place that can contribute to their knowledge, skills, and careers.

They want to feel part of something great, and they want to feel they are valuable. Building a great culture can do that.

With all these great benefits and the need to grow the team, where do you start?

The (impactful) road less traveled

We hired two more wonderful developers very fast, making us a three-member team, but there was still more hiring to do. For now, we were three new, although experienced, developers.

We needed to establish our team, goals, aspirations, values, and the best paths to get there. We needed to start our journey towards a great team culture and establish iOS as a fantastic platform together.

In the first few weeks, we did several things. These were created “on the fly” from intuition and team members’ initiatives, but I think they can be part of the guidelines of any team.

Start an iOS channel on the development team Slack

Here we shared some iOS-related knowledge — new features, capabilities, and more. This channel was essential for facilitating communication between the team members. Moreover, this channel exposed iOS topics and conversations to the broader team (we work in a bigger group of about 20 developers).

Talk to the broader team about S.O.L.I.D development principles

I gave a talk about these principles as a general topic that can expand the knowledge of different developers. This talk helped demonstrate that there is general knowledge in iOS development, and it’s not a niche. We began to establish iOS development as a “valid and strong” platform that people can learn from.

Next, and maybe the most influential thing we did was to start a weekly iOS meeting.

iOS weekly meetings¹

Photo by Jason Goodman on Unsplash

We started the first meeting with a question — what is the best content for these meetings?

I think it’s a team-specific question. The most important aspect for me is that it was an open question, and anyone could bring anything they wanted to the meeting. This openness enabled a culture of collaboration and a “thinking together” mindset. It took us several sessions to explore and understand our team’s needs.

For our team today, it serves as a meeting for sharing knowledge:

We went over a lecture of an online course, read book chapters together, reviewed something we all agreed to read before the meeting, talked about an issue we encountered and wanted help with, looked at a feature implementation, or just shared information.

For example, in our last few meetings, we learned from implementing a CI/CD system for one of the projects. We did a “live” try to implement it on another project together.

This live coding worked and made a remarkable impact because it was also valuable — the “learning” developer got a CI/CD system set up in these 2 to 3 hourly meetings.

That was super cool!

What else can you do to share knowledge and establish code level?

Code reviews²

Beyond the weekly meetings, we agreed to do mutual code reviews. We made these a top priority and decided they would be done quickly to be effective. The code reviews helped us learn each other’s apps and code styles, facilitated discussion on controversial code, and helped enable knowledge sharing and a culture of collaboration.

We replaced the general iOS slack channel with a productive guild-specific channel, where we share knowledge, ask for code reviews and discuss different topics.

Pair Programming and just working together³

Photo by Karl Callwood on Unsplash

We started a habit of pair programming to help when someone encounters problems. This became an excellent way to share knowledge and explain “real” coding concepts.

From problem-solving, it became a habit (for some of us) to work at the same desk from time to time. We even often leave the Zoom meeting running while each developer is working on their project or event, just to look at someone else’s code.

Pair programming is still controversial and may seem like a waste of time, but I find it super productive and beneficial. I recommend trying it out occasionally or making it an X-hour per week activity.

Outcome

The most impressive outcome is the positive communication and feedback that flows like water all the time!

More evident changes are a higher level of code design and architecture, the willingness of new developers to join the team, and tests!

Everyone on the team is interested in writing tests. Tests are not a standard (although it’s becoming one) in the iOS community, so it’s an outstanding achievement. Of course, when the code is testable, it is also more decoupled, maintainable, easier to change, and generally better. We can see it in all teams — the swiftness of changes and new feature additions to our apps.

Another significant change is that today when we introduce the team to an interviewee, we can proudly say that this is a great place to evolve as a developer. This makes it much easier to make developers want to join the team.

We now even have an amaizing developer that made a career change, switching from Android to iOS, and we’ve hired another talented senior developer. We had the luxury of choosing the best of several developers interested in joining. This ability to choose is crucial in the highly competitive field of developer recruiting, and we have the edge over the competitors that don’t have this tremendous iOS culture.

Wrapping up

I still struggle with questions, mainly about how to measure and keep track of the “culture score”.

How can you know you’ve built something good, and how can you measure the health of your culture? I don’t have all the answers yet, but I promise to update you when I do.

I can proudly say that being part of this team has made me a better developer and much happier in my day-to-day job.

[1] Special thanks to Luda Fux which facilitated and made these meetings a constant pleasure in our week!
Special thanks to
Sonia Ziv for raising the technical bar of these meetings and always pushing forward in all aspects!

[2] Thank you David Cohen For being such a a great teammate, for the long hours of mutual code reviews and for letting me learn so much about diffrent styles and skills.

[3] Thank you Elad Sommer for the great pair programming sessions, it was and still is, fun and enriching!

--

--