[Music] hello everyone everyone watching this is fired you can't say I didn't warn you turn off your phones noisemakers whatever I'm gonna get into a bit of a rant so I've met a lot of programmers in my day some of them ostensibly professionals and many of them did not meet what I would consider to be the minimum bar for their job and that's what I'm gonna be talking about today so let's play a little game I'm gonna go through a bunch of things you count up how many you answer yes to and sum all those up at the end there's only 50 things these are not these are just a sample of the 50 things that annoy me
not an exhaustive list of all the things that annoy me but we'll evaluate your score at the end so I'll say things in a positive way you say yes and then I'll talk about what happens when why didn't always mean when that goes wrong so this hour here I can take I can articulate precisely what problem I'm trying to solve how often I can't tell you how often I talk to a programmer and they're off in the weeds somewhere they're trying to figure out there they're solving ostensibly solving some problem working on some code moving some [ __ ] around changing some things what problem are you trying to solve what benefit is this to anyone but they can't answer that basic question so here's a this is the easy one we're starting here like unless you can tell me exactly what problem you're trying to solve you're just wasting time it's just noise in the team I have actually articulated precisely what problem I'm trying to solve so slightly
different you think you know what problem you're trying to solve but you can't actually tell me you can't say it out loud you can't say it in a way that I could even potentially understand what what problem you're trying to solve and you have to say it out loud right I have to be able to hear it I have confirmed that someone else can articulate what problem I'm trying to solve you think you know what problem you're trying to solve but other people probably have a really different idea of what that problem is so how often does it happen that I'm working with the programmer I'm working with somebody and they have a person they think they have a pretty good idea of problem they were trying to solve they delivered to somebody they're like this I didn't need this this was not the thing that I needed because they didn't confirm that did somebody else understood what they were talking about I can articulate what my problem is important to solve so I spent you know you will see I have seen many programs say ok I can totally tell you what problem I'm trying to solve
it's that these these equal signs are not lined up correctly in this file ok that's not an actually important problem to solve who does that benefit so and that's that's a small example but how often do we waste a lot of time solving things that actually have no value so why is it important I can articulate how much my problem is worth solving so I'm working on a thing and how long should I spend on this thing well it as much long as long as it takes ok [ __ ] off like that's no problem is worth infinite time right there is a maximum that this problems possibly worth solving is it a year ok great is it six months is it a month is it is two weeks how much is this problem we're solving how much in manpower and time and effort there is a limit what is it
put some boundary on the value of this problem I have a plan B in case my solution to my current problem doesn't work so I gets I get to the end of the project we'll get to a demo I have to deliver something for III or GDC or whatever and it's two days before of course and everything is broken and I have to say ok I have to give up and say whatever I was currently working on wasn't gonna work I have to get that Plan B in there I have to figure it out I didn't have a plan B so now I'm scrambling to try to figure it out and blaming everybody else blaming project management or whoever put this on the schedule or all the things I'm very angry and I'm trying to scramble for a plan B but the thing is I knew that the deadline was coming I knew that there was potential risk here and yet I didn't have a plan B in advance I didn't prepare for it oh wait that's a problem on top of that I have already implemented my plan B in case of my solution to my current problem doesn't
work I know there's this is risky I know that when it comes right down to it those last few days I'm going to have to do something why didn't I just implement that thing in the first place two things right one is one it's a safety net and everybody else can be confident because if you wait until the last minute to implement your plan B you have just made Adams stress to everyone on the team because they don't know if your plan B is going to work to put the plan B in first the second thing is you implement your plan B up front you probably discover half the time that that's good enough like that does the job I don't actually need to go to plan a or you discover something about my problem that I didn't anticipate at all and plant a wasn't gonna work so put your plan B in first I can articulate the steps required to solve my current problem so I get to somebody I'm stuck I don't know I don't know why I'm late I don't know why this I'm not able to deliver this thing okay what are the steps you need to do in order to solve
this problem I don't know I don't know like how could you possibly expect to solve the problem if you don't know what it is that you're trying to do of course that's why you're stuck of course that's why you're spending your wheels you can't actually tell me the individual steps that you need to take take the time to write those things down I can clearly articulate unknowns and risks associated with my current problem this is why everyone throws up their hands when you give estimates well I'm just going to multiply all your estimates by three or five or a hundred or whatever because I have no idea if your estimates have any value because you group them all the same there things that are low-risk things that are high risks are all equal this is two days four days whatever I don't know that's because you can't articulate actually what the risks are in your project what are the things you don't know about this what are the things that you need to study what are the things you need to test you can't articulate that therefore you cannot give a reasonable estimate I have not thought or said I can just make up the time
without immediately talking to somebody so it's Wednesday on a week you have something delivered on do to be delivered on a Friday I'll say something else drops on your on your lap some bug something else whatever you think ah I can make up the time so you work on that you get to Friday of course as always you didn't make up the time and the thing is late at that point on that Friday somebody comes to you said where's the thing well I couldn't do it because this thing drops on my lap on Wednesday and I got behind and all the things all right you knew that on Wednesday right you knew that happen on Wednesday that was not a mystery it was not a surprise that that happened in fact like you had all the information you needed to know to know that on Wednesday the problem is you thought you could make up the time on Wednesday you should have told somebody about it I write a framework and have used it multiple times to actually solve a problem that it was intended to solve so I could get into a rant separately about
frameworks which are usually an excuse to kick down kick a problem down the road to get somebody else to solve it but let's talk let's be generous and say you're building a utility of some kind that's actually useful have you actually verified that it does the job that it was intense do are you just waiting for somebody else to do that you can't if you haven't actually proven it works how how is it's about how has anybody else supposed to trust it I can articulate the test for completion of what my what the test of completion from what my current problem is how do I know when it's done how often do I talk to a programmer I don't know you know when is this gonna be done how good is it well it needs to be faster how much faster is that 10% faster ten milliseconds faster like how much how much faster is faster it needs to be smaller one byte smaller what ten megabytes smaller how much is smaller how do you know when you've crossed the line and when it's won enough is enough it's not you don't have infinite space here like there's a limit what is the
limit I can articulate the hypothesis related to my problem and how I could falsify it so what am I trying to prove I'm trying to prove that it's faster and cheaper I'm trying to prove that it's more usable I'm trying to prove that it's fun whatever the thing that I have a hypothesis right this is if I put this in it's gonna be more fun but why spend all my time looking at the positive numbers it's it you know I'm C you know this is this is how fast it is this is how fun it is whatever and I'm not looking for how I could prove it wrong and that's what we need to be looking for right that's the scientific method you have to be looking how you can prove how you could possibly prove this wrong who could prove it wrong you have no way if you haven't even thought about how it can be proved your hypothesis could be proved wrong you're doing it wrong I can articulate the various latency requirements for my current problem so say somebody's working on a system I say how long how long until somebody else needs this data like I'm writing a function how long until somebody else needs this data I
don't know right now right now is not an answer [ __ ] off like that's that's immediate latency for all the things so your system is going to be just blocked on the main thread and blocking everybody else on the main thread that's your answer to all the things immediately you can see for all the things no that is absolutely not the the answer right you have latency requirements there are latency requirements not everybody needs everything that you're doing in the next possible step right what is the requirement when do they actually need it you can if you can't reason about it you can't solve the problem I can articulate the various throughput requirements for my current problem how much do you need to push through the system this is a basic question is it really just one spinning Hume probably not you know is it one thing is it ten things a thousand things there's a 10,000 things there's a million things what is it what's what is the throughput that actually needs to be pushed into the system and what are the constraints of that we need to be able to articulate that I can articulate the most common
concrete case of the system I'm developing this presupposes when I'm sitting down with a probe that they can articulate any use case of the system that they're developing but let's say they can what's the most common thing what's the most common thing that somebody's going to do with your system well the most common thing is that they're going to be processing you know all the all the players in the game great how many is that I don't know it's some somewhere between ten and a hundred great so why is this function only take one thing right that's not your most common case or you've just told me your most common case and number greater than one and yet you've developed you developed an API around one thing why are you doing that I know the most common actual real-life values of the data I am transforming so somebody solving a problem what is what is the data look like I don't know it looks like you know it's an int it's something that you know it could be anything it could be anything all right it can't be anything there's some actual
values that are actually coming through here what do they look like what's the most common things well I've created this system that adds all these numbers together great but in real life 99% of those numbers are zero so we're still wasting a bunch of time what are the actual numbers that you're actually dealing with I know the acceptable ranges of all the values of the data that I'm transforming so somebody says you know infinitely large you can do anything with this you can do anything okay great really it can't it's not okay you can't fit infinity into your 32 bit int your file size your your your file size value is 32 bits so it's not going to get any bigger than that you have built-in limitations into your system what are they articulate them in a way that other people can understand like in articulate what will happen when somehow data outside those ranges enters the system so it's inevitable it's going to happen you have a range of things you
have an acceptable range of things somehow something is going to get in and that's not inside that acceptable range I have 32-bit file size for instance somebody drops in a gigantic file that they've exported from Maya great what happens does your machine crash does you know do you get does everything fail do you get a nice error mess says this is too big what happens when you when when this happens you should have a pretty good idea of what's going to happen and not just hope developing based on hope that it will never happen is not good engineering practice I can articulate a list of input data into my system roughly sorted by likelihood again that you can articulate any input data is a start but that I can say this is the most likely thing that I'm going to see I'm going to see you know a you know a set of static you know set of static things in the world let's look most likely thing the next most likely thing is I have a bunch of characters running around in terms of transforms whatever I can roughly sort my data based on likelihood great now you solve
for that starting at the most common thing solve for that next most common thing solve for that I know the frequency of change of the actual real life values of the data I'm transforming so I could recalculate this thing every frame every frame mmm great that only changes once a second that only changes once every once in a while when this other thing changes why are we worried calculating this every frame it's because you haven't reasoned about what the frequency of change actually is and the actual values that you're dealing with I have at least partially read the available documentation for the hardware platform and tools I most commonly use so you have somebody who's been working say on a platform say let's say desktop platform x64 for the last 10 years great mostly hasn't changed it's mostly the same roughly the same CPU family and yet you've never cracked the manual so open when things come up and you're like I can't read that I don't know what that assembly instruction does that assembly
structures hasn't changed in 20 years you've had plenty of time to look up what it is read the manual I have sat and watched the actual user of my system so I you can guess sometimes you might be able to read a forum with somebody bitching but unless you sit down behind some and actually watch them use and actually watch them complain and gripe and work around all the things that you broke you don't actually know what's happening I know this lowest part of the users of my the users workflow user of my systems workflow with high confidence so do you just had a tool and I thought that tools really sell so I threw away the tool and I said I'm creating a new system and the system is gonna be way faster the only problem is that it requires them to write this 2 megabyte JSON file by hand great that is now the slowest part of their workflow I know what information used in my system will need to make effective use of the solution so I built the thing I've said ok all they need all the artists need to do is optimize this
great they have absolutely no profiling information how do you expect them to optimize this you're not giving them the information that they need I can articulate the finite set of hardware I'm designing my solution for is this is the solution I'm supposed to work on a 6502 probably not ok so there is a piece of hardware this is not going to work on great let's start there what hardware is it supposed to work on ok desktop platforms within this range great we can reason about that which brings us to I can articulate how that set of hardware specifically affects the design of my system so I have a set of hardware there are requirements in the hardware there there are things that the hardware does how does that affect your system how has that affected your system if you can't tell me how how it how it affects your system then you are just blindly developing in an ether you need to tell me how the fact that this has Cindy how the fact that this even has an F you how that has affected your design in some way you've chosen floating point because there's a floating point unit that is a
clear and direct and trivial example of what how Hardware affects your design I've recently profiled the performance of my system the bar here is recently the bar is not never or I have once have you profiled it have you looked and see what happens I have recently profiled memory usage of my system we've run out of memory I don't know why that's solvable just look I have used multiple different profiling methods to measure performance on my system one thing I'd like to [ __ ] about is FPS is not a measure of profiling stop doing that [ __ ] like actually measure in milliseconds or any kind of real time how long something takes and then use different methods to do it as far as like know maybe something here can correct me as far as I know there's no perfect profiling tool every different profile or sampling profile other profiles are gonna give you a different insight into your data use more than one I know how to significantly improve the
performance of my system without changing the input output interface of the system is your system optimizable is there a way to get from here to there or have you painted yourself into a goddamn corner that you're never going to get out of I've just allocated all the things because whatever it's optimize it at the end there's no end there's no place where that's ever going to happen you've just created this this this memory spaghetti of all the different things all the different allocations there's no possible way we can undo that and without changing all the interfaces to the system or I return I've returned a value to go back to the latency point I've have a function that immediately returns a value unfixable zero latency everybody's gonna call that function and needs that value right there because you built it in so that it has zero latency requirement I know specifically how I can and will do bug live release builds of my work when they fail so some presumptions in there they will fail it's a promise that happens of course it happens but I know how did to build a
live release build whatever that means I do not need to be in a debug build in a debugger with source code with source code like that's that's great when you have it but it's necessary to solve the problem when you don't I know what data I'm reading as part of my solution and where it comes from I have actually written that down I've organized it I can reason about where I'm getting the data from because if I say hey how do we make your system parallel I have no idea because I have no idea what data I'm reading or where it comes from so now it's impossible now we're stuck in a place where you're just stuck in the main thread forever because you've never reasoned about where your data is coming from I know how often I'm reading data that I do not need as my solution so I'm reading in some data I'm reading in 90% of that data is useless I'm not using it I'm reading in you know every piece of information that I read I'm thrown way the vast majority of the cash line that I'm actually reading in because I don't need that piece of information so
I'm wasting most of the bandwidth of the memory bandwidth of the Machine I'm using I can't reason about it but unless I can actually say how much I'm wasting and maybe that's a reason trade-off okay I'm gonna waste half my cash line because of reasons fine but at least you can reason about it unless you can tell me how much you're wasting we can't do anything about it I know what data I'm writing as part of my solution and where it is used who's using this when is it used how is it used how what again what that latency requirements are can you reason about this at all or are you just writing arbitrarily anywhere in your system and you have no organization at all the expectation is that you are organized I know how often I am writing data and that I do not need as part of my solution so I'm writing extra things I'm running things that are always the same thing again unless I can reason balance I have actually looked at the data saved it out looked at it say hey you know what I write that every single time it's always the same thing or I have this giant system that essentially amounts to alert right how
well all that data that you know that you're writing that you don't need and just do the lerp but I can't reason about unless you can tell me what you're writing I can articulate how all the data I use is laid out in memory I don't just rely on some magical memory management to just put magical things in magical Ram like that's not how it works this is real memory that you really need to manage that you're actually responsible for as a developer like this this need your players require you to have a consistent a consistent set up in your game it needs to be consistently working and consistently as small as possible that's on you not on some magic system I never used the phrase platform-independent when we referring to my world because there's no such thing as platform-independent I never using the phrase future-proof when referring to my work because there's no such thing as future-proof it is 100% of fool's errand you how do you expect to solve a problem that you have no idea what that part you can't pre
solve problems that you have no information about I can schedule my own time well all right how many I don't know how many programmers that I use just a mess of scheduling I don't know what I'm doing I don't know when I'm doing it I don't know how to organize my time you're an adult person just how to use a calendar I am vigilant about not wasting other people's time it's nice to sides of this one is if you could have looked this up in five seconds on Google and why bother the whole team about it what's one side the other side is if you spent two weeks futzing with this when it could have been solved by somebody on your team in five minutes you're wasting their time because now they're going to have to help you catch up after two weeks so find that sweet spot maybe that's 15 minutes maybe it's 30 whatever find the sweet spot I can I actively seek instructor feedback and take it seriously I have a way of actually asking people for feedback and then I do something about it I am not actively avoiding any uncomfortable professional conversations there's
something wrong with the system I'm not just keeping that to myself I'm actually going to somebody and saying there's something wrong here we need to do something about it I'm not actively avoiding any professional conflicts similar I kind of think there's something going wrong these people aren't talking these things aren't communicating I'm actually doing something about it I consistently interact with other professionals professionally which means like I'm gonna set the bar really really low here no yelling no hitting like let's let's let's let's I'm gonna put that painting the bar on the floor I can articulate what I believe others should expect from me so a lot of people are waiting for other people to tell them what those expectations are here's what I expect of you all right how about you tell me what what should I expect from you can you articulate that I do not require multiple reminders to respond to a request or to complete work again you are all adult people waiting for somebody else to poke you is not an
effective way of getting your job done I pursue opportunities to return value to the Commons when appropriate you're all here because of the work that you've built upon other people you have taken some opportunity at some point to give give value back to the community at large I actively worked to bring value to the people that I work with you're part of a team there's a reason that you're part of a team you're not an individual person just doing individual things you are part of a team how are you bringing value to the rest of your team how where can you help them or you can you teach them where can you learn from them how do you interact with that team I actively worked to ensure unter underrepresented voices are heard so the thing that pisses me off lots of things piss me off here people but one of the things that piss me off is of course the old standby it's a pipeline problem and it's not my problem and all the things right well [ __ ] that [ __ ] it's like well do something anything right make sure that that and especially if there's somebody in the room make sure that they're heard make sure that you're not talking over everybody unless obviously you're
standing in front of a room and that's your job but make sure that people are heard so that's 5050 things that piss me off again a sample not exhaustive so let's let's grade so if you had a score of 0 to 20 you agree you you did 0 to 20 of those things in the positive sense fired all right you have a score of 21 to 40 fire 40:1 to 49 fired score 50 this is the minimum bar like you can argue with me of whether or not this is a you know this is the right minimum bar but it is a minimum bar I'm not trying to set the bar that high these are basic expectations really simple things that we should expect from everybody and I think that's you know it's what is what is the absolute minimum that I can expect people to do and I think this
represents a good portion of that thank [Applause]
Auto-generated captions from YouTube — names and numbers may be misheard.
Distilling the key insights…
Game Developers Conference · 2026
The Game Business · 2026
Comments