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.

Top comments (77)

Collapse
 
sehurlburt profile image
Stephanie Hurlburt

In my situation, my anxiety largely comes from PTSD. I got out of a traumatic situation a while ago and have been recovering.

The first step for me was getting a therapist, definitely. It helps so much. I went to PsychologyToday's website to find one. Try to get someone who specializes in the experiences and issues you deal with-- there are filters on that search. If you're worried about money, many therapists have sliding scales-- just ask about them, or ask if they can refer you to one who does do a sliding scale.

A big thing that's helped me is simply being more accepting of my anxiety. I definitely have this attitude I tell myself of "Suck it up," "This shouldn't be a big deal," "Just move on"-- or worse, I get really angry and frustrated with myself and very self-hating. All to try to move on to anxiety! Turns out that kind of negative attitude amplifies anxiety like crazy. Being loving with myself, giving myself days where it's okay not to do anything, really trying to find out what my body needs, making sense of why I feel this way and telling myself it makes sense-- that all helps so much.

It's also helped me to realize the source of the anxiety, and understand that source fully. PTSD is a brain injury (at least many therapists believe this). My brain was injured because of trauma. It will heal. It doesn't have to hurt like this forever. Get blood, urine, saliva tests to see if there's anything that got disrupted in your body-- in my case, the PTSD actually hurt my thyroid, so taking medicine to heal that part of my body has been really important to healing.

Make sure you're eating well and sleeping well. I can't state this enough. Your body is so important, and if you aren't taking care of it, of course you'll feel bad. Eat enough vegetables and protein. Create nightly routines so you can sleep better. No looking at your phone after a certain time at night. Stuff like this.

Meditation can be extremely powerful too.

Also, be accepting if you have to rest, but try not to have "zero" days. Do at least one thing you need to do every day, and congratulate and reward yourself when you do it. Over time, it gets easier to do more and more.

If it's still really tough, I recommend seeing a naturopathic doctor and not only an MD. They tend to take a more holistic approach to healing and can give you gentler solutions.

Take it easy on yourself and let your body heal. I wish you the best. <3

Collapse
 
richgel999 profile image
Rich Geldreich

Some books you may want to check out:

"The Chemistry of Calm":
amazon.com/Chemistry-Calm-Powerful...

"Depression Free Naturally":
amazon.com/Depression-Free-Natural...

Collapse
 
ben profile image
Ben Halpern

Thanks for these.

Collapse
 
taylorshaw profile image
Rogue Taylor Staff

How did you decide that texture compression could be a viable business, and do you see any other great opportunities for graphics middleware comparable to Basis? (basically, tell me what company I should start, please)

Collapse
 
sehurlburt profile image
Stephanie Hurlburt

Rich did a good job talking about Basis.

What company should you start? :) Well, I just want to highlight how much of an opportunity there is for middleware especially in the engine space.

Basically, what's a problem that companies don't have engineering time or expertise to totally perfect, that would be easier to just buy a solution for? So many things. Engine teams are not that big compared to the amount of problems they run into. AI, networking, all kinds of different rendering issues (font, particles, water, cloth, hair, different kinds of lighting, on and on...), build processes, different kinds of physics issues, so much...

I think the product you should build should be the intersection of what you can do with what customers you have. We originally started Basis because we knew we could do it, and we knew exactly who the customers would be.

So you should find your customers. Network. Talk to people. Build up trust in your abilities. Make a good website, portfolio, tech blog. Find someone who would buy your product. That's the first step!

Collapse
 
taylorshaw profile image
Rogue Taylor Staff

Thank you both for the responses. I admire how open and helpful you are.

Collapse
 
richgel999 profile image
Rich Geldreich

I first built crunch in 2008-2009, and open sourced it while I was at Valve on Google code (then github). The Google Maps team was crunch's first big customer. More and more products started using it, and many of these teams would contact me with bug fixes, or feature requests.

So last year, Stephanie was saying we needed a product, and creating a commercial version of crunch seemed like a no brainer. A ton of teams were already using the library, it cut game downloads in half or more, and we had (and still have) no competition in this space. Unlike many startups, our technology already works and is deployed in the field! So it was a natural fit.

I started rewriting crunch right after out initial announcement last year.

For other middleware, there's definitely a need for a good binary delta compression codec. We'll eventually get to that if nobody else does. On the graphics side, I think there are plenty of opportunities in the AR/VR space.

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
 
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
 
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
 
dcfcdolb profile image
dcfcdolb

What would you say were your personal learning steps to get where you are today? As someone who has recently begun coding I am continually learning new things each day but sometimes it feels like I'm moving sideways rather than progressing. Would you recommend continuing to expand on new things or try and focus on a specific area?

Collapse
 
richgel999 profile image
Rich Geldreich

As a kid I played with 8-bit computers way too much. I basically just read a lot, studied a bunch of programs, and messed around. I had a lot of fun programming in BASIC and 6809 assembler.

Anyhow, I would recommend that you continue experimenting with different things until you find something that you find particularly interesting or fun. Then try focusing on that.

Collapse
 
sehurlburt profile image
Stephanie Hurlburt

For me, programming began as "I need a job and money." I didn't do it as a hobby, I didn't know the slightest thing about programming until I took college courses with the intent of getting a job.

So I went through college, and then my learning has largely been the intersection of "what I've liked that I've done so far" and "what can I get paid to do." Even into starting a business-- we weren't just going to make any product because we thought it was fun and we assumed it'd sell, we made a project we knew we already had customers for.

I recommend trying to find a mentor if you can (lots of resources here: stephaniehurlburt.com/blog/2016/11... ) and try to learn what you need to get a job, or if you have a job learn what you need to excel. Totally fine to do things just for the joy of it too, but this approach has worked well to give me structure (I tend to love a lot of things :) ).

Collapse
 
sehurlburt profile image
Stephanie Hurlburt

Was thinking more on this-- if you feel like your professional development's totally fine and you just want to progress in other ways, maybe another good way to structure it is to set other goals, and aim for those ideally with some guided help. Same basic idea.

Collapse
 
jefframes profile image
Jeff Rames

First off - you both rock! Thanks for doing this AMA, and for everything else you do for the community.

From my vantage point, you've accomplished a lot in a relatively short amount of time at Binomial. Stephanie at least has been vocal about maintaining good work / life balance.

Obviously you have quite a bit of natural talent. Can you share any other insights into how you stay so productive? On a related note, how do you get 'in the zone' and focus around distractions like Twitter, email and news?

Thanks!

Collapse
 
richgel999 profile image
Rich Geldreich

Thanks Jeff. I had to change my life radically to stay productive. I focused my knack for optimization to my body and my life. I had to, having fallen extremely ill from a GI illness and almost dying in mid 2015. 2016 was my year of recovery, where I had to basically reboot my life. I moved to Seattle (U District) which was one of the best things I ever did. Living in Seattle was amazingly healing.

This experience changed me in ways I'm still figuring out. I learned that I don't need caffeine to have energy. Things like going to sleep at the same time every night, waking up and immediately going outside to see natural sunlight, eating at consistent times to minimize stress on my body, changing to a Paleo diet, gettng lots of exercise 3-4 times a week, and home made probiotic yogurt all helped massively. I also read a lot of books about things like amino acids, herbal medicine, etc.

Also, it helps to have a "mission" in life. I am completely focused on pushing our product (Basis) forward.

Collapse
 
jefframes profile image
Jeff Rames

Hey Rich - I wasn’t aware of that, and glad to hear you were able to get things back on track!

That’s interesting especially to hear about Seattle being of such a big help. I have some health issues exasperated by the cold, and finally moved from the Midwest to Texas in part for that reason. So far, it hasn’t yielded as big an improvement as I’d hoped. I have tried periodically over the years to make other changes, and your story gives me a bit of a jolt to get at that again.

Thanks again for the advice!

Collapse
 
sehurlburt profile image
Stephanie Hurlburt

For me, a lot of it is around staying healthy-- mentally and physically.

Are you eating well and sleeping a lot every night? Are you healthy? Are you getting checkups regularly and not in pain? Paying attention to your health is the first step. You aren't going to be at your best if your body is hurting unnecessarily. Your brain is not disconnected from your body!

Mental health is also important. Only working 4 hours or so a day, and spending the rest of the day with loved ones, resting, being social online, all those other activities-- that's where I'm at my most productive. My brain just doesn't want to focus on something all day, it's healthy for it to relax a bit and then have a burst of focus and thinking of work. I find that I solve a lot of problems while I'm resting. Taking a little nap in a day often results in me waking up and thinking, "Oh, that's the solution I was looking for!"

Especially in owning this business, just churning out busy work isn't helpful. I have to stay positive and creative and focused. Staying healthy and resting a lot, both in brain and body, is so important!

I also find that doing other activities other than our compression work is important for my mental health. I have all kinds of things I want to do and hobbies-- focusing on different things, while making sure to rest a lot, can be really important for productivity.

I write my 10-year life goals down in a little notepad document, and look at them every now and then. Life goals, not career-focused necessarily. I think about how each of my tasks gets me to one of those goals, and it makes me happy and makes me want to work toward it.

Current list, for example:
-- Keep being successful in my business ($$ and freedom)
-- Travel occasionally to beautiful places
-- Cultivate fulfilling hobbies that are just for fun/joy/beauty
-- Try out a few places to live, find one to stay in
-- Be very involved in the community: get involved in local politics, know my neighbors, have good friends locally
-- Get married & start a family
-- Give back in a big way, do organizing work

Obviously that first bullet point has a lot of smaller bullet points needed to achieve it, but that's the high level goal. I then think about specific tasks needed to get there, and actionable plans and timelines.

If something isn't in line with one of my goals at all in any way, and I can't find a way to update the list to make it true, it's probably not worth doing. Thinking like this is motivating to me.

Collapse
 
jefframes profile image
Jeff Rames

Thanks - this is incredibly helpful! I attempted some of this when I was independent, but it sounds like I should have been a bit more disciplined. The health part is especially important for me.

The challenge for me now is implementing some of these ideas while working as an employee. Four hour days are not on the table, and some of the others are also difficult. I’m starting some place new soon, and will give more thought on how I can set myself up to succeed on more than a personal / career level. I may hit you up for advice, if you don’t mind!

Thread Thread
 
sehurlburt profile image
Stephanie Hurlburt

For what it's worth, I know a lot of full time folks who only really work 4 hours/day. The other 4 hours are spent in meetings, talking to coworkers, browsing the web, learning new things, resting the brain but in the office so they "look productive." So I wouldn't feel the need to be productive 8 hours every day.

I wish you the best with taking care of your health! So important indeed.

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
 
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
 
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
 
sdees82 profile image
Sean Dees

I'm sure the two of you had low paying jobs at some point in your lives. How did It feel to have your first big developer pay check? Was it a stress reliever or was it no big deal? As a junior developer, I don't make close to what the average developer makes, but I love my job and view each day as an opportunity to get better. But I'm very much looking forward to the pay that being a developer can bring.

Collapse
 
sehurlburt profile image
Stephanie Hurlburt

For me, I worked minimum wage jobs for many years. Even as I went to school for programming, I was kind of envisioning maybe needing to stay in retail if it didn't work out.

In my first coding job, I made $42,000. Holy crap, I remember that felt like an amazing amount of money. I suddenly didn't need to agonize about grocery bills. It was life changing.

For a while, I didn't feel comfortable negotiating salary because I had this complex of "I should be grateful" and I also just wasn't very aware of what other programmers made at all. I thought maybe this was pretty normal.

But then I ran into a situation, later in my career, where a coworker who did the same work I was doing and had the same experience was making twice what I was. That did not feel right at all. It was a very strong lesson on how quickly you can advance as a programmer in terms of salary, and also taught me that negotiation and getting other offers is important.

Collapse
 
richgel999 profile image
Rich Geldreich

I once worked at a local newspaper, operating the machine that inserted ads into papers. I also worked at a bakery, washing dishes and cleaning up.

My first real game job was as a C programmer working on a 3D PC game named Montezuma's Return. I made $1500/month as a contractor in 1996, which seemed like a lot of money to me at the time (as a 19 year old). From there my pay skyrocketed as I shipped more games and got more experience.

Was making a lot of money a stress reliever? Not really. My best paying gig (at Valve) was exceptionally stressful. I made like 1/3rd as much at Microsoft (at Ensemble Studios) but I was much happier and totally less stressed out. I think optimizing for a balance between income, happiness, and low stress is a lot healthier vs. just optimizing for highest income.

Collapse
 
timschumann profile image
TimSchumann

Stephanie - I'm curious about your education/employment timeline. Things like what type of jobs you had after secondary school, internships, first job after university, jobs you wouldn't put on your CV, etc. For example, did you go straight from secondary school into college, or was there work in between?

It's easy to look at you and see someone who's successful, but it's much harder to not assume all kinds of things about the path to that success. I thought sharing some of the actual path might make it harder for myself and other to write off your success as 'I could never do that.' If any of that is too personal, feel free to disregard.

Rich - IIRC you were involved with (responsible for?) getting Steam running on Linux. Just curious as to how long that took, what the process was like, what kind of problems you ran into, tools you used, new things you had to learn, etc. Of course I can't remember where I heard that so, if that's not the case hit me with your best math joke. Here's mine.

What did the Zero say to the Eight?

Nice Belt.

Thank you both.

Collapse
 
sehurlburt profile image
Stephanie Hurlburt

Hey!

So after high school, I worked lots of jobs throughout college. For my last couple years I needed to totally support myself and my partner who didn't work, so it was necessary to work a whole lot while also going to school. In college I worked as a tour guide, in the admissions office, as the business manager of the school newspaper, in the grants office, as a telemarketer. Then I dropped out of school. I worked at a coffee shop and as a sales associate at a clothing store. Then I went back to school in computer science, and kept supporting myself as a sales lead at that clothing store. Lots of jobs, often multiple held at the same time or overlapping each other.

In terms of programming jobs, after I graduated college I worked at a small advertising/design shop right out of college, then at Unity, then as a contractor at Oculus, then started Binomial with Rich!

Collapse
 
richgel999 profile image
Rich Geldreich • Edited

Hi Tim - Yes, I was one of the earliest members of the Steam Linux project. I was involved in the project for about 2+ years. I worked with all the major driver vendors to get OpenGL performance up to where it needed to be to have a hope of being a viable alternative to Direct3D.

I helped port and spent a lot of time optimizing many of Valve's Source1 engine games (such as L4D2, DotA2, CS:GO) to Linux, and I took the "togl" D3D9->GL layer and basically rewrote it to eventually outperform Direct3D. Getting the GL drivers in shape while also trying to navigate and survive the sometimes vicious backroom politics and yearly-firing cycles at Valve was very trick business.

While working on this project, I had one driver vendor snipe at me personally (with a patent attack on one of my open source libs), because I basically treated all driver vendors equally. This driver vendor basically infected Valve's Linux team with a couple of their hand-picked "embedded" engineers, which gave them certain advantages vs. the other vendors.

Tool wise, I used AMD's GPU PerfStudio, RAD's Telemetry, and a few in-engine ad-hoc custom profiling tools I created specifically to compare GL's batch performance vs. D3D9's. At the time, the available GL tools were almost useless for real-world work.

I had to learn a lot about Linux, OpenGL, and how the Source1 engine worked. I spent a ton of time debugging Source1 engine bugs.

I also spent some time porting Source2 to OpenGL, by wiring up the rendersystem D3D9 backend to togl, then optimizing it as a unit. I wrote the first working GL backend for Source2 and handed it off to another external engineer.

All in all, I had a lot of fun working on the project. Next time, I'll drink less caffeine and do it in a more supportive atmosphere.

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
 
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
 
wintermute21 profile image
John Best

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

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...