DeconstructSeattle, WA - Thu & Fri, Apr 23-24 2020

← Back to 2017 talks


(Editor's note: transcripts don't do talks justice. This transcript is useful for searching and reference, but we recommend watching the video rather than reading the transcript alone! For a reader of typical speed, reading this will take 15% less time than watching the video, but you'll miss out on body language and the speaker's slides!)

So hey. I'm Stephanie. I own a small company called Binomial, and we make a texture compression product. So I work primarily in C++-- and sometimes C-- Writing texture compression code. It's a subset of data compression. So I know a lot about compressing images and making them small. We're working across the industry, so we work with a lot of web developers and a triple-a game studios and, you know, people like Netflix and things like that.

But Gary said I could talk about whatever I want to talk about, so I'm going to talk a little bit about texture compression-- actually quite a bit near the end-- and I'm going to start out with why I started this business-- it's just me and one other person-- and talk a little bit about what I've learned about life and business this past year, or at least start with that. So a lot of people ask me why I started a company and why I sell my product. And this is why.

I started my career working in customer service jobs. I worked at a clothing store. I did that for about six years. And then I realized that I needed more money than that to survive. And so I went into tech because I've always really liked math. And I got unlucky in a lot of tech jobs. I worked mostly in the game industry, and I wasn't sure what to do after that. When you're in a lot of bad jobs, you sometimes think, that's everything that's out there. You know, you've had a lot of bad luck.

I also read a lot about this concept of sick systems or abusive relationships, especially pertaining to work or relationships as well. And I started to recognize a lot of these patterns in the way that I was living life. You know, too busy to think. Too busy to really reflect on things. There was always a crisis that you can't leave. You know, people would make you feel very guilty for leaving things behind.

And you thought it would all pay off, but that felt very-- very much in the future. And we all get stuck in shitty situations. That's the way life goes sometimes. But what surprised me was that I wasn't really doing anything about it. I was kind of like, this is the way-- this is the way that life has to be. So I started the business. I was like, forget working at a company. I'm going to try to be independent as possible.

And the number one goal was to feel safe. I wanted to work these full time jobs because I thought that would make me feel safe, but it ended up-- I felt very unsafe. I always felt like my job was in danger. So I was like, with my business, I want to feel safe. So the first-- I think the thing that made me feel safest of all is just talking to a lot of people, and basically getting an endless supply of contract work, which took a lot of work and a lot of talking to people, but it paid off.

So that if I ever run low on cash, I can call someone up and say, hey, can I do a quick contract for you and make some money. And so that was really helpful. And a friend of mine joined me who also had experience in the industry, so it wasn't just one person doing all of this. And then we kept our costs really low. We just worked from home. My cats were great assistants, and-- so, and then the second goal, the ambitious goal that I had was, I wanted to break free of that system.

When we started out, we were working with a lot of startups. And I would help people make all this money and get paid an hourly wage for it, and I was like, I could do that. So I wanted to kind of sell a product. The problem is, I'm from the game industry, and when you're in the game industry, selling to millions of people is a lot of work. And you're probably not going to sell to that many people, and you have to spend marketing costs and sales costs. So I thought, if I keep it small and just sell to other businesses, maybe that'll be easier. And it has been easier.

So that was kind of the idea. I wanted to actually break free. And of course, the first point has been really important to me. The reason why we haven't grown a lot is because we can't afford to, and we don't want to-- or we haven't been able to when we first started out. And I didn't want to treat people badly in the process and not pay them what they deserved. So when I started it, I kind of had a few role models. And I think-- I thought I'd share them.

In the C++ industry-- especially in the game industry-- it's not super common to start small companies, so I kind of picked at what I could. RenderDoc is amazing. He's actually a friend of mine. He just wrote this open source library, actually, while he was working in the company, because it helped him do his job at the company. It was a debugging tool. And he just kept the IP separate, and then open sourced it. And it was amazing. And a bunch of companies started using his debugging tool, and he didn't have time to add features to it. And then companies started paying him to add features to it.

And now he just hangs out and does that full time. So I thought that was very inspiring. And then [? Brad Game ?] Tools is a company that has a very similar business model to mine, where we just make a product and sell it. And then Disbelief Studio, Burning Candle Software, there's lots of consulting companies and-- that show that, even though with C++, you're often part of a very large pipeline, you can still do consulting work very effectively.

That was talk of business. I thought I'd shifted JPEG compression. So I work in image compression. I thought maybe I'd start with JPEG. So JPEG was invented before GPUs came out. It's very serial. It's not easily parallelized in the decoding step, but it's very small. In fact, it's so small that we literally can't beat it. Nothing consistently beats JPEG. It's awesome on CPU storage.

But the whole point of having image compression is to actually have a compressed image, right? That's why we do it. And it's not compressed on your GPU. So that's a huge problem. And, by the way, this applies to PNG and a lot of common formats as well. So that's JPEG. GPUs are what disrupted this. GPUs are kind of why I'm able to be in business and work.

GPUs are actually incredibly inspiring to me, and I hope they're inspiring to everybody. Because it's this piece of hardware that's, like, actively being researched, and actively, like, changing all the time. Sometimes to the frustration of developers. And it's an open problem. In fact, there's so many-- these days-- because of my work-- I meet with GPU hardware developers all the time to actually help them design GPU hardware with texture compression in mind.

And I just see, like, open areas of-- that need to be improved constantly. And I put a link there. I'll post the slides later of where you can learn about graphics hardware and kind of get up to speed with it. It's fascinating, because someone told me to read, actually, this exact link. And I thought-- I was like, this is really stupid. I'm the C++ developer. I don't need to know how hardware works. And reading about it completely changed the way I wrote code, and totally changed my paradigm, and it was really insightful and fun.

So AMD and Intel are both really good about that if you're into GPUs. So back to compression. We have this thing called a GPU. JPEG does not work with it, even though we all love JPEGs. So what do we do? We need to develop a compressed format that actually works well with GPUs. So it has two main requirements. It has to be able to access tiny portions of your image, and leave the rest compressed. And then it has to access them independently and be very parallelizable.

So what would you do for a format? Well, one person's solution is ETC1S. It works on all mobile devices except for older iOS. It basically plays off this concept that the developers of this thought that people noticed grayscale much more than they noticed actual color. So they split the image up into independent, four by four pixel blocks. Each one is one color, and then the pixels are just grayscale variations of that color.

It may sound really silly to you guys, but it saves on so much memory that you can turn the quality way up and it looks fantastic. It's actually a really awesome format. And, as you can see, it's all parallelizeable. Each four by four pixel block is totally independent, which is awesome. You can leave the rest compressed and just pull the block that you need. So that's one-- someone's solution.

Then you have DXT1. That covers most desktop devices, most consoles. And, basically, they said, I know ETC1 one believes that grayscale is what matter most. They decided that, actually, color is important. So you have this line and color space. And they choose to store two colors per block to represent the endpoints of that line. And then the pixels-- instead of being grayscale values-- the pixels are different points on that line.

So it's kind of cool. It's a different way to do things. It's-- writing a compressor for this is actually really hard, because the line is kind of-- you don't get infinite colors to choose from, and you can only select from certain points on it. So making sure that your color is right is actually really challenging in this format. Much more challenging than ETC.

Agreeing on a format is very important. And people are really bad at that. I-- you know-- Chelsea's touched a little bit about how people are bad at agreeing on standards. This is true of compression, too. So each GPU made their own format. That's how we're going to solve JPEG, they said. And so web developers, then-- if they wanted to use this fancy new GPU formats-- had to include a copy of every GPU format that they needed.

So actually, my company is aiming to solve that problem. We make an intermediate format that basically unifies all of these GPU formats. It takes subsets of each of them, and makes a common, block based format that's then transcoded to GPUs. And we're working with the Khronos group right now to standardize that in the industry so that everybody can use this format. That's why I'm talking to hardware companies to actually have this transcoder be in hardware.

And my goal is, basically, so-- hoping that those slides I just showed you will make no sense in 10 years, because nobody will use GPU formats anymore. It will just be abstracted away and a part from the hardware. That's what I'm currently working on right now.

And so, like, why would we choose to make a texture compressor, of all things? Well, I had experience working in low level C++ and graphics in the game industry. I worked on multi-threading graphics processes and writing particle systems and all kinds of optimizations around that. And my business partner, he once wrote a texture compressor. So we got contracted by this company. And they were like, hey, we're having texture compression problems. Can you write us a texture compressor?

And we kind of paused, and we said we could do it. But we could make it a product and make money. And obviously, there's interest. Someone's asking us to do this. So we kind of-- we said no to their offer and then built it anyway and sold it to other people, kind of. So I, like-- so that's why I always tell people who are like, well, how did you knew this would work. It's because, like, I literally had a customer right there. And it's always good to know that you will have a customer.

And actually, we've just made progress on it. And before it was done, Netflix contacted us and said, we really need better texture compression in our video. It's a huge bottleneck. And they said, I know it's not built yet, but I know you guys can do the work. And so they just gave us money for a license, even before it was done. And that helped us kick it off.

So a lot of people say, well, especially as a small company, like, aren't you scared that someone else will do it. And it's-- that's a complex question. Like, I think at an easy to grasp level, research costs money, and it's risky. For us, research is just, like, stuff we do between contracts. You know, we usually have a month of a contract and a month off. So it's not as risky to try out an idea. And then we're also specialists in low-level graphics and compression, and a lot of people would find it silly to, like, hire a compression expert for years if they don't specialize in that area.

So we can kind of help fill that gap. But more importantly, there's just too many problems to solve, as I'm sure you all know. And, sometimes, just having a solution that works-- that you know is done well-- is worth the money. And that's kind of what we've been banking on. And I also-- I get really excited about helping small middleware companies out. And-- especially small middleware companies that have our business model of, like, business to business sales.

I really like it because, with just a few customers, you can-- you're fine. Like, that's all you need. You don't need, like, a huge marketing team and to sell to millions of people. You just need to convince a few businesses that it's-- that your product is worth is worth buying. Or, you know, tens of businesses, depending on what your price is. But it's very achievable for a small team.

And there's also just so many problems to solve. You know, coming from the game business, you can have a very large game team, and there's still so many issues that you can't cover that people don't specialize in or there's just not enough people or there's other fires to put out. There's plenty of gaps to fill. And then we can always fall back to contracts if we need to. It took work to get that, but once you have that pipeline of customers and contracts, it's a nice little safety net.

So I spend a lot of time thinking how we can help other people out as well. So I teach a lot of free classes and workshops on C++. And I think tech is this amazing thing where, like-- as I said-- I worked retail for six years and I didn't learn any technology until five years ago. And now I run a company in technology, which is-- I don't think you can do that in lots of other fields, so I think it's beneficial to teach others the skill. And I really admire people who are able to go through these coding boot camps, for example, and then get jobs right afterward.

We also try to hire junior coders who we think won't have a shot at larger companies. Like, maybe they don't have a four year degree or things like that, and get some experience. And then I try to-- when you start a business, you have to kind of build up a network. So I try to use that as best I can. If any of you guys are junior developers or know of junior developers, I started this list of engineers that are willing to mentor other people who are starting out, and they just have open Twitter DMs because I told them to. And you can send them messages and they'll help you out. So you can click on that link to get that.

And I don't know. I guess the theme of these slides is that life is short and you should try to make the most of it and try your best to take care of yourself and go for what you want to do. And texture compression is just one way I found to do that, and a need to solve. But I think there's a lot of need for middleware companies in general. And I think it's really inspiring to see people going for that and trying that out and trying to make that work. And hopefully something about what I said was interesting or helpful. So thank you all for being here.