Blizzard Exclusive Interview: Diablo III: Reaper of Souls
Hey, Spawners — we here at SF scored an exclusive interview with Anne-Sophie Lefebvre, a software engineer for Blizzard’s upcoming Diablo III expansion, Reaper of Souls.  (Which looks, objectively, awesome, and we swear that’s an objective assessment.)  Anne-Sophie answers our questions on UI in Diablo III, her biggest challenges in sculpting the UI, and how you can follow in her footsteps.
Which parts of the Diablo III user interface did you work on?
I work on both the front end user interface, as well as the user interfaces for all the Battle.net authentication and social systems. That includes pretty much every screen that the player sees when they log in to the game as well as the front end menus prior to entering a gameplay system, like the login screens and authentication challenges, the Friends list, character creation and selection, game settings and options, and the Auction House user interface.
What role do UI programmers play in developing a game like Diablo III?
Diablo III has a lot of social features and presents many different ways to interact with friends and other players. UI programmers act as a bridge between designers, technical artists, and server engineers. We take all the information and data provided by the Battle.net service, collate it, and then present it to the user through intuitive interfaces for the player to enjoy their Diablo III experience. We frequently communicate with the designers, tech artists, and server engineers to make sure that the data being provided translates properly to the user interface the designers and tech artists have created. UI programmers iterate a lot on different ideas which sometimes requires a large amount of prototyping.
Are programmers (UI or otherwise) involved in the design process at all? If so, how?
We are very involved in the design of the features that are being built. When a design for a specific piece of user interface does not make sense or when we feel something could be improved we always share our concerns with the designers and tech artists.
When implementing user interface for the Battle.net social systems, we must be particularly careful about how data is exposed and where data is exposed. Some data is readily available or easy to retrieve, and that data can be surfaced more broadly. Other data from the Battle.net service may not be readily available or may take some time to retrieve, and in those cases we need to bury that information and retrieve it on demand. We generally bury the information in a tooltip UI and the player can hover their mouse cursor over, or click a button to pop up additional details.
Designers and tech artists generally don’t know about these complexities or limitations, so the UI design becomes a very collaborative process that requires balancing what the designers would like to see versus how fast we can responsibly retrieve information from the Battle.net service. We also observe UI usability testing meetings and take part in iterative UI design discussions based on how well those testing sessions went. Brainstorming is essential to maintain perspective and develop the best functionalities for the player.
How do UI programmers interact with the rest of the Diablo III development team?
We work on almost every client-facing feature of the game, whether it’s a Battle.net social system or a gameplay system. Designers come up with wireframes and proposals for specific features, and we tell them what information is easy to display, and which information will be more difficult.  We then work with the tech artists to make sure the UI art and layout is properly crafted, so that we can implement the UI art and controls in the most efficient manner.
Being a UI programmer requires us to be in touch with pretty much all disciplines working on the process. This is one of my favorite aspects of my job. I enjoy the communication required to implement the Diablo III user interface. Â Collaboration and communication is essential for a smooth process.
What’s the biggest challenge you face as a UI programmer for Diablo III?
I’d say the biggest challenge is being flexible. We have to code in a smart way. As I said earlier, user interface requires a lot of iteration.
We have to constantly pay attention to what data the player will see and when they will see it.  If we can’t get that data fast enough, or a design calls for too much data to be retrieved, we have to constantly be thinking about an alternate implementation or a compromise. The best part of being a UI programmer is that I’m always building something that I can see.
Developing a great user interface is a balancing act and we need to always keep the majority of our players in mind. For example, we may have an idea for a cool new feature, but we may sacrifice that feature before implementation if it gets in the way of the UI being simple and intuitive.
We’re not rushing out features; instead we carefully consider how any changes we make will impact the player experience.
What was your biggest success?
Well, on our team, we tend to help each other out on projects and our workload touches on almost everything on the front end as well as most of the Battle.net social system UI. It’s not uncommon for us to fix other programmers’ bugs when needed, or add new features to a system another programmer originally authored when design requirements change. So that makes it hard to pinpoint one specific achievement.
Overall, I would say my greatest accomplishment was to create an awesome experience for players before they even entered the game. The Battle.net social systems interact in complex ways, and we needed to always consider how they would interact in all cases. We work hard every day to provide a bug-free product and an intuitive user interface flow to our players.
What’s been your favorite thing to work on for Reaper of Souls?
On Reaper of Souls, I have spent a tremendous amount of time working on the user interface for Clans and Communities, which has been very interesting and challenging. The biggest challenge was authoring a user interface control to provide a Roster list capable of listing hundreds of clan members. The control itself required a significant amount of optimization based on the amount of member data we needed to display.
Another feature of the Clan roster list is a 3D visualization of the clan member heroes and their gear at the bottom of the roster. Authoring the 3D controls to show the heroes and implementing the optimizations to allow them to rapidly scroll across the screen as the user scrolls through the roster list was a lot of fun.
What’s very rewarding about UI programming is that you can tell people that you made ‘this’ screen, or ‘that’ feature work. For me this is the best part, being able to picture your work.
How did you get into game programming?
I was hired as a Web Designer for Blizzard 7 years ago, but user interface had always been something I loved to work on, so I knew I wanted more.
In 2007, at the very beginning of StarCraft II UI development, I was authoring Flash and Action Script for the Battle.net web team. One day, I talked to my manager and I expressed my desire to be involved in more C/C++ programming. A couple of weeks later I was transferred to the Battle.net StarCraft II team as an Associate Software Engineer. I have learned a lot since then by taking classes and working hard. It’s been quite a challenge. After StarCraft II shipped, I was transferred to the Diablo III team to start the UI pretty much from scratch. I learned how to navigate and become comfortable in a pretty large code base. There have been some challenges, but mostly a lot of satisfaction and pride. I know I would not have been able to do all of these things if I did not have the support of my managers and the opportunity to grow.
What tips would you provide people interested in getting into the game industry as a programmer?
I think passion, motivation, and determination are all very important. I also would like to point out that programming is not all about hiding behind a screen all day. It involves a lot of interaction with your co-workers and good communication skills. Sometimes you have to speak up about what you think is right, but as an engineer you also have to be precise and accurate. At other times, listening to your peers; especially the most senior ones, is absolutely vital. That’s how you learn and grow.
My story is a bit uncommon, but I also dedicated a lot of time to learning outside of work. This is something that you have to be willing to do. Work on your own personal programming projects! Most importantly, if you have a dream or something you really want to do, just try it. If you don’t try you won’t know. If something does not go as you thought it would, do not take it as a failure, use it as a learning experience.