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

Stephanie Hurlburt on August 30, 2017

We're Stephanie Hurlburt and Rich Geldreich, ask us anything! We own a company called Binomial and we make a texture compression product called ... [Read Full]
markdown guide
 

Hey Stephanie,

First of all you are doing great work on Twitter, I just wanted to ask how do you keep on working if you face anxiety. My anxiety cripples me to the point when I can't do anything. I love to code but the feeling that I am not good enough is immense.

 

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

 
 
 

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)

 

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.

 

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!

 

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

 

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?

 

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.

 

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.

 

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

 

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!

 

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.

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.

 

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!

 

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.

 

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!

 

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.

 

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!

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.

 

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?

 

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.

 

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

 

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.

 

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)?

 

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.

 

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?

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.

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.

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.

 

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.

 

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.

 

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!

 

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

 

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

 

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

 

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.

 

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.

 

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

 

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

 

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!

 

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

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.

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.

"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

 

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.

 

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.

 

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.

 

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!

 

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.

 

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?

 

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.

 

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.

 

How to stay focused & productive while working from home?

 

We have a "work area" of the house-- a place that's only for work. And we don't work in other areas. Sometimes I like to work in coffee shops too.

I think the key is associating a place with getting things done, and associating everywhere else with nothing to do with work. Building up a routine really helps, having goals every day helps. And we don't have kids or roommates/other family members around, but if we did I imagine finding an uninterrupted space helps too (I know folks who purposefully get a coworking space or always work in coffee shops, for example).

 

Having a 'no work' zone in my house has been SO helpful.

 

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?

 

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.

 

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

 

HI! Two questions: (1) What are some essential skills I need to develop in order to work remotely? (2) I've never enjoyed programming, but it seems to be the only way I will be able to get a work visa abroad to move to Canada or Germany (my third world nationality has been a bane since the day I was born, along with the terrible education I had), I don't enjoy front-end development but love designing and storytelling, currently I'm taking a VR nanodegree at Udacity, but I often think about whether I'm focusing on the right things... Any recommendations or thoughts? Should I focus on more practical skills like data analysis or rails dev despite not enjoying it much? Much love and thank you for doing this!

 

1) Working remotely doesn't really require different skills. I think the key is just working extra hard on finding those jobs and building up a good online presence to attract employers. Get a good website built, search for the job postings, network, etc.

2) You can get a job in all kinds of programming fields, it's really hard to say "Study this and not that for a job." I would be active in a lot of online communities and do a serious job search now and make yourself a list of remote jobs you'd want. Then try to talk to someone at one of those companies or in related fields, and ask them what skills they'd like to see. You can find some mentors here: stephaniehurlburt.com/blog/2016/11... . Make that list of jobs and reach out to related mentors to see what skills you need to build up.

 

Thank you for taking the time to read this and answer! IT REALLY MEANS A LOT!

 
 

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

 

Are you collaborating with AMD Radeon in any way? I saw you at this year's Capsaicin event in March. AMD's Vega architecture also has a form of texture compression tech called HBCC (High Bandwidth Cache Controller). Does basis have anything in common with that? P.S when can we expect this tool to be released?

 

Basis is already ready to be licensed to companies, folks can contact us at info@binomial.info for that.

In terms of releasing a public spec, no dates yet but we are definitely working on it.

In terms of AMD, I can't speak publicly about any agreements with them, but I can say that a goal of ours is to get Basis in GPU hardware and that's a big reason we're working with the Khronos Group.

 
 

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

 

Curious to the story behind naming your team 'Binomial' (as I'm a maths lecturer and coding hobbyist).

 

Stephanie and I were sitting around in a cafe in U District, trying to think of a company name. Stephanie had a bunch of college-level math books, so I looked through the index of each one and read out loud anything that sounded remotely interesting.

We choose Binomial because we're a two person company and it implied "two", and because it sounded cool to us. Our product Basis also involves a lot of linear algebra and optimization algorithms, so we wanted to choose something mathematical.

 

What do the next 5 years in your industry look like?

 

That's a big question! In the texture compression space we're in specifically, our goal is to get Basis as the industry standard and to completely abstract away existing GPU compression formats. We want to get Basis into hardware and browsers and improve compression for everyone.

code of conduct - report abuse