The Broader Picture
Posted by david on Wednesday, 31 July 2013
When I was in college heading for a degree in Computer Science, I wondered why I needed History or Psychology or English or Art. Hadn't I had enough of that in high school? Why couldn't I just take fun stuff like Assembly Language or Advanced Data Structures? My parents tried to tell me about well-rounded education, how important professional communication is, and the benefits of knowing about the world around me, but it was hard for me to put much more than the minimal effort required to get the grades in those "non-essential" classes. However, I would gladly spend hours in the computer lab writing all sorts of programs to test and expand my knowledge of the bits and bytes I was learning about. As the years rolled by and I worked on various projects in the "real world" the wisdom of having more than a narrow, geeky slice of knowledge slowly dawned on me. Understanding the history of governments and the growth of business and how various events affect global economy helped me understand business decisions my customers were making. When rising gas prices influenced a trucker strike and raised prices at the local grocery store, inventory levels and purchasing decisions were affected which necessitated tighter controls and thus more focused reports. Growing interest in re-educating ex-prisoners opened a market for adult educational software. A recession in the United States lowered the demand for construction of new homes which lowered the demand for supplies imported from other countries and slowed enhancement requests to custom software I was building, but at the same time, local retailers eager to save money wanted more automated information processes to cut down on labor costs and compete with global changes in consumer spending. I started seeing how nearly everything is connected and how information about the world around me could give me valuable insight to the changing needs of businesses. Knowledge about a business environment can help understand the business needs better. In the same way, knowledge about a project environment can help understand the project needs better. Sometimes incidental pieces of information surrounding a project has dramatic impact on the development of the project. I've worked with far too many project managers that give me just enough details to get the project started but leave out things they don't think matter to the task of coding. Learning aspects of how software will be used after it's built can lead to unnecessary refactoring, budget overruns, and frustrations by every person involved. Recently, a colleague of mine was working on an e-commerce integration for a point-of-sale application. We've worked on several of these with little variances in each, but typically they consist of sending inventory levels up to a web site and downloading orders. This particular one had some additional requirements, but nothing that seemed out of the ordinary. Testing by the developer with common data sets showed all was ready. When deployment day came, the software was put into place. But he noticed the import files were an order of magnitude larger than ever encountered. The program, with methods that worked fine in many other installations, suddenly took hours to process what should have only taken a few minutes. Now one might think that the program wasn't written efficiently to begin with. But there are two general approaches to these applications that import hundreds or thousands of records at a time. In a small setting with old computers, it makes most sense to import records one at a time, checking to see if an order or item already exists and either updating or inserting it. However, in this situation, it became obvious that the list of existing items should be queried first even though it might result in a large data set held in memory, and checking against that list instead of making many individual queries against the database. Having learned the server on which this application would reside had plenty of memory and CPU power changed the possibilities of what could be attempted in code. Agile practices can alleviate these unknowns earlier in the process if everyone is on board and participating. That process is not always available for various reasons. In any case, the more you know about a project, the more focused your development efforts can be toward what the end result really needs to be.