What are the fundamental differences in the challenges of software engineering games vs enterprise software and web sites?
-
Feel free to edit this question if you have a better way to say what I am getting at... What I'm wondering here is how does the overall complexity and difficulty of building a piece of complex software compare when you are talking about say a 3d multiplayer MMORG game vs. a complex site like Facebook vs. Microsoft Word... What puzzles me is why enterprise software and web development seems so difficult and prone to bugs while games involving complex graphics and simulations are often cranked out by very small teams starting from scratch that have little open source or frameworks to build on. A lot of game software seems to have just orders of magnitude more moving parts, literally moving parts, in 3D space. Yet bugs in games seem less common, and if they occur they are at a higher level with say video driver interactions as opposed to the actual game logic itself. That is the crux of my question... Game logic seems a lot more complex than what does on in a website, even something like Quora. How does the engineering challenge compare?
-
Answer:
Personally, here are my observations going from a past which involved filesystem/network protocol development to my present job of developing casual social games. I've primarily worked on the backend of the game I work on more so than the frontend, the answer would have been somewhat different if I worked on the client, so perhaps my answers would be somewhat different if I worked on a game client. I'll also rate what is more fun from a software developers perspective ( at least in my opinion ). While I'll try to be as objective as possible, the answer certainly carries my own biases based on my own experiences, namely enterprise storage vs. casual internet games. Release cycles: - Enterprise software has far longer release cycles. If you really wanted a really significant feature to make it into a filesystem, it could take somewhere between 6-18 months ( if not longer ) before the feature went from concept to shipping code. On the other hand, with casual games, features make it to the hands of your users much faster. Winner: Tie. For the really slow features, enterprise software can be frustrating; for the really small features, casual games can make you feel you didn't do anything significant. The smaller sized enterprise features or the larger sized game features which keep you busy for longer periods but not so long you have no idea of then someone would use them strike the right personal chord with me between tangible output your users can use ( after all the best perk of being an engineer is having people use what you write ). There are interesting problems to be solved in both areas. Reliability focus You cannot ignore a lot of the rare corner cases in enterprise software, if you do people lose data. Even if a bug is rare, it is high profile enough for customers who buy a lot from you that there are ripple effects. For casual games, there is a certain level of risk assessment to apply common sense when it comes to what one can do to make their users happy within your resource constraints. Do you develop a feature that will make a million users happy or spend the equivalent amount of time preventing a rare bug for a very small set of users that they would only hit once a year ? For the rare common case bug, it might be more appropriate to have a customer support process in the world of games to deal with an issue vs. worrying about over engineering for a corner case. Though to be fair, some critical systems in games such as payments need to be more conservative, and some non critical systems in enterprise software such as GUIs get the same risk assessment treatment. Winner: Consumer software. You can move a lot faster. Debugging filesystem corruptions was about as much fun as a trip to the dentists office. Drastically different customer relationships - The software deployment model of casual social games is that of software as a service, vs. enterprise software which is increasingly solution oriented. In the former case, your users are not technologically savvy and have a direct purchasing relationship with you ( if they buy anything from you at all ). In the latter case, it is the other extreme - your users might be technologically savvy to a varying degree, they might not be directly responsible. Winner: Consumer software. As Steve Jobs has said, the good thing about consumer software is that your buyer is the person you have to please, and if you make them happy, you win. In the enterprise world, often the people making purchasing decisions are not the end users. Decisions are more likely to be influenced by vendor relationships and who had the better slideware/GUI to pitch to the management team rather than who had the product that the end user liked the most. Online games provide at far easier, expedient and often mandatory software upgrade path - Software installation and upgrades are worlds apart. It was sometimes frustrating to develop a cool new feature in the filesystem world, only to have this awkward waiting period of people trying it and deciding when they want it or not. Sometimes you had to backport a feature otherwise the conservative customers would not pick it up, and it was annoying doing so. On the other hand, games will force you to upgrade software. I've seen instances of people complaining about bugs within 30 seconds of a feature going live in consumer internet land, and features/bug fixes not picked up by users for months in enterprise land. Winner: Software as a service = auto instant mandatory upgrades. Users win, developers win. Game need slick visual UIs, enterprise software needs basic GUIs but additionally CLIs are mandatory Enterprise software mandates strong command line interfaces but can get by with a basic GUI, since the goal of the software is functionality and most likely automation and integration with other systems rather than the pure fun factor of a game. Winner: I'm split on this one, but if I had to pick one, I'd say CLIs. CLIs are far more amenable to automation and on the other hand GUIs. ( Note that game GUIs are actually far more pleasing for users, I'm just saying from a software engineering perspective, you have to spend more time on the GUI which is a shallow though wide layer, vs. something meatier ). Also with GUIs, there is often a lot more iteration, which can require more throw away work, which while absolutely essential from the user experience point of view, can feel tedious from a developer point of view. Development languages: It can vary a lot, though on one hand I was doing kernel development in C in enterprise land, on the other hand I'm doing development for a game engine backend in PHP. This can vary drastically, and it is not fair to generalize here fully, though I've observed that lots of consumer web companies have servers ( at least the most user facing tier of servers ) developed in interpreted dynamically typed interpreted languages. Winner: No winner since I can't generalize my experience, but purely from a programming language point of view C is far more personally appealing than PHP in terms of my own thinking style. Personally, from a pure programming language point of view, I liked C a lot more, or perhaps expressed in a different way, I somewhat actively dislike PHP due to the often haphazard programming styles it can sometimes encourage. However, at the end of the day I do enjoy my job since the problem being solved is what one focuses on rather than get mired in programming language debates . As the joke goes, real programmers can write assembly in any programming language. :) Growth and career progression: In the enterprise world, one can at times be a successful engineer by being a good talker and once in a blue moon producing a good idea, but not actually doing real productive as an engineer at a competitive level on a day to day basis. On the other hand in the consumer internet space, there can be cases where a culture of who can hack the hardest can progress despite otherwise not being what I would categorize as a disciplined, well rounded, full fledged engineer who works with surgical precision. ( Ideally, imo good ideas shouldn't compensate for hard work or vice versa ). Reassuringly enough, both spheres are good to recognize good and bad performers fairly both in terms of hiring / firing / promotions, and both of the cases that I mention above in my own career have been _by far_ the exception and dealt with appropriately. All in all, casual consumer internet games and enterprise software are worlds apart, and if I had to normalize my answer to apply to all sorts of companies, I would conclude with this: Focus on seeking out smart people to work with. Focus on working on problems that you find personally interesting to you. Figure out what style of development is more appealing to you. Things always change in the word of technology, but if you maintain those invariants, you are likely to be happier and more successful as a whole.
Kartik Ayyar at Quora Visit the source
Other answers
I can't speak to much of the exact detailed differences as I haven't done any real game programming but have worked with companies that do. Here's a few quick thoughts: I've played a lot of buggy games over the years. I'm not sure it's totally accurate to say they are not buggy while web applications are. I will say that I think the gaming industry has more well-developed QA processes and testers in place to find and squash bugs. I recall weeks if not months of bug squashing for some major game releases. Does this really happen for web app launches? In some cases it does, but I think the QA processes for web apps are less refined. Programming games does have a lot of frameworks and things such as the "gaming engine" in which to build from. Many of the top 3D shooter games at different points in times were built using the Quake or Half-Life engines. This meant they didn't have to build all the movement and physics from scratch. Regarding game logic, I also think it's hard to say it's more complex. It definitely is in certain situations, but many web applications have substantial amount of logic involved.
Pat McCarthy
Here's my take, having worked as an engineer in enterprise, web, and social gaming software (speaking in broad terms, of course): Enterprise software derives most of its value from its stability. The same reason why people still use Blackberrys is the reason why companies pay for Exchange servers: more than anything else, the service needs to be up and running, not necessarily pretty and flashy. Sure, there may be various bugs and inconveniences, but most of the resources spent building the software is spent on reliability, not necessarily getting feature X to work perfectly. Web pages as a category is generally flakey. Given the bugs already in the browser and network hiccups (everybody has seen sites which don't load their CSS), it takes a tremendous amount of effort to provide any sort of stable, bug-free experience (see how far Google has had to go to try to keep its search up). Instead, web sites try to provide innovation in connections and UI, but the rapid iteration - esp. on the front-end - means it's not going to be as polished. Traditional console/PC games, the ones with multi-year dev cycles, have the luxury of, well, those many years of development. In addition to being meticulously tested (with many more levels of QA than other software industries), game studios spend a good chunk of their time building out or making use of their core set of tools, which means that the game's complexity is somewhat abstracted. Another benefit of building out the tools is that additional content - which can look like technical complexity - can be handled by artists and creators instead of the developers directly. In contrast, social/casual games follow the webpage model a lot more in fast development + rapid iteration, which means that they're prone to the same downfalls (lack of tools, many minor bugs), even though the complexity of their gameplay still remains simple. This category does show that when users are passionate about their software (i.e., they love their games), minor bugs and issues escalate into major headaches for the developers, and traditional "console" game creators have learned the lesson in setting down rigorous QA standards. In summary, my experience says that it's really the amount of QA and time spent in development that determines how well the piece of software appears, and that what matters in traditional games - graphics, game engine - aligns most closely with what an end-user defines as "quality". It's not that these other types of engineering are less challenging, but that their challenging parts may not be immediately evident (e.g., scalability), and they don't have nearly as many people throwing bugs back in their faces.
Allen Cheung
Interesting question. One fundamental difference between enterprise/commercial/business software & services (hereafter "commercial") and games is that the former are made for solving problems and creating efficiencies whereas the latter are made for entertainment. Commercial software may address incredibly complex and dynamic problems with various use cases, user needs, with high user expectations. Game software may have high user expectations (e.g. game play, strategy, plot, graphics, animation, etc.); however, the use case and needs of games are fairly static and predictable -- entertain the hell out of me. The difference I'm describing is the intended use, or purpose. Commercial applications may appear to be very simple on the surface, or even singular in nature, but due to vast differences in users' needs, the engineering behind the app is must be intelligent and robust. Also, because of the utility nature of commercial apps, reliablity must be instrinsic. Lets examine the word processor, such as Microsoft Word (mentioned in your question). The use case and user purpose for launching MS Word not only varies from user to user, but also from task to task (by an individual single user). MS Word, at any given moment, is used for: note taking, resume composition, business letters, forms, invoices, invitations, macro-based apps, mail-merge envelope printing engine, document collaboration, [R]@/\/$0m notes, love letters, et al. Because the addressable user audience and problem set is so diverse, a software concept as simple as a text editor, has grown into massively complex engineered software application. A first-person shooter or MMORPG like WoW (World of Warcraft) also presents very complex game system engineering challenges, including 3-D rendering, shading, physics, logic, AI, etc. There are APIs that encapsulate graphics rendering complexities (e.g. OpenGL, Direct3D). There are also game engines that large software houses develop internally, in addition to open source and commercially licensable game engines [1]. The engineering complexities behind games has less to do with diverse use cases and purpose, and more to do with entertaining the hell out of the user. (e.g. good story, strategy, consistency, fluidity, etc.) To sum it up -- commercial software spans across horizontal user bases presenting dynamic use cases. Game software is often targeted at a specific vertical with a very static use case. So, IMHO, commercial apps multi-purpose nature and horizontal userbase are what differentiate that app segment from the games segment. 1. http://en.wikipedia.org/wiki/List_of_game_engines
Neil Mansilla
Related Q & A:
- What is an injected defect in Software Engineering?Best solution by Software Quality Assurance & Testing
- What are other web sites to chat on?Best solution by Yahoo! Answers
- Software Engineering Vs Computer Science?Best solution by Yahoo! Answers
- What are some good colleges for programming/software engineering?Best solution by colleges.usnews.rankingsandreviews.com
- What are the job opportunities for ME software engineering fresher?Best solution by Quora
Just Added Q & A:
- How many active mobile subscribers are there in China?Best solution by Quora
- How to find the right vacation?Best solution by bookit.com
- How To Make Your Own Primer?Best solution by thekrazycouponlady.com
- How do you get the domain & range?Best solution by ChaCha
- How do you open pop up blockers?Best solution by Yahoo! Answers
For every problem there is a solution! Proved by Solucija.
-
Got an issue and looking for advice?
-
Ask Solucija to search every corner of the Web for help.
-
Get workable solutions and helpful tips in a moment.
Just ask Solucija about an issue you face and immediately get a list of ready solutions, answers and tips from other Internet users. We always provide the most suitable and complete answer to your question at the top, along with a few good alternatives below.