An exploration on how business can get the most out of its information technology efforts.
Styles
Monday, October 31, 2011
A $5 solution to a $5 problem
Luckily, I found a new balance in computer programming. Yes, it is satisfying providing that super-fast, bullet-proof, wonderfully designed software application to a business user. Thankfully I’m just as happy providing an adequate solution, knowing that in some cases the business stakeholder values low cost and short time-to-market more than they do software perfection. My goal is to meet the user’s needs in the best way possible, not provide the best end-product possible.
I’m quite disappointed, however, to see a vast number of developers who are doing the software equivalent of putting $600 worth of work into a $250 flute. These developers are making the same mistake that I did as a band instrument repairman – losing sight of the customer’s needs to satisfy one’s own arbitrary set of standards. I think business stakeholders are partly to blame for this (for reasons I will get to in a future blog post). However, we as developers need to renew our focus on making sure there is a good reason for each and every line of code we write. If it does not add more value than it costs to write it, then doesn’t belong in the project.
Wednesday, October 26, 2011
If coding seems tedious, then there's probably a better way...
Luckily I get to avoid writing tedious code most of the time. Usually there are ways around it. Getting data from the database and loading it into an object can almost always be automated by using an Object Relational Mapper. Getting information from an object onto a web page can be automated by using reflection, iterating through the properties, and setting the fields automatically. (If you don’t know what that means, it’s OK, it’s not central to the point of this post.) I’ve even written my own programs that will generate JavaScript for me so I don’t have to spend as much time debugging it.
A nice benefit to my avoidance of boredom is that by automating the boring stuff, my code is almost always faster to write and less error-prone than the more tedious equivalent. It’s a win-win, right? Why don’t more programmers think this way? You will get a few programmers who won’t use ORMs or reflection because they’re slower to execute, but in most cases I’m not going to lose sleep over a few hundredths of a second. I think mostly programmers don’t automate the boring stuff because they focus on what they know rather than experiment with trying to do something faster. They seem to want their automation done for them. My question for everyone, then, is how do we motivate more programmers to be more creative in increasing their own productivity?
Monday, October 24, 2011
Measuring the success of software projects
- Is the project on time?
- Is the project on budget?
Both of these are easy to measure, and we measure them in part because both of these are more difficult to achieve than we’d like. However, neither of these two measurements gets at the heart of what makes a typical software project truly successful. There should be one primary thought driving any software project that stakeholders on all sides should use to determine its success:
Does my project deliver more business value than the cost of building it?
Your end goal should primarily be delivering business value, not meeting a budget. I’ve been involved in projects that didn’t meet time or budget limitations, but were still a business success because they delivered the promised business value, allowing for company scalability, greater market visibility, etc. I’ve also been asked to rescue projects that were a success in terms of meeting time and budget, but failed miserably in providing the desired business value.
So why do many of us still focus on time and budget as primary measurements for software project success? I think largely because they are easy to track and measure. Determining ROI requires knowledge of the current costs and revenues associated with the current process, measuring and calculating all costs associated with development, and measuring the improved costs and/or revenues due to the end product. Separating costs and revenues due to software only and those generated from other causes (marketing efforts, efficient or inefficient workflows, etc.) can be nearly impossible. Pair this with the thought that software projects are ends to themselves and time and budget become more important measurements to project success than they should be.
The alternative requires either a strong project champion that is able to understand all of the costs and revenues from both the business and implementation sides or close collaboration between the business and implementation leaders to determine proper measurements of success. Neither of these is common or easy to accomplish. To get an idea of what I mean, here are a couple examples of better measurements of project success:
- A new internal document tracking system’s success might be measured by increased productivity and worker satisfaction
- A new content management site for a professional services company might be measured by the number and quality of unsolicited sales leads
Have any of you tried to measure project success more along these lines? Did it work? Why or why not?
Wednesday, October 19, 2011
Skills vs. Knowledge (and how it affects unemployment in IT)
Employers are actively looking for skills, but employees want to emphasize their knowledge.
What do I mean? By “skills”, I’m talking about technology-specific things that could easily be read in a book. Being able to build a custom control in ASP.NET or being able to bend Entity Framework to create much more readable code are “skills”. Being able to determine when it is appropriate to build a custom control, or when one should choose to abandon a framework rather than continuing to bend it would be “knowledge”.
The difference is subtle, but important when dealing in technology because the skills a developer needs to write custom solutions change quite frequently, but the knowledge does not. Since this is the case, employees often want to market their knowledge and expect employers to train on skills, which is rather foolish. Employers, on the other hand, do not wish to spend resources training for skills, but incorrectly think that knowledge is unimportant (or at least not worth paying for). And so you get this strange combination of thousands of seemingly qualified IT professionals looking for jobs in a market with thousands of openings.