Tech At Bloomberg

How Guilds Promote the Exchange of Technical Ideas & Best Practices Within Bloomberg Engineering

April 13, 2020

Bloomberg’s engineers possess extensive knowledge, skill, and expertise across a wide range of technical domains. Various internal tools and mechanisms already exist to make it easier to share that knowledge. Over the last decade, as the number of tools and technologies — including open source tools — critical to building better software increased, internal meetups formed as an informal way to share experience, exchange technical information about them, and coordinate their adoption across Bloomberg’s Engineering department.

To encourage additional “communities of interest” to form around specific technologies and related technical topics, and to advance their adoption at Bloomberg, we first introduced the concept of “Guilds” throughout Engineering back in late 2016.

This is not a new concept in the tech industry. First popularized by Spotify in 2012, Guilds are utilized by agile engineering teams to identify cross-team groups of experts or to share best practices.

Since medieval times, the term “guild” has described a collection of experts who come together to solve challenges and share tricks of their craft. At Bloomberg, our Guilds are made up of wide-reaching groups of engineers across the organization who are interested in, and dedicated to, organically sharing knowledge, tools, code, and practices related to a given technical area. They serve as communities centered on specific technical topics of interest and for the advancement of technology in Bloomberg.

Today, Bloomberg has the following 10 Guilds across its Engineering department:

  • Automated Testing
  • C++
  • Distributed Systems
  • Java and the JVM
  • JavaScript
  • Machine Learning (ML)
  • Natural Language Processing (NLP)
  • Python
  • Relational Databases
  • Web Frontend

Each Guild is driven by a core set of leads from across Engineering who are responsible for the success of the Guild’s mission. These Guild Leaders are charged with influencing the use of the technology internally and engage with the respective technology community externally.

A special designation is given to the point person of a Guild who is responsible for representing their Guild at a more senior level. These folks are known as Guild Chairs. Some Guilds have two co-Chairs.

Together, the Guild Leaders and Guild Chairs must ensure each Guild provides value, both internally and externally, across four areas:

  • Internal presentations and meetups – Internal meetups and keynote talks, external speaker engagement, continuing education trainings, Guild newsletters, etc.
  • Engineering influence – Application design support, platform influence and development, infrastructure road map, creating and documenting best practices, forum management, publication of discussions and findings, etc.
  • Collaborative development – Open source and InnerSource projects and contributions, Open Source Days, internal Developer Experience (DevX) hackathons, etc.
  • Conference engagement – Identifying conferences to attend/participate in, nominating attendees, identifying and coordinating tech talks, etc.

To get more insight into how Guilds function at Bloomberg, we talked with Ania Musial, Chair of the Machine Learning Guild, Denis Chekhlov, Chair of the Automated Testing Guild and Marianna Polatoglou, Co-Chair of the Python Guild:

How did you first get involved with your respective Guilds at Bloomberg?

Ania: I was one of the original members of the Machine Learning Guild, representing the Machine Learning Platform team and Bloomberg’s larger Data Science Platform initiative. Having infrastructure providers as constituents of the Guild shows our commitment and support to providing the tools that ML practitioners need.

Ania Musial, Chair of the Machine Learning GuildAnia Musial, Chair of the Machine Learning Guild
Ania Musial, Chair of the Machine Learning Guild (Photographer: Lori Hoffman/Bloomberg)

Denis: Shortly after joining Bloomberg, I attended a two-day course on Test Driven Development (TDD) with an external consultant. Looking back, this thoroughly changed the way I approached software engineering forever. Something had just clicked in my head. Over the next several years, through much trial and error, I managed to hone the craft of TDD to the level where I saw an opportunity to help others in my team and beyond by spreading the knowledge that having automated tests in your project is good and how to achieve it in a sustainable way. A few other engineers and I started to develop a course for junior engineers to introduce the practice of unit and integration testing into the onboarding curriculum.

The practice of sharing code and an increased focus on collaboration between different groups of engineers across our organization started to pick at the same time, spearheaded by our internal Champions program. I took part in several efforts that introduced shared libraries to help with unit testing in C++, including bringing in a few open source offerings and integrating their usage within our development environment.

When the idea of forming an Automated Testing Guild surfaced, we already had a community of enthusiasts across the company who were meeting regularly to discuss best practices and real-world experiences. By the time the Guild formed, we had been running monthly internal meetups in New York and London that had high attendance. The formation of the Guild helped formalise these efforts, gave us an ability to formulate a vision and focus, as well as brought more people into the community who had started similar projects in isolation.

Marianna: I had worked with Python previously and really loved working with this programming language. Prior to the Guilds launching, a number of internal meetups had formed and I thought it would be a great idea if there were meetups about Python. I asked some others in the department and it turns out that Mario Corchero had already started planning on these informal meetings. Naturally, I jumped at the opportunity to be involved. Since then, the groups organising the meetups evolved into the communities the Guilds are today that do so much more. Currently, Matt Wozniski and I co-chair the Python Guild.

What is your Guild charged with?

Denis: The Automated Testing Guild’s vision is to help every engineer get the most out of automated testing in their workflow. Our focus is primarily on how automated tests and practices, such as TDD, can help guide engineers’ development, build quality into the product, and facilitate the adoption of Agile practices. Automated testing has a big scope in terms of tools and multiple stakeholders. Our primary goal is to help engineers in their development practices, shift more testing effort to the left, and free up our QA folks to do more exploratory and usability testing. Of course, we also have close ties with engineers in the Continuous Integration/Continuous Delivery (CI/CD) community, with many folks participating in both.

Denis Chekhlov, Chair of the Automated Testing GuildDenis Chekhlov, Chair of the Automated Testing Guild
Denis Chekhlov, Chair of the Automated Testing Guild

Marianna: All Guilds have a similar charge. I like to think of it as nourishing the internal Python community that exists in Bloomberg in order to empower those engineers who use this programming language and to raise the image of Bloomberg as a company committed to Python.

Ania: The Machine Learning Guild has a very simple mission. I love the brevity and scalability of it: “to create a unified Machine Learning community and promote discussions of ML problems, techniques, and best practices across Bloomberg.”

What are some of the key accomplishments your Guild has been responsible for?

Marianna: The Python Guild has done plenty of things over the years, but I’ll try to keep this short. I believe one that keeps delivering benefits is our collaboration with the Training team on new materials. This ensures the consistency and quality of the knowledge shared with new engineers joining Bloomberg, as well as others already working here who are looking to learn new skills. In addition, the feedback from the Training team has been invaluable throughout the Guild’s existence.

Another very important contribution is our keeping track of and making sure there is representation from Bloomberg at relevant conferences, and ensuring we share the knowledge we pick up at these industry events with our engineers through internal meetups. Furthermore, we have conducted internal workshops on migrating to Python 3. I believe it is very useful for engineers to get help with this so that we can move our systems in that direction faster. From a coding perspective, there are pragmatic approaches we have documented to help engineers through tough decisions or just to offer some guidance.

Finally, the collaboration between our Python Infrastructure team and the Guild has been indispensable. Having members of the Infrastructure team inside the Guild has ensured that the lines of communication between us are always open.

Marianna Polatoglou, Co-Chair of the Python GuildMarianna Polatoglou, Co-Chair of the Python Guild
Marianna Polatoglou, Co-Chair of the Python Guild

Ania: We’re very proud of our collaboration with the Data Science team in the CTO’s Office, which has enabled us to grow our ML Education program (have you seen our “Foundations of Machine Learning” video course?) and conference presence. This year, we have a group focused on the Model Development Life Cycle at Bloomberg, something I am really excited about.

Denis: Overall, the Guild’s major achievements relate to shaping the internal training curriculum, introducing and supporting a bunch of InnerSource tools to enable engineers to write tests faster, as well as influencing internal infrastructure teams to take note of needs for developing testable APIs and supporting engineers to test in the presence of the infrastructure products.

What makes Guilds a great way for engineers to learn new skills and develop their interests in emerging technologies?

Marianna: Guilds are fluid communities. They offer constant opportunities for one to contribute, learn, and develop both oneself and the community. From an organizational perspective, the Python Guild has shifted to having small groups of engineers that each focus on different aspects of the community and its needs, such as training. Each of these groups has one or more Guild Leaders who direct the efforts and the community is always more than welcome — and needed — to help. This change resulted from conversations that took place within the Guild in which we were looking for ways to improve our communication and effectiveness. Thinking through changes for a community that is composed of engineers from different teams and locations is unique to the Guilds and can help one develop their collaborative thinking skills.

There are also plenty of chances to participate in technical discussions, as well as to implement solutions for challenges faced by the community. The impact an engineer can have while addressing things that challenge our whole internal Python community is immeasurable. Moreover, since our Guild has participants in it from around the globe, our members learn to work as part of a distributed team, mastering the challenges of asynchronous communication, a skill that comes in handy when it comes to code development.

Ania: It is important to our Guild to have a healthy balance of theory and practice. This creates a space for our AI researchers to share their latest optimizations or thoughts about BERT, for distributed systems engineers to run workshops on distributed model training, and everything in between. Everyone gets a chance to learn and teach something new at a level and in an approachable manner!

Denis: As mentioned earlier, shifting testing left makes a profound difference on the speed of development — especially over a prolonged period of time. Whatever your language or framework, you need a way to test parts of your applications and product, as well as the whole system. There is also inherent synergy between testability of your programs and their design. So, mastering a particular language also means mastering design patterns, and, in turn, mastering ways you can test in each context. This is always exciting, constantly bringing new ideas and ways to do testing better and faster. Last, but not least, when you put testing into a driver’s seat for your product, it is also a fun and rewarding experience.