Andy Webb: How would you describe Bloomberg's programming approach when you build infrastructure?
Shawn Edwards: Well, we definitely use an engineering approach here at Bloomberg. We build component-based software design in the infrastructure group; and we have a test driver for every component. You run it through memory profiles while you're running your test driver constantly.
To this day, especially in our core infrastructure groups, we look for people who have a real grounding in how computers actually work. You have to understand what's really going on underneath. So when we talk with somebody, we ask: "What's really happening when you make a call to a virtual function, or when you try to pass some information to another thread? You've got to learn about contention. You've got to learn about wasted cycles. You have to learn about all that.
As a result, we're always looking for people for the infrastructure team who understand about computer architecture, and what their code is actually doing. Once you know that, a lot of things can be built on top of that knowledge.
Andy Webb: When you're recruiting people, are you also thinking in terms of, for example, recruiting somebody who's got a firm background in really mission-critical stuff like flight-control systems? Where a mistake literally costs lives; where people have to work at that level of reliability?
Shawn Edwards: I have to break this down into groups.
To start, our core infrastructure teams are the people who are building the ground systems that our users rely on. These individuals have, as you say, experience in "mission-critical systems", which are built to deliver at high performance. We build our own databases here, market-data distribution systems, and more. So people with say, telecom experience, are great because they've had to think about reliability.
So, just as you said - people in mission-critical systems, but also delivering high performance. Your idea of flight-control systems is exactly a good place. You don't find a lot of those people.
On the other end of the spectrum, a big part of what we do on our
infrastructure team is building the application framework; we're
building applications all day. We've hired people from the gaming
industry for these roles. Their high-performance UIs are using
scripting language on top of native C and C++ code. So it's
exactly the right model, and they get it. They know where the
boundaries are, and what the
Bloomberg's a big place. We have different groups with different needs. For many application groups we like to hire people with say, finance backgrounds and who are technically savvy enough for us to teach them the higher-level programming languages. They go out to see customers and iterate on prototypes, building our UI workflow, which is such a critical part of what we do.
People are typically good at a couple of things. It's hard to find somebody who can build, say, super-high-performance market-data systems or trading algorithms and who is also good at building incredible UIs. There's usually a knack for one of those things, but it's rare to find a candidate with both the technical knowledge and the industry experience. Bloomberg aims to hire people with a diverse professional background and solid programming skills.
Andy Webb: I believe your own background programming-wise has been predominately C++?
Shawn Edwards: Actually, I started off in the hardware design world as a logic designer, building mainframe systems at IBM. I switched over to writing software and building simulators and routing algorithms in CAD systems for Mentor Graphics. That's where I got hooked on software development as a career focus. When I was at Bear Sterns just prior to coming to Bloomberg, my focus was pretty much all C++. So, you could say, I spent most of my programming life in C++.
So in this programming environment we give our developers seamless access to all the high-performance services. Those services are all typically written in C++. There is a large catalogue of services, all of it riding over our own middleware. Our goal for Rapid was all about shortening a product's time to market and about providing an environment where we can iterate on concepts. We're huge on iterated design process at Bloomberg!