Jump to content
  • entries
    943
  • comments
    5,899
  • views
    923,768

Why Small Companies Succeed


Josh

8,921 views

 Share

The development of Leadwerks3D seemed like an impossible task at first. Not only did I need to write a new 3D engine entirely in C++ mostly by myself, but I had to make it run on four platforms (Android, iOS, Windows, and Mac), with a scalability all the way from the fixed-function pipeline up to the very latest hardware tessellation features. All logical sense told me this was impossible. Even large companies with 100 programmers or more haven't yet been able to put out a 3D engine with the range of platforms and scalability I am targeting. What makes me think I can do it?

 

As we approach the initial release of Leadwerks3D, what I thought was impossible seems much more feasible now. During the course of development of Leadwerks3D, I've learned some important ideas that give a lot of hope to me and to indie game developers everywhere.

 

Systemic Interdependence

When managing complex tasks there's something called systemic interdependence. This refers to the idea that when you have many people working on one project, they are rarely isolated from one another. They often have to stop and wait for another person's job to be done before they can continue with their own, and programmers often end up stepping on each other's toes when they work together.

 

Even though only Aria and I are working on the source right now, we have experienced this. It's very important we keep busy with separate aspects of the engine. Aria works on platform implementation issues, I work on the core engine design, and we try our best to keep the source code repository in sync. So far this works well for us, but I could easily see a lot of problems arising if we had more people working on parts of the engine that aren't so easily compartmentalized.

 

Think about your own game. What if I told you I was willing to give you as much money as you wanted to hire programmers, (as long as your final project gave me a big return on my money). Sound great, right? So you go out and hire ten programmers. They come in every weekday, 9 to 5. They're willing to work, but you have to instruct them and keep them busy and productive. Don't have anything for them to do at the moment while you finish one little part? Too bad, they're still on the clock and you still have to pay them.

 

With ten programmers, would your game get done ten times faster? Almost certainly not. In fact, as you add programmers, your work output will probably look something like the graph below. With one programmer, we have an output of 100 arbitrary units. We gain efficiency with the first few programmers, but the effect lessens with each additional worker. They have to wait for another person to finish something. Now the code repository is conflicted, and you have to figure out how who added what code. You also have an increasing number of relationships and communication between individuals.

 

blogentry-1-0-74726900-1322335662_thumb.png

 

Once we get past five programmers, additional programmers actually have a detrimental effect to our output. If we continue adding more workers, we can reach levels of output that are below even that of a single programmer. Imagine if 30 people were working on your game. It would be chaos, and that whole time you would be burning money as they came in every day. Meanwhile, your investors would be sitting impatiently, expecting you to get back a lot more money than they put in.

 

My chart above isn't precise, and the number of programmers a project can support will vary based on its ease of compartmentalization, but the overall idea stands: Software development does not scale very well with additional manpower. This is why small companies are continually springing up and outmaneuvering larger ones. Android came from a small company. It was bought by Google, but only after a small team had built the foundation. Minecraft came from a very small company. Kinect originally came from a small company. Small companies with focused goals are able to compete with much larger companies because of the effect of diminishing returns.

 

Performance and Motivation

Another problem big companies have is motivation. In a professional software development environment, managers like to have measurable performance metrics to evaluate employee efficiency. These are used for performance evaluations, and are the basis for salary increases, promotions, and disciplinary actions. Managers set goals and milestones that can be easily measured after a period of time. Workers respond to this by doing exactly what management tells them because they get rewarded for it. If a worker has an idea for a new technique that might or might not work, they're not as likely to spend time on it in this environment. If it works, the company gets to keep their idea and they get nothing. If it fails, they've wasted time on something that doesn't fit into their manager's ideas of measurable performance. Now, a lot of tech companies do try to encourage innovation, but if a worker has an idea for something they really believe in, they are more likely to form their own company where they can be in complete control of their vision. The professional software development environment does not encourage risk-taking and innovation the same way small companies do, because they need easily measurable metrics to assess performance. They only get out of employees what they reward, and it's hard to measure the value of new ideas and attention to detail.

 

Conclusion

These ideas I've learned during the development of Leadwerks3D are directly applicable to your own game projects. Don't get discouraged when you run into a tough problem. Even if you had more help, you would still have to figure out a solution, one way or another, and you wouldn't be able to shift that responsibility off onto employees. You can do it, just be wise about where you focus your efforts and plan carefully.

 

--Edit--

 

I posted this article on GameDev.net and got a few interesting responses:

 

I've been saying this for years. Nobody seems to listen because they have never worked on their own projects. Only those who try their own work will ever understand. I work at about 60 to 100x faster on personal projects than I do at work. My graph would drop off after about 3 programmers though. You could be productive with 5, but your brains are less connected. 1 person can have a vision in which they don't have to communicate to anyone, 2 people share visions through talking and short meetings, 3 people is a discussion on mixing visions. After 3 people you need some longer group meetings.

 

One thing other than motivation you missed as well, is with a company of more than 10 people, people leave companies. So when you lose someone that built 1/3 to 1/10 of the entire code-base, no new hire will ever be 100% in tune with that persons code and know all the ins/outs, it is impossible unless you can physically read minds in the future.

-dpadam450

I've personally experienced this at my current job. It is just me and another developer, but he designed the whole project and wrote almost all 30k lines of code. Getting me up to speed is nearly impossible, but I have been able to built new components for it and implement them. We have ran into a lot of repo conflicts a long the way. This is just 2 developers too. But I often spend more time reading the code trying to understand it then I do actual programming. I've probably added only 3 - 4k lines of code to this project so far. But we are slowly getting in sync with each other, it is quite the progress. Excellent read though, I am also way more productive on my personal projects then the ones at work.

-wicked357

Sad but true, I've spent many a lunch conversation on this topic. We tried to express these issues to corporate but it was too little to late, and now our studio has been "economically down sized" LOL good riddance.

-ELawson

 Share

32 Comments


Recommended Comments



When it comes to people using Leadwerks to design their games I wouldn't have thought the design was that critical in many areas for someone to have to do all the design up front simply to delegate it out to programmers to code, unless the quality of the programmers employed was very poor!

 

I think the design is very critical in an LE game where you have multiple people because part of that design would need to be the interactions between components. Start a project where you, NA, Master, & Max make a game and only give a vague design and tasks and combining all that code will most likely be a nightmare. But have a detailed design doc where you describe the functionality for a specific task and the interaction interfaces that task needs to expose/consume and you'll have a much better chance at success.

 

I've actually thought of experimenting with that. I want to make a simple pong game and I would just make a detailed document broken out by task and detail how each task would be consumed and what it should expose and then as people on the forums to do these task. I would break the tasks out to be very small so it would only take someone maybe a couple hours. Then I would assemble the pieces to make the game. I think it would be an interesting experiment to test exactly what Josh is saying. If I have 10 different programmers would they really be tripping over each other? The game would be like Pong or Tetris or something simple.

Link to comment
Guest Red Ocktober

Posted

This article was written to explain some of the advantages people working in small teams have, so they can better understand their own strengths.

 

that's the way i read it...

 

Frictional Games and their small team accomplisments comes to mind...

 

well... i guess it's safe to assume that beta 1 is just around the corner :) i mean after getting so positively vibed

after reading the article...

 

:)

 

 

--Mike

Link to comment

I agree completely, and have experienced this myself when I was doing engineering. You can see this with Unity as well. In the very beginning they were much faster at getting the technology out, but with almost 100 staff, they still put out great stuff, but you can see that the efficiency portion has definitely dropped a bit (but probably not as badly as some because I think they do a good job at hiring people), and in many cases they've just bought in or licensed tech instead (beast, umbra, etc.).

 

The only way that large companies can stay really efficient is if they have a real brainchild managing the project who can layout every system ahead of time and delegate work to a bunch of really good "day to day" single task coders. People who can do that are few and far between.

Link to comment

You can see this with Unity as well. In the very beginning they were much faster at getting the technology out, but with almost 100 staff, they still put out great stuff, but you can see that the efficiency portion has definitely dropped a bit

 

See I don't think that has to do with the amount of programmers they have, I think it has to do with the amount of processes they put in place to reduce the risk of someone releasing code that screws their program up. When they had 100 customers they could afford to screw up. When they have 100,000 customers, screw ups cost you more as it kills your reputation. They probably have to do change controls, then 3 people have to approve, a code check has to happen, then instead of making new releases every day they wait and package them together because nothing pisses people off more than having updates every single day because changes are it'll break something for you. These things are what you do when you are a big company to reduce risk and what you don't have to do when you aren't. That has nothing to do with the amount of programmers you have.

 

This article was written to explain some of the advantages people working in small teams have, so they can better understand their own strengths.

 

Interestingly enough the "advantage" a small team or company has is that they have to take more risks to make it big. So their advantage is they can "afford" to go out of business which is kind of strange :)

Link to comment

I think the design is very critical in an LE game where you have multiple people because part of that design would need to be the interactions between components. Start a project where you, NA, Master, & Max make a game and only give a vague design and tasks and combining all that code will most likely be a nightmare. But have a detailed design doc where you describe the functionality for a specific task and the interaction interfaces that task needs to expose/consume and you'll have a much better chance at success.

Sure, if there is to be a common communications interface used by all components then someone would need to design that up front, that almost goes without saying as you are requiring everyone else to use that, but then the rest boils down to functional specs again for the remaining components.

 

If you want say a path finding system writing, or a foot placement system with IK, or a blended animation manager please don't tell me you'd be designing all that up front and telling me how to code it because that would probably result in any decent programmer walking at that point as you have effectively de-skilled the job and demotivated your staff by turning them into a team of monkeys who just churn out code.

 

Sure you can operate in that way, but that's your own choice. It's not because it has to be that way. Maybe lots of software houses do operate in this way and I've just been lucky in not working for any of them yet, I don't know.

Link to comment
You can see this with Unity as well. In the very beginning they were much faster at getting the technology out, but with almost 100 staff, they still put out great stuff, but you can see that the efficiency portion has definitely dropped a bit
See I don't think that has to do with the amount of programmers they have, I think it has to do with the amount of processes they put in place to reduce the risk of someone releasing code that screws their program up. When they had 100 customers they could afford to screw up. When they have 100,000 customers, screw ups cost you more as it kills your reputation. They probably have to do change controls, then 3 people have to approve, a code check has to happen, then instead of making new releases every day they wait and package them together because nothing pisses people off more than having updates every single day because changes are it'll break something for you. These things are what you do when you are a big company to reduce risk and what you don't have to do when you aren't. That has nothing to do with the amount of programmers you have.

 

 

The number of programmers you have, assuming your statement to be true, which I agree it probably is, directly affects the number of potential errors there can be, and lead programmers ability to watchdog, those issues. Many hands, often spoils the soup, and the rate at which you can cook more soup does not increase linearly with the number of pots, stoves, and cooks, particularly if you have to make sure the soup is just as good, and tastes the same, in every pot, which inevitably has to be done by one master chef or a master and a very select number of understudies. :)

 

Another way to say it is, I think you are right, but it is a contributing factor, and what you are saying is compounded by the number or programmers, and is not an either/or counter to what Josh is saying.

Link to comment

 

If you want say a path finding system writing, or a foot placement system with IK, or a blended animation manager please don't tell me you'd be designing all that up front and telling me how to code it because that would probably result in any decent programmer walking at that point as you have effectively de-skilled the job and demotivated your staff by turning them into a team of monkeys who just churn out code.

 

I think many shops can operate this way. Many times shops would rather have senior programmers doing more design than coding because they are more valuable coming up with a good design than typing away at a keyboard. The design is where the value is not the typing of the code. I love doing both but if I was forced to choose I'd rather go design. So your decent programmer in your example would be coming up with the design and having "newer" programmers following the design and typing the code. The design is 90% of the battle.

 

One benefit of doing it this way is that you can outsource the actual typing of the code if you need to. You can also have 1 programmer pick up where another left off if something comes up with the first programmer because it's so well documented and designed.

 

This is what indie designers should be doing. Instead they often come with vague descriptions and no knowledge about the systems required or how to come up with at least a high level design of them. There is a big world full of programmers who will take those tasks on. Instead they want these designer programmers on the team and you can't have to many of them on the same team because of a clash of principles that will most likely happen.

 

Saying all that I would prefer to just give the required interactions for the design. Tell the programmer here are the inputs and here are the outputs required. I would probably give tell them how I want these inputs and outputs designed though so it's the same way between programmers.

Link to comment

Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...