Jump to content
  • Advertisement
  • entries
    99
  • comments
    363
  • views
    128872

Contract Work

slayemin

3928 views

I need to make money to fund the further development of my game. So, I've been doing paid contract work in VR. Most of the work is pretty easy for me and consists of producing VR applications which run 360 videos with some interactive GUI elements embedded into it. I also have been helping other game developers produce their games. Initially, I charged $50/hour for my early VR programming work. I believed that I needed to figure out the development process and it would take a bit longer because it was new to me, so I felt bad charging a higher rate. I got it figured out now, so I raised my rates to $75/hour. I... think I made a mistake.

The way I came up with $75/hour is pretty straight forward. I took my previous annual salary and divided it by the number of hours in a full working year, and that gave me a rough ballpark on my hourly rate. The flaw in this approach is that I was assuming that the amount of work I have would be constant, that I would be working a full 40 hours a week with billable hours. The reality is that I have huge gaps between projects, so that means I have huge gaps between billable hours. So, the general intuition would be to increase my hourly rate, right? I think that's also a mistake.

The problem is that I've gotten too fast. It used to take me something like 10 hours to produce a 360 VR video app. That's because I built it from scratch. Now, I have a code base and template I reuse. It takes me about 2 hours to produce a simple video app. With an hourly fee structure, it's more profitable for me to work slow so I can charge higher bills. But I can't do that, I'm an honest man and my integrity is priceless to me. I'm also a lazy engineer which causes me to strive for efficiency so I don't have to do tedious, wasteful work. Spending 10 hours on a 2 hour project would feel like a waste of time and an antithesis to common sense. So, I'm tentatively thinking that the correct fee structure is to charge a per project cost. If I quote someone for $5000 to complete a project, that's what I'll charge regardless of how long it takes. If I can finish the project in 5 hours, congrats, I just made $1000/hour. If it takes me 50 hours, then I made $100/hour. Now, I'm properly incentivized to work fast and efficiently. The faster I work, the more rewarding it is. This comes with some risks as well. What if I estimate that a project will take 15 hours, bid accordingly, but it really takes me 30 hours to complete? I'm making another mistake here...

I'm not taking profit into account. If I step outside of myself for a moment and pretend that I'm an employee to myself, and employees are paid an hourly rate (let's say $75/hour) and I'm bidding on the cost of a project based off of just my raw production costs, then I make $0 in profit. All of the income goes directly into paying for the employee salaries, leaving nothing for the company, meaning growth is impossible and I lose money over time due to overhead costs. Instead, I should be taking the employee salary ($75/hour) and multiplying it by a factor of at least 2.5x. If I replace myself with a hired employee and keep the same fee structure in place, then the company is equally profitable because I am interchangeable with other workers. If I add more workers to the team, then of course my bid estimates will change. So, the total bid = sum of all wages * 2.5x;

For clients, this could be a pretty good system as well. Instead of having runaway costs inflate a project budget, there is a fixed cost of production. My biggest challenge will be to accurately estimate the scope of work and bid accordingly. If I underestimate the scope, then I eat the cost difference. If I overestimate the scope, more profit, more reward! But then, I also come full circle to the original problem I had: If I originally took 10 hours to finish a project and bid accordingly based off of that time estimate, but through experience, innovation and increases in efficiency I now reduce that same work to 2 hours and bid accordingly, I would still be losing the hourly difference. So, do I bid as if I'm starting everything from scratch because my competitors would be in the same position? Or do I look at the requirements of a project and use that as an input parameter into a piece-wise defined function to assess estimated cost? Or, do I just pick high numbers in a random ballpark and hope to get lucky?

Obviously, if requirements change, then the cost should change proportionately as well. If I charged a flat $10,000 for a project given its requirements / feature spec, and then a few weeks later the client decides to add/subtract a requirement, how would I figure out how to proportionately adjust the pricing to reflect the change in scope? I... don't... know...

One other thing I'm finding annoyance at is that some clients aren't good clients to take on. Indies and startups are bad because they often don't have money, no matter their good intentions and promises. If it's going to break the bank for them to have me work for them, it's likely they'll be unable to pay me or that it will take 6+ months for me to get paid. I owe people money, I can't keep them waiting because I'm waiting to get paid. If they're sweating over my up front fee of $150, I shouldn't take them on as clients. My policy should be, "If I think they can't afford me, they can't afford me.". It may be better to risk leaving money on the table than taking on bad clients. Maybe I should increase my fee to weed them out?

Another factor I hadn't considered are the non-billable hours I put into project efforts: Responding to emails and answering phone calls. On some projects, I've put more hours into phone calls, conversations and emails than actual, billable hours. Now, I want to be a nice person and to be easily accessible to my clients, but every hour I spend on email or phone calls is an hour I'm not spending making money. Every hour I'm not making money is also an hour I'm not working on Spellbound. I'm tempted to charge for my time here, but I don't want to start a stopwatch every time my phone rings or I get an email requiring a response. Maybe I should just pad my estimated hours to account for time spent communicating? Or maybe I should measure the average amount of time I spend doing administrative stuff on behalf of a project, and adjust my multiplier accordingly? Instead of a 2.5x hourly rate, maybe 3.5x?

The last few factors I also hadn't been considering is that I'm a freelancer, with talent and experience, ready to hit the ground running, today. I'm not an employee, so I don't get "company benefits". No medical. No dental. No vision. No retirement fund matching. No overhead costs (HR, managers, office space, parking, cafeterias, admin staff, etc). When the project is complete, I am done and go away -- an employee would still incur costs afterwards. No employee liability. Don't like me or my work? Fire me, no mess, no HR hassle, no legal wrangling. That means I have to pay for all of that stuff out of my own pocket, so I need to charge more as a contractor.

My girlfriend has taken ample opportunities to remind me that I'm not charging enough. She told me that based on my skill set, I would be equivalent to a "technical editor" in the Hollywood film industry, and they charge something like $175/hour. Based on my background and experience, and how niche my industry is, she believes I should be charging at least $300/hour. That... makes me a bit pale to consider as an hourly rate. I have a hard time believing I'm worth it. But hey, if I can complete a project in hours which would take other people 5-10x longer, if not more, than maybe I am worth it. I recently went and visited a motion capture studio near my office to figure out how I can use them and what their rates are. They charge $3750 for 4 hours, or $8000 for 8 hours. That's a lot of money for a poor indie like me, but... really, it's not a lot of money at all when you think about it. I should be charging roughly in that ball park, right? Deep down inside, I think I feel afraid to charge a lot of money for what I do. But I think I need to reframe the way I think about this. People aren't hiring *me*, they're hiring *my production company*, and for now, I just happen to be the sole employee. If I staff up in the future, I wouldn't feel bad charging high rates to cover my costs. But staffing up would also mean I have to dedicate a significant chunk of time towards staff training, and I'm capable of training staff, so... that means I'm pretty good, right? I guess I just see the work that I do as "easy" and "enjoyable" and I shouldn't be getting paid for this. But, the work is only easy for me because I've got 18 years of experience and the projects I take on are 10x easier than writing my own game engine from scratch, or building enterprise systems for the military. Truly, the biggest risk for me is that the work is such a cakewalk for me that I am bored by it. I was realizing this afternoon that I'm most incentivized to work on other peoples' projects when I'm getting paid really well for them. $75 per hour is not enough money to motivate me to overcome my boredom, but $150/hour is.

My girlfriend also tells me that I'm terrible at business, that I don't really have the head for it. I half believe her because she's a lot more experienced than I am, and she's bringing in a lot more money than I am. I've been thinking carefully about what I'm currently doing, how it's not profitable, and what I need to do in order to make my work profitable and worth my time. With my current flow of contract work and my billing rates, I don't make enough money. Honestly, it's just barely enough to pay my cheap office rent. I'm practically treading water, getting nowhere even though I'm working hard. For the last few weeks, I've been thinking that I need to get more proactive about getting money. I need to get out of my chair, put on a nice dress suit, take my VR goggles, and go door to door at every company and show them what I can do for them and how it can help their business. I need to figure out my sales pitch, refine it, and go get myself some big work. I believe in VR, I think its the future, I am bullish on its prospects, and I can sell. I have proven to myself that I have the personality and capability to sell, I can build what I sell, so... I should just get up and go do it. I'm optimistic that I could do well, but I'm sort of holding myself back somehow. The dream is that I do well enough at bootstrapping that I can work myself out of every job and become more of a CEO/producer type, hiring people to replace me. Programmer? Hire that out. Sales guy? Hire that out. Film guy? Hire that out. Hire people for everything -- delegate -- don't get my hands dirty, don't get into the weeds. If I do, I'm still doing it wrong. While I'm fully capable of writing code and producing everything myself, I can't scale. I would be just one guy, taking on projects with a scope of what only one guy can complete. Big projects = big money.

I also sort of think that I should split my time 50/50 between providing services to clients and creating my own software applications and releasing them online. The problem with exclusively doing work for clients is that it fixes my scalability to whatever workload my production company can handle. My throughput is fixed, and thus my income is limited by my throughput. It would be a trap which limits my growth potential. However, if I build and release my own apps at the same time, my growth potential is limited only by my marketing and sales capabilities. Once an app is completed, I can make an infinite number of copies in an instant and sell them. If I diversify and make several apps in several different market categories, a few of them are bound to succeed. I have been particularly infected by an idea which could potentially establish a new market category for content in the VR market (I'll share details after I execute). If I can produce it, market it, and sell it, and it thrives, then I could scale it out and go big. I'm planning on creating a working prototype this spring and releasing it to the market to see how it fares. Anyways, the point is that it would be easier to make $1m by scaling out a successful app than by scaling out client services, but a successful app could also be an additional service category offered to clients. However I do it, I will fund the production of Spellbound and I will have a well funded team working on it...eventually.

Anyways, I did something cool the other day. I integrated Leap Motion with 360 videos, so you can use your own hands to pan the camera around. I'm also going to add in finger taps for pressing buttons, so people can feel sort of like Tom Cruise in Minority Report. The placeholder video was shot a month ago at a Dell factory in China as a part of their effort to be transparent about their production pipeline. Check it out:

 



29 Comments


Recommended Comments



Figuring out what to charge as a contractor is always fun... I wrote a bit about it a few years back, though in retrospect it's woefully incomplete (doesn't account for health insurance costs, primarily, as I wasn't paying for it at the time).

For what it's worth, if an enterprise hires a contractor via a contracting firm, they are going to be paying the contracting firm a good 4x the salary of a full-time employee doing the same job, so your 3.5x may be on the low end.

Share this comment


Link to comment

I mean if you could get $300/hr or even $150/hr I doubt you'd be so interested in your own projects. Those are crazy figures, I have never seen a contract developer charging higher than $120-150/hr and that was for very niche stuff with a lot of domain knowledge outside of the software side (medical, physics, etc).

In the UK, even contractors working as quants (very specialised financial maths) might top out at £100/hr though they'd be in the office and billing £700/day. Which is about $140/hr right now. They have years of experience in that specific field.

Now if you hire in a big consultancy you might be paying $1500/day for a resource they pay about $300/day but that's a whole other rip-off market. Better to bill project-based not hourly if you want that.

Perhaps you're in Silicon Valley and people pay stupid money but here in the UK the contract market pays about 2X what you'd get for a salary. The people here billing $150/hr are not people who would be on $50k salaries like regular developers.

Share this comment


Link to comment
1 hour ago, d000hg said:

here in the UK the contract market pays about 2X what you'd get for a salary

Contractor rates are generally a little more reasonable in the UK relative to salary, at least in part due to the presence of social safety nets.

In the US you have a bunch of punitive expenses if you are self-employed. For example, you are looking at needing to spend $1k/month on average for healthcare for your family. Daycare runs $1k/month for each kid. School tuition anywhere from $1k-$3k/month for each kid... the overhead add up in a hurry.

Also no unemployment benefit available to self-employed folks over here. If the contracts dry up, you are just broke.

Share this comment


Link to comment

As someone who has hired contractors like yourself for various projects in the past, you're "cheap" as an individual contractor. I would expect $120-150/hr at a minimum.

I'm not clear how you provide the estimate/charge, but as the customer I've always preferred fixed fee over hourly contracts - basically I have a project, tell me your project estimate/cost, and let's agree to a number with a set of milestones (perhaps payments per milestone).

From my viewpoint as the customer it reduces the risk of budget overrun, recognizing that the contractor might have a template and be making big profit off me. Most projects overrun, so I'd rather take the risk. Seems like you're in a great spot to make big profit with that model though.

Share this comment


Link to comment
6 hours ago, khawk said:

As someone who has hired contractors like yourself for various projects in the past, you're "cheap" as an individual contractor. I would expect $120-150/hr at a minimum.

I'm not clear how you provide the estimate/charge, but as the customer I've always preferred fixed fee over hourly contracts - basically I have a project, tell me your project estimate/cost, and let's agree to a number with a set of milestones (perhaps payments per milestone).

From my viewpoint as the customer it reduces the risk of budget overrun, recognizing that the contractor might have a template and be making big profit off me. Most projects overrun, so I'd rather take the risk. Seems like you're in a great spot to make big profit with that model though.

Yeah, that's exactly what I'm thinking. I may eventually use a template to create products for people, but it's a template I created based on common use cases and needs and I have to be careful to not let the capabilities of the template limit what I can offer to clients. I'm going to switch to charging by project instead of by hour, and the cost is going to be a function of specs and complexity, and my hidden cost variable will be how much R&D I think it's going to take. The R&D costs are going to be the mystery box in terms of time costs and the biggest risk for cost overruns, so charging by project will insulate clients from that risk (as you mentioned).

My girlfriend also tells me that if I charge way below the going market rate, people will assume that I'm not very good. There's an implication of "higher price == higher quality", and "higher price == more serious".

Share this comment


Link to comment
9 hours ago, d000hg said:

I mean if you could get $300/hr or even $150/hr I doubt you'd be so interested in your own projects. Those are crazy figures, I have never seen a contract developer charging higher than $120-150/hr and that was for very niche stuff with a lot of domain knowledge outside of the software side (medical, physics, etc).

In the UK, even contractors working as quants (very specialised financial maths) might top out at £100/hr though they'd be in the office and billing £700/day. Which is about $140/hr right now. They have years of experience in that specific field.

Now if you hire in a big consultancy you might be paying $1500/day for a resource they pay about $300/day but that's a whole other rip-off market. Better to bill project-based not hourly if you want that.

Perhaps you're in Silicon Valley and people pay stupid money but here in the UK the contract market pays about 2X what you'd get for a salary. The people here billing $150/hr are not people who would be on $50k salaries like regular developers.

Yeah, it may sound like a high hourly rate for a contractor. But I think comparing me to a typical contractor is sort of an apples and oranges comparison. A typical contractor would be someone who hops into an existing project and contributes code to it, progressing the project forward a bit. In my case, people give me the whole project and expect me to finish it from beginning to end. It's comparable to contracting a company to produce a commercial vs hiring an individual to be a part of the film crew. People will pay me to deliver a product to them -- they don't care how I do it or what it takes, so long as I can deliver it on time, on spec, and on budget. If I have to hire a crew of people to help me, they don't know & don't care. They're contracting a production company, and I just happen to be the sole staff member for the time being -- they don't need to know that, but it also won't always be true either because larger projects may require me to staff up. So, if I quote someone $10k for a project, my actual hourly rate will not really matter. In some ways, I think that thinking in terms of an hourly rate is more of an "employee" mindset than an entrepreneurs mindset, and I need to break myself from that habit because its holding me back.

Note: I'm in Seattle, which is like Silicon Valley 2.0

Edited by slayemin

Share this comment


Link to comment
8 minutes ago, slayemin said:

Note: I'm in Seattle, which is like Silicon Valley 2.0

As a fellow Seattle resident, hi! And you are way undercharging for here. 

Share this comment


Link to comment

Setting yourself up as a business not a contractor is where the big bucks surely are, though if people don't flinch at those rates go for it... makes me wonder why bother with your own project :) 

Also as a very experienced C++ developer with gaming/performance background, if you'd like to tell me where to find people offering $150/hr that's be swell ;)

Share this comment


Link to comment

Note: 'Hire that out'.

In today's world, you might find that harder than it sounds.

I've been struggling the past 3 months trying to compromise between my work ethic and current market trends. The free agents out there are rarely someone I'd actually want to hire, which is the crux of the problem. I half-expected at least half of the programmers I'd meet to be 'good enough or more', but that couldn't be further from the truth. It seems that, lately, everyone that's ever written a line of code calls themselves a programmer, while I, refused to call myself one until recently (after I realized that's what I've been doing most of my days for the past year) even though I started at age 7 and didn't spend a month in my life without doing it.

 

What I found to be working for me, as an entrepreneur, is to ship out very specific pieces of work that unload my pipeline. I create a very clear document of what I need done, even if it takes time (and half-defeats the purpose of hiring to get it done) and I get someone to work on that very narrow piece. Obviously, it only makes sense for complex and heavy systems (think, 'crafting' and the likes). This allows me to 'be in control' about the projects, as I don't lose my grip on them. Control-freak? maybe... but it works at least.

Share this comment


Link to comment

Good morning. Just wanted to post a little insight here. First off, the value of someone's time is exactly the price they put on it. Some people want $250/hr (literally, I've worked with them) and some people are happy to do some consulting work for a small PayPal tip. What it comes down to is doing the analysis on what you need for what you are trying to accomplish.

The OP stated he is looking to do some contract work to supplement his development. Pricing himself at $75/hr is the price that he feels his time is worth for what he is looking to accomplish. A strong senior C++ coder with VR experience on a professional, full time gig does NOT make $150 an hour. Period, stop. If you are one of the top VR engineers in the industry and you get hired to consult on a piece of contract work you might get $200 but that is between you and the studio doing the hiring. Those jobs are few and far between. Most studios are hiring junior to intermediate people on full time for hourly wages in the $15 to $35 range. (coders overseas for the $15 and here in NA most of the major studios are not paying $40 for full timers)

What you need to assess when contracting work out is:

A) The clear scope of what you are looking to achieve

B) How senior does the resource need to be to achieve the scope

C) How much QC are you willing to do to clean up the work

The reason I wanted to respond to this thread is that in indie development I have had the chance to work with some amazing talent and I don't measure their contribution by the amount of money I paid them. Some of the best people have volunteered their time and, as an example, some of the most sophisticated server code I have been invovled with was developed in a few hours for $100 tip via paypal.

To the OP I wish you luck on your endeavour. We all need cash infusions into our developments from time to time. I did a sustainability plan years ago, just did yet another revamp 2 weeks ago. I hold out for cheap contract resources myself but that definitely impacts timelines. It has however introduced me to some amazing people and talent.

All the best to everyone.

Mark

Edited by Slyxsith

Share this comment


Link to comment
3 minutes ago, Slyxsith said:

A strong senior C++ coder with VR experience on a professional, full time gig does NOT make $150 an hour. Period, stop.

They do in Seattle (or any other major US tech hub). $150/hour == $300k/year salary. That's somewhere in the low-to-mid of the compensation range for a senior engineer around here.

And that salaried senior engineer is also getting healthcare, retirement, etc on top of their compensation. Which as a contractor, you need to factor into your rates.

Share this comment


Link to comment

Welp I am not going to argue about it, if that is what you see that is great. I just did a quick lookup for Seattle C++ developer and the first page of listings contained roles for under $50K a year.(Full time not contract). I didnt see a single offering over $50K (this is in Seattle) but that being said there were several listings without rates.

Again, not trying to devalue coders. Everyone's hourly rate is exactly what they feel they are worth to the hiring company. Just pointing out that based on my experience dealing with appliciation integration and the coders that my programs have hired the rates are much lower. (Just for clarity these are full time coders. I did recently have to bring in specialist coders for $250/hr for 2 days of contract work to address a critical core issue. This was in Fall 2017 in Calgary AB)

Edited by Slyxsith

Share this comment


Link to comment
15 hours ago, Slyxsith said:

Welp I am not going to argue about it, if that is what you see that is great. I just did a quick lookup for Seattle C++ developer and the first page of listings contained roles for under $50K a year.(Full time not contract). I didnt see a single offering over $50K (this is in Seattle) but that being said there were several listings without rates.

Again, not trying to devalue coders. Everyone's hourly rate is exactly what they feel they are worth to the hiring company. Just pointing out that based on my experience dealing with appliciation integration and the coders that my programs have hired the rates are much lower. (Just for clarity these are full time coders. I did recently have to bring in specialist coders for $250/hr for 2 days of contract work to address a critical core issue. This was in Fall 2017 in Calgary AB)

I have a hard time believing that the average developer salary in Seattle is $50k (source?). No way. I was paying my artist $50k, and that came out to $24.05 an hour. The minimum wage in Seattle is $15/hour, so a developer who went to school, got a 4 year degree in computer science, makes $9/hour more than a starbucks employee? That doesn't sound right. The biggest employers for developer talent out here is Amazon and Microsoft, and both pay devs between $70k to $140k, depending on experience and position, so their hiring volume would skew the market average pretty significantly.

It's very well worth pointing out the difference between a full time employee and a contractor as well: Contractors have to charge higher hourly rates because they have downtime between gigs, so if you want to make the equivalent salary to an FTE with less hours, you have to charge more. It's worth it though, the contractors are usually specialized experts who can hit the ground running and become rapidly productive, all without the typical overhead management costs of staffing.

Share this comment


Link to comment
15 hours ago, Slyxsith said:

Good morning. Just wanted to post a little insight here. First off, the value of someone's time is exactly the price they put on it. Some people want $250/hr (literally, I've worked with them) and some people are happy to do some consulting work for a small PayPal tip. What it comes down to is doing the analysis on what you need for what you are trying to accomplish.

The OP stated he is looking to do some contract work to supplement his development. Pricing himself at $75/hr is the price that he feels his time is worth for what he is looking to accomplish. A strong senior C++ coder with VR experience on a professional, full time gig does NOT make $150 an hour. Period, stop. If you are one of the top VR engineers in the industry and you get hired to consult on a piece of contract work you might get $200 but that is between you and the studio doing the hiring. Those jobs are few and far between. Most studios are hiring junior to intermediate people on full time for hourly wages in the $15 to $35 range. (coders overseas for the $15 and here in NA most of the major studios are not paying $40 for full timers)

What you need to assess when contracting work out is:

A) The clear scope of what you are looking to achieve

B) How senior does the resource need to be to achieve the scope

C) How much QC are you willing to do to clean up the work

The reason I wanted to respond to this thread is that in indie development I have had the chance to work with some amazing talent and I don't measure their contribution by the amount of money I paid them. Some of the best people have volunteered their time and, as an example, some of the most sophisticated server code I have been invovled with was developed in a few hours for $100 tip via paypal.

To the OP I wish you luck on your endeavour. We all need cash infusions into our developments from time to time. I did a sustainability plan years ago, just did yet another revamp 2 weeks ago. I hold out for cheap contract resources myself but that definitely impacts timelines. It has however introduced me to some amazing people and talent.

All the best to everyone.

Mark

I don't know what part of the world you live in, but there's no way I could sustainably charge people $100-200 for working on their projects. Before going indie game dev, I used to be a senior dev making $240k/year. I'm a professional developer. This work is my profession which means I make my living from it. That means I need to make enough money every month in order to pay my costs of living (food, rent, bills, costs of living, etc) and also add in some profit margin to make it worth my time. If a client can't afford my rates, they're the wrong client for me and I turn them down (ie, most indies).

But you're right: I can't compete on price with run of the mill developers based in India, charging $10-15/hour for their work. No way. I have to compete in better ways. I'm local. I can come visit an onsite location daily if need be. English is my native language. I have the same cultural value system. I have 19 years of experience. I'm not a code monkey, I look at all work I do in context to larger objectives. I can work effectively with people and communicate clearly. I complete my projects on deadline, on budget, on spec. My code is maintainable. I can teach/mentor junior devs. I'm also pretty specialized because I work in VR, but also have a broad range of experience to pull from. I'm worth far more than $75/hour, but that's what I was charging for now (to build a client base) and it was a pretty good deal.

I have a friend (John) in high school who started his own company. He needed to build a specialized app for his business, so he decided that he would outsource it to India and save money. On paper, it made sense. Why pay an american professional when you could hire 5 Indians for the same price? You'd get significantly more work done for the same cost! Or, the same amount of work done for a fraction of the cost! My friend dove right in and hired a team to build his app. His budget was around $20k. He discovered that his biggest challenge working with a remote Indian team was the communication gap. He could write a spec sheet and functional requirements, but what he got rarely matched and was buggy. He had to send it back for rework multiple times. The code was often a mess. The language barrier made it hard for his team to understand him. The cultural difference made him have to not tell his devs they were "wrong" on something because their feelings would get hurt. QA was a nightmare. When all was said and done, the project costed him $50k, was very behind schedule, met functional requirements, but was unmaintainable. I thanked him for telling me his story and woes. Not every international developer is bad, but the point is that the true costs are more than just the dollar amount you pay (time, team management, stress).

Lastly, there are some devs who do work for really low rates. They seriously undervalue themselves and don't charge high enough rates for what they're worth. This has been me, even at $75/hour.

Share this comment


Link to comment

The fact that that guy even believes 50K is a good number in Seattle is stupid. Maybe some jobs are low-balling, Yes there are awful jobs that might try to pay low, I've seen plenty of them. They might not be exactly be in Seattle city limits either. But 100K anywhere in the US is the typical average for a Mid/Sr programmer (10 years experience).

$150/hr is pretty pricey. I could see someone potentially getting away with that but hmm.... 100K/year is $48/hr. Factor in that in the US your employer also covers your half of employment/social security taxes (6% or whatever), offers some help in healthcare benefits, and should be offering a retirement plan, then 150K is a pretty up there number for developers. Seattle is definitely inflated because of the price to live there is awful. 200K is top what anyone should be getting paid in Seattle. Not saying specific jobs won't go higher with bonuses, but if someone is shelling out 200K including all benefits that's not business smart.

From what I know Slayemin never had real game experience before starting his venture. I think the indie game market is such a risk that diving head first and hiring an artist was probably a mistake. I'm trying to make an indie game, but I'm super scarce on budget and keep my day job as a good safety net. Good luck on the journey. Not to discourage but VR is a tough spot, I'm not sure what the potential is of your game or how much more content/quality you think you can get on your return on investment, but it is a business at the end of the day. You started with a lot of money and that sucks to be in this spot. If you are a good dev then you can certainly rebound with a good job. Work at Amazon for a couple years and make bank out there.

Edited by dpadam450

Share this comment


Link to comment
9 minutes ago, dpadam450 said:

200K is top what anyone should be getting paid in Seattle. Not saying specific jobs won't go higher with bonuses, but if someone is shelling out 200K including all benefits that's not business smart.

Every major tech company (Amazon, Microsoft, Facebook, etc) in this city is compensating North of that number for folks with 5 years experience. Considerably more for an engineer with 10 years experience.

The dedicated games companies likely pay a bit worse, but they still have to compete with the big employers on some level (especially as most of those big companies have in-house game studios who are payed the same as their other engineers).

Share this comment


Link to comment

Well that's too pricey in general for running a normal business. If you have the money to blow as a bazillion dollar corporation I get that and I know those numbers exist. Still unrealistic of an expectation for every programmer to believe that jobs just pay that much in or out of Seattle. I was looking at like 150K at Amazon plus the 2 year bonus thing back maybe 3 years ago. My friend made like 50/60K in LA on the Rocket League team with like 3 years experience. L....A..... right? You never know. There are so many ranges. But again even for Seattle and across the US, 100K is a pretty reasonable sweet spot (and not a bad number) for 5-10 years experience.

Edited by dpadam450

Share this comment


Link to comment
2 minutes ago, dpadam450 said:

But again even for Seattle and across the US, 100K is a pretty reasonable sweet spot (and not a bad number) for 10-15 years experience.

That's... barely survivable for someone supporting a family around here. Across the US is definitely different. Once you get outside the tech hubs you aren't looking at dropping $1 million for a little condo either.

Share this comment


Link to comment

I'm not sure what the argument you're trying to make with that link is? I'll guess that it is that highly-paid senior engineers in Seattle aren't making six figure salaries... but I don't think it supports that at all:

- The data is from 2014, so it's a few years out of date and in particular isn't going to be reflective of the alarming growth in housing cost in the area in the last two or three years. The median house price in Seattle is nearly $800k. Employers need to consider that when deciding compensation, because employees need to be able to live in the area and that means needing to be able to afford a mortgage (or rent, which is pressured upwards by rising house prices as well).

- The data is for the zip codes covering the city of Seattle itself (it was commissioned as background for the discussion about whether or not a high-earner tax should be put in place). It thus does not reflect the non-trivial percentage of engineers (and folks in other jobs) who live outside the city and commute in via the areas overburdened and struggling public transit system). Microsoft, in particular, is not in Seattle itself (primarily). Median prices outside the city are actually even higher; in Bellevue they were up above $2m.

- The data is covering everybody who lives in the city. That includes students, retirees, and people in jobs that aren't highly-paid tech sector jobs. I'd expect it to be the case that most people in the area don't have high-paid senior-level software engineering positions, so this data isn't surprising (in that respect, at least).

If I've misunderstood your point, I apologize, but it's not clear to me what you were going for since you just pasted the link.

Share this comment


Link to comment

He suggested that nobody can live off 100K. Just stating that not every job is a high paying software job. I mean you have experience in Seattle as a game dude. Did you start at 100K? Just curious.

Share this comment


Link to comment
33 minutes ago, dpadam450 said:

He suggested that nobody can live off 100K

I actually stated that someone with a family would have a hard time living on 100k around here. And I absolutely stand by that - Seattle has some of the worst income inequality in the nation, and many folks outside of tech are being forced out by the rising prices. If you don't your home the rents drive you ever further out of the city, and if you are lucky enough to own your own home, rising housing prices driving up property taxes are making that unaffordable too.

Share this comment


Link to comment
14 hours ago, dpadam450 said:

He suggested that nobody can live off 100K. Just stating that not every job is a high paying software job. I mean you have experience in Seattle as a game dude. Did you start at 100K? Just curious.

This makes more sense, then. I do agree that it's possible to live in Seattle on less than $100k. But it's becoming harder and harder to do so. Especially when you have a family, as swiftcoder's pointing out.

I didn't start my career on $100k, no. But I also lived in the cheap suburbs of Baltimore when I started, and that was more than a decade ago. I have no idea what Seattle was like back then.

Share this comment


Link to comment

There is a big difference between a coder and an engineer. People on $200k+ are not just writing code, they are presumably designing architecture and all the stuff which goes with it, for regular developers ($50k) to churn out. They have a lot of experience, often domain specific.

$200k is still a REALLY BIG salary in objective terms, even in the US, let's not forget that. You should be something special to justify it, unless some internet bubble is throwing cash (like in the late 90s).That said I just checked and the average US salary is not tiny, at $44k.

I'd still love to know where I get get some of that Seattle lucre, from the UK ;) I'm a pretty great developer (IMO) with experience in medical simulation - I must be worth a fortune!

On 07/03/2018 at 5:20 PM, jpetrie said:

This makes more sense, then. I do agree that it's possible to live in Seattle on less than $100k. But it's becoming harder and harder to do so. Especially when you have a family, as swiftcoder's pointing out.

I didn't start my career on $100k, no. But I also lived in the cheap suburbs of Baltimore when I started, and that was more than a decade ago. I have no idea what Seattle was like back then.

All the people serving you your soy-frappa-chappa-chino or McKaleMuffin on the way to work, or driving the bus you take TO work, are on substantially under $100k. It's very easy (speaking from experience) to get in a bubble with these things.

Share this comment


Link to comment
51 minutes ago, d000hg said:

There is a big difference between a coder and an engineer. People on $200k+ are not just writing code, they are presumably designing architecture and all the stuff which goes with it, for regular developers ($50k) to churn out. They have a lot of experience, often domain specific.

That's not really how big companies work, and the majority of Seattle's software industry is dominated by big companies.

Amazon, Microsoft, Facebook, Google, Oracle, Twitter, Snap... all in the Seattle area, and all staff their software divisions solely with engineers (there doesn't exist a separate "programmer" role). All have starting compensation in the $130k-$150k range for engineers right out of undergrad.

55 minutes ago, d000hg said:

$200k is still a REALLY BIG salary in objective terms, even in the US, let's not forget that. You should be something special to justify it, unless some internet bubble is throwing cash (like in the late 90s).

In much of the US you would be correct, but US salaries is highly variable by location, and believe you me, Seattle *is* the second hub of the current tech bubble. If you're in Madison, Wisconsin, $200k is likely a huge deal (and will also buy you a house). Here in Seattle it's on the low end of mid-career compensation, and it'll buy you... a parking space, if you are lucky.

Share this comment


Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Advertisement
  • Advertisement
  • Blog Entries

  • Similar Content

    • By Ruben Torres
      You've optimized all of the low-hanging fruits of your game. Except that you didn't. You missed a sneaky, non-so-obvious spot: optimizing your Unity Scene Hierarchy.
      [The original entry with its formatting can be found at Unity Optimization: Your Scene Hierarchy is Robbing you Performance]

      What's the crack with the hierarchy now?
      I want to show you something.
      Launch Unity and open your game project. Then, run your game on your target device and attach the Unity Profiler to it. Record a few frames during gameplay.
      In the Unity Profiler, look for the following unpleasant profiler markers:
      UpdateRendererBoundingVolumes Physics.SyncColliderTransform TransformChanged​Dispatch You didn't find any?
      Keep looking. I'm sure you'll find at least one.
      They'll spawn when you're about to give up. As soon as you mouse over the close button of the Profiler, they'll show up.
      Found them already?
      If so, it's your lucky day.
      I discovered those in my previous project as well and I learned how to land a final blow to them.
      I know the evil behind them...
      Do you want to know the performance secrets of Unity Scene Hierarchies?
      Quick Navigation (opens in a new tab)
      Level 1 Developer: A Typical Unity Scene Hierarchy
      Level 2 Developer: An Optimized Unity Scene Hierarchy
       The Gamedev Guru's Golden Rules of a Clean Unity Scene Hierarchy
      Level 3 Developer: The FAP Hierarchy Tool
       The Gamedev Guru's Hierarchy Score

      Level 1 Developer: A Typical Unity Scene Hierarchy
      I still remember the first Unity project I worked on, just slightly over a decade ago.
      I was not sure what the difference between game objects and components were.
      But that didn't matter. I created games anyway.

      Deep Unity Scene Hierarchy
      Was it uncommon to see a messy unity scene hierarchy like this?
      Actually, yes. Because it used to be worse than that.
      Interestingly enough, you can get away with this kind of hierarchies most of the time.
      But you'll suffer. You'll pay the price later on.
      Luckily, before I started developing games professionally, I learned to appreciate more structured hierarchies.
      A great scene hierarchy structure can be your best friend. Structure makes development and collaboration much easier.
      It doesn't have to be the best, whatever that means. It's enough for it to be good.
      But bear with me here. This is important.
      Having a cluttered unity scene hierarchy is dangerous and will get you into trouble. This is so because it's highly unlikely you'll directly notice its side effects.
      There'll be a creepy ghost chasing you, pulling you back, slowing you down. Sometimes you think you hear something, but when you look back, there's nothing. So you get used to walking slower.
      I learned to diagnose these side effects over the years. And the main problem is that the side effects of a messy unity scene hierarchy are not obvious to spot.
      You'll see the profiler and wonder what some markers mean. Their names are often cryptic... what secrets do they hide?
      The only thing you can be sure of is this:
      Mysterious markers tell you something's worth investigating
      When you and I talk about structuring your scenes better, we usually discuss increasing clarity and reducing maintenance cost.
      But performance? Just like my cat gitignores all the toys she has around my flat, everybody forgets about performance when it comes to the Unity Scene Hierarchy.
      Let's analyze the previously shown unity scene hierarchy. It contains 2,000 rotating spheres nested on top of each other.
      What does the profiler say about it? Look, don't be scared.
      Unity Scene Hierarchy Optimization-Deep-Hierarchy Profiler Overview
      That's pretty bad for a simple prefab and a rotation script applied to a built-in sphere.
      As you can see, Physics.SyncColliderTransform and UpdateRendererBoundingVolumes are taking a huge portion of your frame budget.
      But let's not stop analyzing there, because I'm quite curious about this case.
      Let's dig further. I hope you saved some 4G data this month for this impressive image.

      Unity Scene Hierarchy Optimization-Deep-Hierarchy Profiler Details
      Here lies the key of the article.
      Unoptimized hierarchies causes two BIG problems in Unity.
      Deep hierarchies do not allow the job system to work efficiently in parallel. Nested hierarchies cause bottlenecks in several subsystems within Unity. Remember my words...
      Because this applies to all types of dynamic objects and especially user interfaces.
      In case you're wondering, I own a Threadripper with 16 physical cores and 32 threads. Do you know how many am I using effectively in this project? Just one.
      There're so many ways to say the same: the performance of your game will suffer. And by trying to fix this mess by following your gut feeling based on those mysterious names, you'll start to age blazingly faster.
      What would a Level 2 Developer do with 2,000 objects?

      Level 2 Developer: An Optimized Unity Scene Hierarchy
      A Level 2 Unity Developer knows that parenting transforms comes at a price.
      The Level 2 Developer also knows this price is paid in milliseconds of CPU time. Or, similarly put, it is paid in hours of overtime spent by the developer chasing this up.
      Ask yourself: do you have enough CPU budget to pay for this expensive hierarchy?
      From which area of your game are you subtracting those milliseconds from?
      Will your game bombard the player with less and less flashy particles? Or will you cut the number of city invaders your player will have to defend from?
      Hopefully, you'll do nothing of these two things., but rather...

      The reason complicated parenting steals resources from your game is simple:
      Each transform modification affects its children and potentially its parent and siblings
      Unity recalculates a lot of thingies for you when you change an object's position, rotation or scale.
      This process is transparently done for you, so you can focus on developing your game. That is great, but the price to pay for it becomes astronomical if you're caught off-guard.
      The solution?
      Keep it simple, adhere to...
       The Gamedev Guru's Golden Rules of a Clean Unity Scene Hierarchy
      No more than 50 total child elements per game object No more than 4 levels of depth in any game object Isn't that simple?
      A Level 2 Developer will keep their unity scene hierarchies as flat as possible.
      Look below. Same amount of objects, this time structured under a flat hierarchy.

      Savings are huge, I see.
      But doing this is easier said than done, right? Detaching and destroying relation(ships) between objects is a laborious, error-prone and time-intensive task.
      What would a Level 3 developer do?

      Level 3 Developer: The FAP Hierarchy Tool
      A good Unity developer gets things done.
      A great Unity developer gets things done faster, more accurately.
      But how is that?
      By using tools.
      Because the only cheap hierarchy is the empty one, there's one key answer you need to answer at all points from your game...
      How complex are your hierarchies?
      You can answer this by methodically analyzing your hierarchies and giving it a score.
      The Gamedev Guru's  Hierarchy Score
       Below 35: Smells of Trouble. RUN!
       Around 50: You might be OK (For now)
       Above 70: Profit! (But don't relax)
      So what are the math formulas I need to calculate the score?
      Luckily, none. I've done this for you.
      I prototyped a tool to automatically analyze and detect bottlenecks in your hierarchy based on The Gamedev Guru's Golden Rules of a Clean Hierarchy.
      I call this tool...
      The Fabulous Advanced Profiling Hierarchy Tool
      Run your game. Get to a point of interest. Open the tool and let it do the work for you.

      The Gamedev Guru's FAP Hierarchy Tool
      Let the tool whisper in your ear the magical melody of an integer that we will call... score.
      Once you know what your score is, you know what to do... Or not?
      Because I'm not giving you only that tool, but also a bonus script to boost your hierarchy problem-solving techniques.
      I'm giving you the extraordinary power of the simple DetachGameObject.cs Demigod script.
      You're not likely to encounter many 27-line scripts that will help you improving performance so much in that small time frame.
      What this does is simple: it'll move your heavy and nested game objects to the root of the scene hierarchy in run-time. That way, you'll profit from having structured hierarchies during development and gain an insane performance advantage during run-time.
      Chances are, you can do this for the great part of your hierarchy that is heavily nested for structure's sake.
      Claim your free bonuses before they become a 404 error (opens in a new tab)
      And after that? Comment below and share your score.
    • By MikeDiz
      For the past few years, the team at Crowdsourcer.io have been working hard on a platform that allows people to build games together without raising finance or going it alone. And today is a special day for us because we are announcing the launch of Crowdsourcer.io v1.0!
       
      Crowdsourcer.io formalises a way of profit sharing in a fair and equitable way. And it means that you can work on side-projects or full-blown games as much or as little as you like, around your current time constraints, without quitting your day job or finding investment.
       
      We’ve also launched v1.0 on Product Hunt today and if you have any questions or feedback our founder is currently chatting in the comments.
       
      Version 1.0 brings all the features we’ve been iterating on in our beta tests plus loads of new ones, such as new selling tools, an enhanced peer review system and improved task management.
       
      If you would like to learn more about our v1.0 release please read our blog post on all the included features.

      View full story
    • By MikeDiz
      For the past few years, the team at Crowdsourcer.io have been working hard on a platform that allows people to build games together without raising finance or going it alone. And today is a special day for us because we are announcing the launch of Crowdsourcer.io v1.0!
       
      Crowdsourcer.io formalises a way of profit sharing in a fair and equitable way. And it means that you can work on side-projects or full-blown games as much or as little as you like, around your current time constraints, without quitting your day job or finding investment.
       
      We’ve also launched v1.0 on Product Hunt today and if you have any questions or feedback our founder is currently chatting in the comments.
       
      Version 1.0 brings all the features we’ve been iterating on in our beta tests plus loads of new ones, such as new selling tools, an enhanced peer review system and improved task management.
       
      If you would like to learn more about our v1.0 release please read our blog post on all the included features.
    • By Nerdeveloper
      Blockchain-based games pros & cons with respect to traditional ones
      Pros: 
      - the in-game assets you purchase are actually yours. This means you can use/sell them outside of the game. You can trade them with other players or people outside of the game even on cryptocurrency exchanges, or you can import the asset from other games, and more. Conversely, in-game assets in traditional games can only be used inside a particular game. ( For more info about this type of game asset, google for "NFTs , non-fungible tokens" )
      - no central servers, usually this type of games work in P2P and are open source, so they are censorship-resistant, long-lasting and with no server costs for the dev team
      Cons: 
      - since data is persisted forever on the blockchain, someone has to pay for that storage. Every single action a player makes , is data that must be saved to the blockchain. AFAIK all blockchain games require to pay a mining fee for every single move, and this IMO is asking a player too much.
      It is going to cost a lot of money compared to a traditional game, considering that each "save" operation to the blockchain is a transaction, and as such it is going to cost at least $0.001 in crypto fees, depending on the particular blockchain the game runs on. I think currently BCH is the cheapest one among those that have a DApp ecosystem , and its transaction fees are slightly below one penny.
      Let's make an optimistic estimate: a player makes at most 1000 moves every hour, which correspond to 1000 transactions to be saved to the blockchain. That is at least $1 per hour of play. Isn't that too much? 
      Oh.. and if we want the dev team to monetize a few bucks, the player is supposed to pay even more, by purchasing some in-game item.
      Traditional games are cheaper, WoW for example costs a $15 monthly subscription to play, which is way cheaper considering how many dozens of hours you are going to play in a month. And with $15 the company is already monetizing.
      Let me know your toughts, especially about the costs comparison from a player POV.
      Thanks
    • By Ruben Torres
      [The original post with its formatting can be found at the Unity UI Profiling entry]
      You spend an infinite amount of time optimizing your Unity UI. But, all it takes to really screw up performance is a sneaky modification on a tiny attribute of an almost invisible Canvas UI element. And when that happens, not even Unity UI Profiling will save you from dropping frames. Are you ready for the road ahead?
      This is what happened in my last project...
      I worked hard to optimize the several UI panels of our port to Oculus Quest. This was mostly about reducing the overdraw level to an acceptable amount to make sure the GPU would be all comfy with the real 3D rendering.
      So I worked on Unity UI Optimization for at least a month and made pretty damn good progress.
      At some point, it was so well optimized that the GPU timings were barely moved by the UI. The opaque UI shading techniques I applied compensated most of the overdraw caused by UI Layering (elements drawn on top of other elements).

      There I was, with a super optimized hybrid UI system that effectively occluded the 3D elements drawn behind it.  It became very easy to discard the rendering of these occluded fragments.
      However, I was far away from being done...
      When I hooked the Unity UI Profiler, one thing caught my attention.
      I saw an overwhelmed CPU taking over 1 ms per frame on UI rendering. That's a hell lot of time for a platform that gives you a budget of 13 ms for the whole game execution: physics, logic, 3D rendering, input, VR, networking are all in the same bucket.
      And I've seen cases where UI kills CPU performance even more.

      Unity UI: Expensive Build Batches
      And that is the thing: UI can be optimized to be GPU-friendly, but that doesn't directly translate into being CPU-performing.
      In fact, CPU and GPU have very different tasks to accomplish in Unity UI Rendering. No wonder, I suggest you approach CPU and GPU optimization very differently, as seen in my previous blog post about Unity UI Optimization.
      Doing more of Unity UI Profiling showed me the obvious problem: the UI was constantly being re-created every single frame, i.e. there was a Canvas Rebuild happening every frame.
      A constant hit of 1 ms on the CPU... ouch.
      But why would Unity do this to me?
      I thought Unity cached the UI Canvases...
      Actually yes, that is correct. Unity effectively caches the canvases to make sure they are built just once.
      The problem arises, though, when you change the properties of any of the UI elements of the canvas, such as a color, a position and so on.
      That means, all animations we love, such as button hover effects, are killing your performance and you might not know it.
      When UI property changes happen, Unity does the famous Canvas Rebuild that will crush your game's performance.
       
      A Unity UI Canvas Rebuild makes Unity iterate over all UI elements of that Canvas to generate an optimized list of draw calls (a set of vertices, colors, materials, etc.). And Canvas Rebuilds take longer than a Seat Panda doing a 0-60 mph test.
      That said, once you've acknowledged you suffered from constant UI Canvas Rebuilds, the natural question to make is...
       
      Why am I suffering the Canvas Rebuilds and what can I do about them?
      ​Answering that innocent question led me to spending 5+ hours researching this topic and empowering the Unity UI Profiler.
      Let's see how.
      Quick Navigation (they all redirect to the original blog page)
      1. Unity UI Profiling: All Good, until...
      2. Unity UI Profiling: A wild Canvas Rebuild appears!
      3. Finding the Saboteur: a politically incorrect brute-force approach
      4. Bonus: Augmenting the Unity Profiler for UI Optimization
       

      1. Unity UI Profiling: All Good, until...
      Let's say we have a weirdo of a UI in front of us.
      That UI is barely doing anything but sitting there, being annoying to the player who just want to see something through it.
      As a collection of 350+ images using a Grid Layout Group, it (miserably) looks like this:

      Unity UI Profiling Example
      And that's fine, even if it contains 350+ images. They will normally be rendered in just two draw calls, as there are two unique images that are not atlased in a sprite atlas.
      Effectively, I can see in the profiler there's almost no overhead on the CPU side. Most of the time we're under 0.01ms, which is pretty damn good.

      Unity UI Profiling: Sneaky Spike
      (...Most of the time)
      ​Wait, what was that CPU spike at the end of the graph?
       

      2. Unity UI Profiling: A wild Canvas Rebuild appears!
      What has just happened there at the end of the Unity Profile? The Unity UI CPU cost has more than doubled in just a second, how weird.
      I want to play a game
      Find the two differences in the samples below (you may want to click on them for zooming in).

      Unity UI Profiling: Cheap Canvas

      Unity UI Profiling: Canvas Rebuild
      I'll give you five seconds to find it out.
      5, 4... Ok here's a hint to make it easier:

      Unity UI Profiling: Canvas Rebuild Overhead
      Yikes!
      PostLateUpdate.UpdateRectTransform and UGUI.Rendering.UpdateBatches really wanted to take all the highlight in today's show.
      What do these regions do?
      The first, UpdateRectTransform, implies that a transform of a specific object has changed, and therefore Unity has to run some expensive logic to keep visuals coherent. We don't know whether it was a position, a rotation, a scale or any other of the RectTransform properties.
      Heck, we don't even know if it was just one attribute or all of them. Was it one object, or multiple? In any case, which ones? This is the problem: we do not know.
      The second cost, UpdateBatches, relates to the fact that the whole Canvas geometry has to be rebuilt. This process is famously known as a Canvas Rebuild. A canvas rebuild implies that Unity goes through all the Canvas hierarchy to generate a list of draw calls, so to speak. The vertices, indices, colors, uv's of all elements are computed and then a batching pass is done to we merge as many draw calls as possible to reduce the CPU overhead of issuing them to the graphics driver.
      Now we know what's going on, kind of. We're on the right track. But how do we go about avoiding these canvas rebuilds? What is causing them?
      We just need to find out more specific information...
      Summary

      An attribute change in a UI element will mark the element itself as dirty A UI element can be totally dirty, but can also be partially dirty: vertices-dirty, layout-dirty, material-dirty. Partial dirty states are cheaper to recover from Unity will rebuild canvases entirely, as soon as any of its elements are marked as dirty Canvas rebuilds are expensive on the CPU, avoiding them is the key  

      3. Finding the Saboteur: a politically incorrect brute-force approach
      We are still to give an answer to the following question:
      Who's triggering that sucky Unity UI Canvas Rebuild?
      It turns out, there's no fast way of finding that out, especially if your canvas hierarchy is immense.
      But, to start out, I'll show you the brute force approach for finding the source of UI Canvas Rebuilds.

      1. Keep the Unity UI Profiler recording
      Filter the metrics so you can focus on what is important: Rendering, Scripts, and UI.
      Keep an eye on the baseline to have a visual cue of your current baseline cost, which should include the expensive Canvas Rebuilds.

      2. Deactivate UI Game Objects and compare
      Select a group of game objects and deactivate it.
      Compare the performance baseline.
      If the baseline didn't improve much, continue deactivating game objects till you see a significant improvement.

      3. Find out who is modifying its properties
      Now you managed to isolate which object is triggering your Canvas Rebuilds. But, who's actually causing those?
      Is it a script scaling it? Or maybe an animation changing its position?
      It helps to do a right-click on the RectTransform and press "Find References in Scene"
      Once you know who's causing the UI canvas rebuilds, do something about it, such as disabling animations or transforms.
       
      Ruben, how am I supposed to follow this approach in a huge UI hierarchy? Don't give me crap
      I told you it was going to be neither fast nor fun, but your players asked for it.
      That's the thing. Having a huge hierarchy in place is not ideal in the first place. Exactly those massive, deep hierarchies will make your Canvas Rebuilds incredibly expensive on the CPU.
      But big and nested UI hierarchies can (and will) happen, so expect canvas rebuilds to hit you where it hurts the most: your players' game-play experience.
      While the brute force approach helps finding the source of canvas rebuilds, this does not scale in the long-run.
       
      Becoming more professional about optimizing UI is what got me into creating a tool that would give me all the answers I needed to match my players' expectations...

      Canvas Rebuild Profiling
       
      4. Bonus: Augmenting the Unity Profiler for UI Optimization
      By now, hopefully, I stressed enough how frequent and impactful UI Canvas Rebuilds can be.
      These troll canvas rebuilds that infested my game stole 10% of my entire CPU budget!
      As we saw, there is a slow brute-force approach for finding the source of a canvas rebuild. Then, I hope you'll be able to do something about it, based on the strategies I posted on my Unity UI Optimization post (visit it, it's free, I promise!).
      But such as error-prone approach is a process a real guru would never settle for. You can literally spend days trying to avoid canvas rebuilds, but the moment you expect it the least, they'll come back just to disappear as soon as you attach the Unity UI Profiler.
      This becomes crucial if you're doing VR development. You don't want canvas rebuilds in your world-space UI. Like not at all. If you don't get rid of these, you're very much likely to convert your players into patients.
      I get it, I will get rid of the canvas rebuilds. But the Unity Profiler won't tell me much about those! What advice can you give me?
      I'm glad you asked. It turns out we can convince the Unity Profiler to give us useful information about who's messing with the performance of our UI.
      You and I can augment the functionality of the Unity UI Profiler. We do so by altering the Unity UI source code that is publicly available. Once you have the source code, you'll want to find the code functions where the Canvas Rebuilds take place. Then, all we need is some BeginSample and EndSample Profiler API magic.
      If you're running Unity 2019.1 or earlier, the Unity UI source code is available for free in their Bitbucket repository. You can follow their guide there to download, install and modify it.
      My suggestion? Use a newer Unity version, at least 2019.2.0. New versions of Unity include the UI source code by default, as the UI system is now part of the package manager. That's the hassle-free way of doing this.
      Here's a list of code regions I found during my investigations where you could add the Profiling API calls:
      CanvasUpdateRegistry.cs: function PerformUpdate Graphic.cs: function SetAllDirty Graphic.cs: other functions such as SetVerticesDirty, SetMaterialDirty, etc..
      Unity UI: Profiling Source Code
      Useful? Yes. 
      Artist/Designer-friendly? No.
      That's why I wrote a small open-source Unity Extension to enhance the Unity Profiler for you.

      The free tool will allow you to quickly switch over profiling modes to make sure the performance of your game is on top.
      The best part of the Unity Profiler enhancer? It just works outside of the editor, effectively replacing all the aspirins you've been taking while profiling your UI in Android and other platforms. 
      Here it is, all its power under your control with two simple buttons: 
      Buff my Unity Profiler Nerf my Unity Profiler. Grab it now here:

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!