DEV Community

Cover image for We're Stephanie Hurlburt and Rich Geldreich, ask us anything!
Stephanie Hurlburt
Stephanie Hurlburt

Posted on with Rich Geldreich

We're Stephanie Hurlburt and Rich Geldreich, ask us anything!

We're Stephanie Hurlburt and Rich Geldreich, ask us anything!

We own a company called Binomial and we make a texture compression product called Basis. Textures take up most of a game's data, so if you reduce the size of your textures, you're going to improve performance in your game as well as reduce download sizes/times. The product has gained great interest across the industry and we actively collaborate with the Khronos Group to make sure our file format is also an industry standard.

Before working on Basis, we did consulting under Binomial and we both worked in the game industry before that. Through Binomial we helped optimize VR demos, most notably under Intel's Project Alloy headset. Before that, Rich worked at Microsoft and Valve on game titles like Age of Empires 3, Portal 2, DotA 2, and Halo Wars. Stephanie worked on VR demos at Oculus and on graphics optimization at Unity.

Oldest comments (74)

Collapse
 
niko profile image
Niko 👩🏾‍💻

Hey Stephanie!

I've really appreciated all your twitter efforts that center around inclusion of unrepresented voices in tech, promoting junior developer talent, and rethinking practices in our industry.

What motivated you to dive into engaging the industry and your network this way in your personal time? And do you have any advice for others that want to start doing more to make an impact in those areas ( for those who are new to the industry, as well as those with more experience + their own platform)?

Collapse
 
sehurlburt profile image
Stephanie Hurlburt

Hi Niko! :)

I started a lot of my initiatives after I left the game industry, and had already started Binomial. Like the Mentor List here: stephaniehurlburt.com/blog/2016/11... .

It was motivated by processing some negative feelings about bad experiences I had in the industry (it wasn't all bad, but I had to work through these to fully appreciate the good), and wondering what to do about it. I saw a lot of people calling out issues, writing blogs and Twitter threads detailing problems in the industry, but that kind of work was so draining to me. I wondered, how can I help in a way that gives me energy?

And also, I originally started my platform as a way to promote myself and my work and meet other graphics programmers, but my business was doing well. More promotion was good, but I didn't need it as much as other people need it, so I wanted to amplify other voices. I remembered how hard it was to start out in the industry.

And lastly, the game industry tends to be very referral based. People refer people they trust for jobs, and don't necessarily even look at applications in the worst places! This is a really exclusionary practice. So I thought, if I can't stop these referrals from being so prevalent any time soon, what can I do now to help? I figured amplifying voices and connecting people to mentors helps build up the kind of personal connection to others needed for referrals.

At first I thought doing things like retweeting a bunch of junior coders' portfolios would lose me followers and I was willing to take that risk, but it's only been helpful-- to both me and others! Win-win! It's been absolutely heartwarming to see how much other people want to help those less fortunate than themselves. It totally brightens my day. It gives me energy.

If you're new to the industry and want to give back in this way, my #1 advice would be to do it, but be sure you're promoting your work too. Have a good website or github or portfolio or something, make it easy for people to find information on you, write about your work. Balance posts about yourself with posts amplifying others. As you keep rising, you'll be able to help more people.

And then you can share others' work! There's all kinds of ideas on how to do this, and happy to answer follow up questions too. One important thing I'd say to keep in mind is to reach outside your network as much as possible. See if there's a way to amplify voices who wouldn't otherwise get this chance, maybe who wouldn't have otherwise continued pursuing tech.

Hopefully that was a bit helpful! :) As I said, always happy to answer more follow ups.

Collapse
 
ben profile image
Ben Halpern

Have a good website or github or portfolio or something, make it easy for people to find information on you, write about your work.

What part of this equation are new programmers typically lacking?

Thread Thread
 
sehurlburt profile image
Stephanie Hurlburt

I see a lot of new programmers who understand that having a github is valued. But those that have a github often don't have a good readme, or documentation, or ways to learn more about the person who wrote it! And sometimes people don't have time to make a github (I've never had open source code online!).

If you don't have time to make a github, and even if you have one, make a technical blog! I'd say that's often better than a github. Write about projects you've done in detail, or tutorials on subjects you know. Tweet about it-- if you're a junior coder and you tweet @ me I'll always RT for more visibility.

And have a nice-looking website where people can see a summary of who you are and what you've done. You can use a template you've found online, it doesn't need to be fancy, especially if you aren't a frontend web coder. That's your introduction to strangers!

Join online communities too. Like The Practical Dev. ;) Or Twitter! Share your work and get the word out about what you do.

Thread Thread
 
dvanherten profile image
Dave van Herten

Tweet about it-- if you're a junior coder and you tweet @ me I'll
always RT for more visibility.

Do you have to be a junior? There are many of us getting started with blogging and other social endeavors in the development space.

Thread Thread
 
sehurlburt profile image
Stephanie Hurlburt

For me retweeting it, yes, I'm putting a limit on juniors for now. I've already retweeted hundreds and hundreds of portfolios and blogs and such, if I opened it up to everyone I might completely overwhelm my followers. :P I might change that in the future though! And you should totally still blog and spread the world on sites like The Practical Dev.

Collapse
 
ben profile image
Ben Halpern

Thanks for doing this you two. 🤗

How did you get into this specialty and how would someone doing, say, web development, transition into this area of software development?

And how did you end up settling into this business model of consulting and also working on a product?

Will it forever be a two-person thing or are there plans to expand?

Collapse
 
richgel999 profile image
Rich Geldreich • Edited

I fell into games because I loved playing them, and because there are just so many cool problems in this field. From path finding, to networking, AI, data compression, animation, rendering, etc. - the problems are almost endless.

I've always wanted to be more independent. Working corporate gigs is good to help build your early career, but they are more risky than most people think. I no longer like working with just one company, because doing so puts you at risk of getting laid off, or the company going under, corporate politics, etc. I like to spread my risk around multiple companies, in case any one company doesn't work out. One of my goals is to have a small set of companies that we can work with over time on cool projects, like working at Valve but out in the real world vs. a tiny office in Bellevue.

Also, I've been working on improving the market for data compression software since around 2009. I've always wanted to have a product of my own. I first started writing open source software (like LZHAM, crunch, miniz) at night after work, to help establish the market and improve our credibility. Now we've transitioned more into a product company, using this software as a base to build upon.

On expanding, it could happen but right now we're happy staying small.

Collapse
 
sehurlburt profile image
Stephanie Hurlburt

On web developers transitioning into C++/graphics: Absolutely possible! The land of C++/graphics loves seeing demos above all else, and that makes it so you don't need some fancy education to get a cool job. Focus on building up a demo of work you can do. I got a job in C++/graphics without much prior training, and was able to learn it on the job. I wrote more about this here:

On how we ended up settling on this business model, I wrote a blog post on my view on that too! Blog posts for everyone. :)

stephaniehurlburt.com/blog/2017/6/...

We don't have plans to expand now. It's pretty cool how we are able to be totally sustainable with just two people-- we balance business tasks and programming tasks between the two of us. It works. Take business advice people give you with a grain of salt. Grow slowly, see how things work for yourself. Investors (we don't have investors, but I sometimes take meetings with them to learn/network) have told me over and over we needed to grow or needed investment money, and they were wrong. We're doing really really well with just the two of us.

Collapse
 
peter profile image
Peter Kim Frank

Hey Rich, I'm a long-time gamer and particular Age of Empires fan, so I'm super pumped about this AMA :)

Do you have any fun "war stories" related to your time in game development? I recall reading fun recounts such as Dave Baggett's "Hardest Bug Ever," and I was wondering whether you had anything similar.

Cheers!

Collapse
 
richgel999 profile image
Rich Geldreich • Edited

Hmm - war stories. One random memory: I remember working on DotA 2, shortly after I joined the team. I had just checked in a bunch of improvements to the directional light shadow system and shaders. I supported two modes, a "safe" mode with good shadow quality, and an experimental mode that tried even harder to focus the shadow map on the viewable area of the map for higher shadow quality.

I checked in the new shadow code, and I defaulted it to the experimental mode. The artists in the next cabal room had just finished up a playtest at their desks, and were really pumped up. I remember them getting latest and almost immediately finding a flaw in my new code which I didn't expect. Their response was weird to me: they were almost happy to have found a bug in my code, it was like I had made a key misstep in a DoTA 2 game and caused the team to lose or something. I fixed the problem and realized that working on dota2 was unlike games I had worked on previously.

Collapse
 
wintermute21 profile image
John Best

How can one be good at algorithms and data structures if they're bad at math? Are they doomed?

Collapse
 
richgel999 profile image
Rich Geldreich

No, you're not. I learned the algorithms first by reading about them and implementing them, then I picked up the math on the fly. For me, visualization is everything. For examples, check out sort visualization:
cs.usfca.edu/~galles/visualization...

Collapse
 
wintermute21 profile image
John Best

Awesome. I was diagnosed with Dyscalculia in college and I've always been terrified it was going to ruin my career.

Thread Thread
 
wintermute21 profile image
John Best

Thanks!

Collapse
 
sehurlburt profile image
Stephanie Hurlburt

I just wanted to be sure to point out that most programmers I know claim to be "bad at" or not like math. You're not alone! Math does not need to be your thing for you to program.

Collapse
 
wintermute21 profile image
John Best

I've always tried to teach myself math, but I always forget all the formulae and stuff. D:

Collapse
 
wildparadox profile image
Michael Hill

I've made a career out of developing and have always struggled with math. There are large swaths of development (including some game dev) that don't need anything more complicated than division and multiplication.

Collapse
 
jess profile image
Jess Lee

What 'needs to happen' to standardize a file format?

Collapse
 
sehurlburt profile image
Stephanie Hurlburt

Super interesting question!

We're working with the Khronos Group to standardize our file format.

The first step was building up interest in the format, being very public about the problem that existed and what we were solving and why it was unique, talking to lots of people in the industry about it and spreading the word. This is by far the hardest step. It took us a year of talking to people about it and showing we could solve the problem and such for people to accept that it'd make a good standard in the industry.

We were actually approached by several people about making it a standard-- that was not our original plan at all. We joined the Khronos Group-- there's a membership specifically for smaller companies and another for individuals that's much much cheaper, to make it more accessible to all. We filled out the paperwork to join, and since there was already a lot of interest in standardizing it and we were the only ones working on this space we went straight to work on making the standard.

If you have a file format that you think would be a good standard, I'd say the first step is definitely that networking step, getting the word out. While you get the word out, you might find that others are working on the same exact problem. You should aim to find those people and collaborate with them, get on the same page, be all on the same team. Then talk to people about what standards body would be best to support your work. In our case the Khronos Group was a good fit because they were developing glTF-- a standard for 3D data. They also are very involved in GPUs, which our format interacts with closely. And they were actively interested in adding cross platform GPU compression to glTF.

There are pros and cons to standardizing a file format. One con is that you lose a bit of control once you put it in the wild as a standard-- it's not yours to keep anymore, anyone can edit it. But a big pro in our case is preventing a million competing standards. In our case our compression solution exists because there is no cross platform standard for GPU texture compression, and we're making one. If we didn't make it a standard, it'd lose one of the special things about it, it'd lose its truly cross platform nature. Making it a standard ensures that it's unbiased and encourages others to adopt it in their hardware and browsers.

Happy to answer follow ups on this too!

Collapse
 
ben profile image
Ben Halpern

How do you go about becoming certain yourself that the standard is the right choice? Like, you've got this thing you want to push, but how do you push past the doubt about unknown unknowns to go all in on pushing for something?

I find myself very happy giving it depends answers to everything. Pushing a standard seems daunting.

Thread Thread
 
sehurlburt profile image
Stephanie Hurlburt

I think the biggest thing is getting others' feedback. Start talking about it to people you trust, and developers in the industry. Because it doesn't matter how good an idea you think it is, you can't make it a standard if no one agrees with you. But even if you don't think it's that great, if others want it to be a standard, it should be one! Making standards is all about getting everyone on the same page, working with others, getting other people excited about it, making lots of folks want to use something. Talk to people!

In talking to people, you must be confident. I'm not saying you should walk into that conversation with "I think this is the best thing ever and should be a standard, take it or leave it!" :) I'm saying you should make sure the benefits of your work are clear, and don't distract with highlighting every bad thing about it. Let the other person judge for themselves. Be clear in your message.

Collapse
 
andy profile image
Andy Zhao (he/him)

Awesome to have you, Stephanie and Rich!

Long time gamer, too, and love seeing any product that boosts performance. What's the story behind Basis? Did Basis come from consulting and seeing a lot of problems that were in the industry, or is there a different story behind it?

Collapse
 
richgel999 profile image
Rich Geldreich • Edited

I first got introduced to texture compression at a small game developer in Palo Alto CA named Blue Shift. The then-CTO (John Brooks) had worked on several texture compression systems for the Dreamcast and PS2. I already had a lot of experience with lossy/lossless compression and was pretty impressed by what John pulled off. Sega's World Series Baseball used one of these lossy GPU texture compession systems.

A few years later, while working on the original Halo Wars, I had to optimize the game's memory usage on the Xbox 360. We only had around 480MB of RAM available (total), and we were constantly running out. I remember what John had done for his games so I wrote a basic lossy texture compression system for that title.

After Ensemble Studios got shut down I had almost a year to work on whatever I wanted, so I decided to work on crunch and open source it. At first, nobody believed it was possible, and the phrase "rate distortion optimization" was totally unknown in the game development world. It was open source, so anyone could download it and play with it and see that it worked. At this point a large number of commercial products use crunch on mobile and desktop. It seemed natural to create Basis.

Right now we're seeing a huge shift in the triple-A game space towards rate distortion optimized GPU texture compression. In a year or two every major desktop/mobile title that ships textures will be using RDO texture compression, because it makes good economic sense to do so. Spending valuable customer time downloading imperceptible noise makes no sense. The major console manufacturers are all catching on and now it's basically a race to see who ships this tech into their SDK's first.

Collapse
 
andy profile image
Andy Zhao (he/him)

Thanks for the answer! I learned a lot just from reading that.

Sounds like you made your open source project into a career, and that's really inspiring.

Collapse
 
ablitter profile image
Keith Kaisershot

Do you folks need any more cat photos? ;)

Collapse
 
sehurlburt profile image
Stephanie Hurlburt

Yes, we always need more cat photos. Preferably ones that make great test images for our compressor, though I can't really fault any cats because they're all perfect in their own way

Dog photos are acceptable too

Collapse
 
maestromac profile image
Mac Siri • Edited

Hello Stephanie & Rich!

How big of a difference is there between image/texture compression and audio compression? and where does video compression fit into this?

Collapse
 
richgel999 profile image
Rich Geldreich

Audio compression is in many way a very different beast. Good lossy audio compression requires knowledge of psychoacoustics, which isn't something I've personally spent a lot of time studying. A lot of the lower level coding algorithms (such as Huffman or arithmetic coding) are the same, but the higher level algorithms tend to be very specific and tuned to the type of data you are compressing.

One way to build a video codec is to first build an image codec, then use that as a base. This is exactly what we're doing with Basis. Basis's current format is basically the "I Frame" portion of a video codec. (I frames are compressed independently of all the other frames in a video.) Our goal is to eventually work on P (predicted) frames for video after we finish work on our universal format. We'll be working on a universal GPU texture video format for mobile and desktop sometime next year.

Collapse
 
sehurlburt profile image
Stephanie Hurlburt

Definitely! Yes to everything Rich said.

What he's hinting at is that with lossy compression, it's all about human perception. How can we best trick the human brain into thinking there's not a lot of data lost when there actually is? And of course our audio centers will perceive things differently than visual centers.

Visual metrics for quality are super interesting to examine. We use PSNR and SSIM, for example. Those are image quality metrics that attempt to automatically detect, using algorithms, how much the human brain will perceive quality loss. There are more image quality metrics tuned specifically for photographs, but the thing is we deal with all kinds of textures, not just photos (For instance, normal maps and depth maps! How are those perceived by our brain?).

At the end of the day, a computer algorithm won't be able to detect perceived quality loss as good as a human. The best test is always to look at an image and try to judge for yourself how much quality is lost. But that's slower, so in reality we use a combination of human testing and algorithm quality metrics.

We have customers already using Basis for video-- what they do is plug it into their existing video codec, and add the optimizations video needs. Video is images, but you also have to account for humans perceive moving images and optimizations there-- just a bit different. We are mostly focused on optimizing the image part of it now, but folks are more than welcome to use it in video. Our "texture array" feature provides a good start: binomial.info/blog/2017/2/23/intro...

Collapse
 
wintermute21 profile image
John Best

How does one know if they're a good developer or not?

Collapse
 
sehurlburt profile image
Stephanie Hurlburt

I don't really like the notion of "good developer," first of all. What's a "good artist," for example? Everyone is going to have different opinions on what that means. It's a very multifaceted thing. You can be a good developer in so many ways, and not everyone will ever agree you're a good developer but some will think you're awesome.

So I just wouldn't worry about that. I'd focus on: Are you able to build things? Is your code doing things? Is it achieving the goals? Then, that's all that's really required!

More advanced questions to ask: Is your code easy to maintain over time? Is it easy for other people to read? Does it perform well? Do you have a good base of knowledge built up that makes it easier for you to solve a problem quicker?

I think anyone can be a good developer, and there are many different ways to be good, and you don't even need to have a good answer to all the advanced questions to be amazing at your job.

Go forth and don't be discouraging of yourself. :) I'd recommend building up a network of friendly developers you trust-- doesn't have to be at work!-- to get feedback on your code. You can do it!

Collapse
 
wintermute21 profile image
John Best

I've been fired a few times so my confidence isn't the best. :( Heh

Thread Thread
 
ben profile image
Ben Halpern

Hope you don't mind me stepping in to offer some thoughts:

Try to think of your career as reasonably "stateless" as long as you haven't burned too many bridges or developed a reputation that follows you. Stateless meaning the new situation doesn't really have a lot of insight into the old situation. You see your career as one continuous line, but the next employer really just sees you now. So if you've had issues with an old situation, the new one is really a completely new opportunity.

You're also measuring with a reasonably fixed barrier of quality. It's not a race where you have to outrun the "quality" bar. That bar might shift a bit, but for the most part once you're over the hump, you are in a pretty good place. I'm not the best developer, but I'm good enough to be "safe" more or less. Whether that's "enough" is a different question but really about your own interests. If you're not quite to the "safely good at enough at programming stage" yet, you're certainly approaching it if it's even a question.

Society puts a lot of emphasis on "greatness". From what I've read, I couldn't get a job at Google as an engineer. Maybe I could if I really wanted to more than anything else, but as it stands, I'd probably fail the tests. And I'm pretty okay with that, I have a good setup right now.

I think you've got this John. Hope this was a useful line of thought.

Thread Thread
 
wintermute21 profile image
John Best

Thanks, Ben. I guess I'm just discouraged because I've been looking for months and had loads of interviews but no offers. And I've taken loads of tests so I can prove what I know. it's just, I hate the competition of the whole thing. And I hate the lack of empathy companies seem to have. gassho.

Thread Thread
 
ben profile image
Ben Halpern

Yeah, I'm certain that's frustrating.

Thread Thread
 
wintermute21 profile image
John Best

"I leave Sisyphus at the foot of the mountain! One always finds one's burden again. But Sisyphus teaches the higher fidelity that negates the gods and raises rocks. He too concludes that all is well. This universe henceforth without a master seems to him neither sterile nor futile. Each atom of that stone, each mineral flake of that night filled mountain, in itself forms a world. The struggle itself toward the heights is enough to fill a man's heart. One must imagine Sisyphus happy." -- Albert Camus

Collapse
 
damianfekete profile image
Andrei Damian-Fekete

Who's walking the dogs and for how long?

Collapse
 
sehurlburt profile image
Stephanie Hurlburt

We split dog walking duties. :P Happy to report the dogs are happy and content with this arrangement