At Batvoice, we do not have strictly defined roles. Instead, we like to talk about specialties, and the kinds of impact they can deliver. To codify these, we use Departments. You can be in multiple Departments at once, some of which may be temporary, because the need arose, all depending on what kind of impact you are driving for the company, and what skills you use to drive it. Your title is composed of your Department, and your seniority level, which are defined per-Department.

Engineering

The Engineering Department is composed of several Teams (which have the same semantics as Departments — they are not collections of people, but specialties). They share a love for solving problems, separated by their strengths, which shape the way they contribute to said solutions. All engineering departments share the same seniority system.

Being part of a Team is non-exclusive. As an Engineer, you’re expected to be able to contribute to any of the Engineering Teams if the need arises, with the understanding that you’re operating outside of your specialty, and therefore will be less efficient. Sometimes, less efficient work is better than everyone being blocked.

Application (App)

The Application Team specializes in building interactive experiences. This ranges from crafting user experiences, to building a robust API, to designing the database, to architecting the pipeline that actually runs. They know the importance of latency and how to measure tradeoffs against throughput.

To do all this effectively, the Application Team need to be experts in understanding knock-on effects. They should be able to be pointed at any piece of code, any variable, any constant, and tell you what it does, why it’s there, and what effects changing it would have. They need to understand the product and the needs of the people that the product affects.

It’s common in the industry to subdivide this team further into Backend and Frontend. While we do not do this, we accept those terms as a “Focus” (which, as with Departments and Teams, merely defines the most common activity for the Engineer).

Data

The Data Team specializes in ingressing, processing, and egressing data. They do this by researching the best approach for a given processing step (in Batvoice, it’s often Machine Learning), and then building it to fit our standards, whether those standards are in terms of quality or cost (usually both). They build the operational components of the pipeline and the pieces of glue that hold them together.

To do all this effectively, the Data team is expected to have great familiarity with the state of the art and ongoing research. They need to understand the fundamentals of what they’re doing (including programming and statistical modeling), and be able to perform such research themselves if need be, since we try to push the state of the industry forward.

Operations (Ops)

The Operations Team specializes in making the work of the other Engineering Teams actually run. They do capacity planning, deciding what should run where, and provide tooling (such as automations, security, networking, etc) to support the other Teams (not only Engineers).

To do all of this effectively, the Operations team is expected to have deep understanding of what goes on in a computer, from how a cloud provider is built, to how CPU pipelining works. They then share this expertise with the other teams to help them operate optimally.