- The project is completed significantly under budget
- Scope creep is allowed and unnecessary features are added
An exploration on how business can get the most out of its information technology efforts.
Styles
Tuesday, December 27, 2011
When being under an estimate can be a problem
Wednesday, December 21, 2011
How tech-focused do we need our developers to be?
- Writing maintainable software isn’t easy, but it’s getting easier every day. Integrated Development Environments, such as Visual Studio or Eclipse, give developers the tools they need to write, refactor, and debug software at their fingertips. Modern programming languages give developers needed functionality out-of-the-box, while abstracting some of the lower-level concepts, to help developers be more productive than ever before. Finally, and perhaps more importantly, with the thousands of technical bloggers and bulletin boards out there, it’s easier than ever to find answers to your questions using your favorite search engine.
- The average technologist doesn’t know about the inner workings of a business process, nor do they seem to care. "Tell me what to build and I’ll build it" is an attitude that’s all too common among technologists today. On the flip side, too many business people know little to nothing about the technology that they’re using and managing. Their attitude seems to be "that's a technology issue, so the technology people should deal with it". Someone needs to bridge the gap in order to create solutions that bring out the best of both worlds.
Sunday, December 18, 2011
Good is the enemy of great
Thursday, December 15, 2011
The difference between a "project" and "product" in software development
Sunday, December 11, 2011
Beware the Expert Fallacy
Jane: I’d love to, our current site could use a new look.
John: Here it is. I think they did a great job, didn’t they?
Jane: Yes they did. I like the colors and it’s much easier to read than our old site. I have a question, though. This new design put a secondary product line under a different tab. I know that’s technically correct, but are any of our users going to be able to find it there?
John: Don’t think about it too much. This design was created by experts. [Emphasis added.]
Wednesday, December 7, 2011
Mixing jQuery Mobile and ASP.NET WebForms
Sunday, December 4, 2011
Aligning business and IT strategy is wrong-headed
- Do extremely high quality work, because software outages and security leaks reflects poorly on the team and can lead to long hours at unexpected times
- Focus on creating methods that elicit the best requirements from the business stakeholder and minimize changes, such as Agile and Scrum
- Create methods and tools that make technology-centric functions (like creating a new server or writing code) more efficient and less time-consuming
- It is often the case that doing the absolute best work possible isn’t appropriate for a given situation. Technologists often want to do more work than necessary up front to avoid problems which they believe reflect poorly on them. (And yes, there’s a sense of pride emphasized in the wrong place, too.)
- In most of my consulting experiences, the customer wants to keep the costs low as much as possible. This is understandable to a point, but in order to cut costs, the requirements gathering process gets neglected, causing poor user experiences and costly rework.
- I think it’s great that technologists are continually working to improve their craft. It’s great that we’re able to deliver more functionality with less work because of these efforts. But the focus on understanding and using software is coming at the expense of knowing and understanding business needs.
- Create software whose quality reflects the need of the moment. Single-use, non-mission-critical software doesn't need to be as robust as high-use, mission-critical applications. Always have a cost/benefit analysis in mind when deciding how robust to make your application.
- Instead of focusing on gathering the requirements from the business leader, we as technologists need to do a better job of gathering requirements from the actual end user. Knowing your customer is critical to getting the user experience right the first time.
- We need to make sure that we aren’t just focused on delivering better code, though, and be sure we’re focused on delivering better software. To start, there should be as many user groups focused on software usage as there are on software writing.
So how do we make this happen? Both business stakeholders and technologists are contributing to the problem by pushing their own agendas over the good for everyone. Merely telling technologists that they need to be more business focused, or the business stakeholders that they need to be more tech-savvy, is more likely to elicit negative feedback than it is to solve any issues. I like the idea of breaking up IT so it is no longer its own separate department. In that case, we would still need a corporate IT department that would set company-level policies and procedures, but most of the work would be done by technology professionals within each department. This way the people doing the actual technology implementation would be more familiar with their subject matter, reducing communication problems and the technology-first mentality. Also, we can more easily make sure that the technology implementation team has the business strategies and priorities foremost in their minds.
Wednesday, November 30, 2011
Speeding up time to market for software development projects
Tuesday, November 29, 2011
ASP.NET WebForms vs. ASP.NET MVC
- Good for getting something up and running quickly
- Easy to understand for WinForms developers
- Even in the hands of someone only marginally competent, code can still be understandable
- Relatively easy to create pages with a lot of functionality without making the HTML too confusing for the developers
- A lot of HTML gets generated that slows down the browser and gets in the way of AJAX requests
- A lot of code in inaccessible code-behinds can lead to more testing through the UI than should otherwise be necessary
- Steep learning curve for those coming from other web programming languages
- Clean HTML means faster load times and easier JavaScript/AJAX
- More unit testable
- Shallow learning curve for those coming from PHP or Ruby On Rails
- Cleaner HTML leads to cleaner CSS
- More easily integrates with third-party JavaScript and CSS tools
- Can lead to unreadable code more easily than WebForms
- Pages with complex functionality will have complex HTML for the developers
- More tools/blogs/help available that focus on WebForms
Sunday, November 27, 2011
The difference between good code and good software
- Easy to read and understand
- Easy to maintain
- Appropriately unit tested
- Performs reasonably quickly – no tangled logic that slows the application down
- Errors are few, but easily fixed when found
- Intuitive, easy to use with little to no training
- Meets all of the needs of the user (within reason), no work-arounds needed
- Performs reasonably quickly
- Errors are few, but easily understood when found
Tuesday, November 22, 2011
Object Relational Mappers - Time Saver or Programming Hack?
Sunday, November 20, 2011
Things instrument repairmen do better than software developers
Wednesday, November 16, 2011
Why more technologists need to know marketing
If I'd asked customers what they wanted, they would have said "a faster horse".
- Designing a form for data entry needs to be user specific. I can say from personal experience that different users want different things in their user interface. A form that would work for a typical engineer would be downright confusing to a typical retiree, and something a retiree would like would be cumbersome to a typical software developer. Software developers and designers need to start being more sensitive to these differences.
- Upgrading an application from a legacy technology to a newer one should involve a redesign. Most legacy systems have been “organically grown”, which is a euphemism for “when stuff is added, it is put wherever there’s space”. (Yes, I’ve been on all sides of that situation.) Business stakeholders in this situation usually ask for a strict move to the new technology, since that saves time and money in the short run. But as long as you’re rebuilding, why not redesign the application in a way that best meets your user’s needs?
- The technologies or platforms used for a particular project are often chosen based on product familiarity rather than user’s needs. The best example I can come up with for this is that I read somewhere (and I wish I remember where) that if you’re trying to target teenagers, you’ll get a wider audience by creating a Facebook site than a traditional web site using a Content Management System. Yet how many of you, when tasked with creating a site for a company that caters to teenagers, would think “CMS” first before even thinking “Facebook”?
Sunday, November 13, 2011
Project Risk and Fixed Bid vs. Time and Materials
Wednesday, November 9, 2011
The dangers of gold plating
- Desire to meet a self-directed (and situation-agnostic) sense of quality
- Desire to avoid getting angry phone calls due to an application crash caused by rare circumstances
- Lack of understanding of what the end user actually needs
Monday, November 7, 2011
Can technical project managers be effective without hands-on development experience?
- Ability to create a full project plan
- Determining the critical path
- Determining which resources are appropriate for available tasks
- Planning the project execution timeline
- Creating milestones
- Tracking project status
- Determining what action is appropriate in the event of a time or budget slip
- Making sure that action is taken and that it has the desired results
- Determining the cause of a time or budget slip
- Ensuring that everyone involved in the project has what they need to move forward
- If not, removing obstacles/provide needed information
- Critical path planning gets done poorly, when it is done at all
- Poorly done critical path planning means resources aren’t added when they are needed
- Asking the team for a status only works when the team is both qualified and aware of all the tasks that need to be done
- Problems are never prevented because they are never seen until it is too late
I can’t think of an easy fix for this, though. Making sure that all software project managers had hands-on experience in software development might be a solution. That isn’t going to happen any time soon, in no small part because the skills necessary for being a good project manager are quite different than the skills necessary to be a good developer. I’d guess that most project managers would not like hands-on development, and that most developers would not like hands-on project management. Moving to a Scrum environment might be an option too, where the development team takes over the status tracking and the business stakeholders determine scope, but that makes it harder to budget resources on the enterprise level. Does anyone have experiences they'd like to share of techniques that did or did not work particularly well?
Friday, November 4, 2011
How IT is not aligned with business
What’s the best way to develop a mobile application? Web, native application hand-written for each environment (Android, iPhone, Blackberry, etc.), or a third-party solution that creates custom apps for each environment?
Which is better, ASP.NET WebForms or ASP.NET MVC?
Do you have any SharePoint needs? Do you need help with reporting?
- Understand the business problem first before trying to create a solution. As in the example above, insufficient knowledge cannot always be solved with reporting.
- Explicitly state and agree on acceptable risk (downtime, security, errors) and associated costs. Most developers I know have their own risk tolerance, but rarely actively think about it, much less communicate it effectively.
- Remember that your job is to solve a business problem, not implement a specific technology. Just because a particular solution is easier to implement or cooler to create, doesn’t mean that it is appropriate for the circumstances.
Wednesday, November 2, 2011
Why I don't think of myself as an ASP.NET developer
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.
Saturday, March 12, 2011
Interview questions revisited
http://www.glassdoor.com/blog/
I look at most of these questions as a waste of time (though some more than others), both for the interviewer and interviewee. The people asking the questions might tell themselves that these questions are designed to understand how the interviewee thinks, but in reality they give misleading information to the interviewer and tell the interviewee nothing at all about the expectations for the job. However, there are a few of these questions that I would like to point out as possibly useful. The questions that involve mathematics and/or logic (questions 9, 10, 11, and 18) might give insight into the interviewee's skill in logic, which would certainly be useful to all workers, though especially to programmers. I was fascinated with this question (#20):
“You are in charge of 20 people, organize them to figure out how many bicycles were sold in your area last year.”
My first reaction was to think that this too was a question that had more potential for misinterpretation than it had for understanding the interviewee. After further thought, I began to realize that not all problems a business leader will face will be similar to problems faced before, nor will they be predictable. Being able to adapt to new and unusual situations would definitely be a valuable skill in a business environment, and needing to organize people to determine bicycle sales would fall in that category. I'm still not sure that this question is the right one to get at this ability, but I'm unable to come up with a better one at this point.
Saturday, March 5, 2011
Six Sigma for programmers
To start, those that came up with the Six Sigma idea believed that in order to achieve high quality, one must first achieve consistency. The steps to achieve this consistency, often known by their acronym "DMAIC", are as follows:
- Define - One must be able to define exactly what success looks like in order to determine if it has been achieved. Otherwise two people will look at the same results and will likely have different opinions on whether it was a success or not.
- Measure - Unquantifiable improvements can lead to ambiguity and disagreement. Therefore some objective way to measure change must be achieved. (If you're curious, the term "Six Sigma" comes from the number of defects measured in any given process.)
- Analyze - One must determine the causes of the inconsistencies in order to fix them.
- Improve - Being able to find the cause of problems doesn't do much good unless one can fix them.
- Control - We are all creatures of habit, and unless there is some driving force for permanent change, we will likely fall into old (bad) habits.
How would a programmer use this to his or her advantage? Let's start with the performance example. If someone wanted their web site to be "fast", we should define and measure how fast that is. 1 second per page load? 3 seconds? Keep the page load time under 5 seconds for those with 56K modem connections? Next, for the pages that are too slow, analyze the performance issues to determine the cause. Do the pages have too much information? Is the database connection too slow? Is the business logic poorly written? Are there too many business rules being run getting in the way? Once the problem has been determined, improve the situation by fixing the specific problem. (Since improving performance could be a book in itself, I'll hold on that for now.) Finally, be sure to control the process to make sure that slow pages are fixed before being pushed to production, perhaps by running automated tests. Be sure to document any exceptions you may wish to make to this rule, or break up the page into smaller ones in order to achieve the same functionality.
Saturday, February 26, 2011
The end of the IT Department?
http://37signals.com/svn/
While I think this blogger (David) is somewhat correct in that the traditional IT department is in danger, I think he has over-simplified the problems in communication between business and IT. (Despite the fact that this is my second blog post recently rebutting a point made on a 37signals blog, I swear I don't have anything against the company itself or its bloggers.)
To start, David's characterization of IT personnel as creating roadblocks in order to keep jobs for themselves only perpetuates false stereotypes of IT workers. One does not need to look hard before finding out that the "rigid and inflexible policies" put in place by the IT workers are often there to protect the company's data, either from accidental or malicious acts. Bad information makes Information Technology useless, so it is vital that IT workers strive to protect and maintain good information. Secondly, I have never encountered a situation where a good worker, IT or otherwise, deliberately making things hard for users in order to save jobs. IT workers tend to want to make things more efficient in order to move on to more exciting projects using new technologies. Finally, it will be a LONG time before medium-sized (much less large) companies can get most or all of the services it needs from "a web site somewhere". It is extremely tough to integrate technologies, customize workflows, increase security, etc. without some sort of IT department.
I don't doubt that there are a few companies will choose to go the route that David outlines. However, those that do may find themselves at a competitive disadvantage. As I wrote about in an earlier post, companies that treat their IT implementation team as a true business partner will find themselves better able to build system that provides business value. Companies ought to strive to have their IT operations in Stage 4, otherwise they cannot get the most out of their business.
I would agree, however, that the days of the traditional IT department are numbered. I have not done sufficient research to say what the trends are, but I think it would make sense to reorganize the IT functions to break up its current functions into different areas. In many companies, it may make sense for each department to have personnel that have IT skills appropriate for that department. For example, public-facing web development and design may be done by marketing personnel or financial rules may be programmed by accounting personnel. Rather than eliminating the IT department, IT personnel would instead be responsible for ensuring consistency in approach, ensuring safe data (both in terms of security and in reliability), and evaluating future trends for company applications.
For such a scenario to occur, we must all be more knowledgeable. At least David and I agree that the future of IT involves having more technically-savvy business people, but I would take it further than he seems to. Business people will need to learn the basics of programming, source control, and other similar items. IT personnel will need expand their knowledge and experience beyond simply maintaining computers and computer systems to learn more about enterprise-level concerns and functions. It would not be an easy transition, but I think it is a necessary one, both to get the most out of our technology efforts but also to prevent us from being outsourced.
Sunday, February 20, 2011
Interview questions
http://www.hanselman.com/blog/NewInterviewQuestionsForSeniorSoftwareEngineers.aspx
I usually like reading what Scott writes because he is often interesting and insightful, but I was quite disappointed with this one. Interview questions must first be designed with an end goal in mind. Is he looking for someone to implement the business analysts' designs, or gather business requirements themselves? He's clearly looking for the former, but a significant number of openings I've seen for senior software engineers are looking for the latter. Is he looking for someone to lead teams of developers, or do most of the programming from base architecture work to finishing touches? He's not really asking questions about either, so I'm not sure what his assumptions are here. Is he open to engineers who don't believe that object-oriented programming is the one and only true way of programming? (That question isn't entirely fair, since it's perfectly valid for a company to say that OOP may not be the only way to program, but it is the standardized way in their company.) And the list goes on.
In the end, interviewers should be aware of lists like these because they can give an interviewer food for thought in trying to determine which interview questions to ask. But always keep in mind that the writer has their own biases, and they may be trying to solve problems that may have nothing to do with yours.
Saturday, February 5, 2011
Marketing for IT
- Understand what it is your customer needs
- Understand how you can meet those needs
- Teach the customer about your product (Advertising)
- Persuade that your solution is worth money (Sales)
Eventually we came to the conclusion that we should stick with what we’re good at: web apps. We know the technologies well, we have a great development environment and workflow, we can control the release cycle, and everyone at 37signals can do the work. It’s what we already do, just on a smaller screen. We all loved our smaller screens so we were eager to dive in. Plus, since WebKit-based browsers were making their way to the webOS and Blackberry platforms too, our single web-app would eventually run on just about every popular smartphone platform.
While these points are important, it is much more important to consider what their customers need. If their customers need the greater flexibility that can be found by creating device-specific apps, they will be short-changing their current customers and limiting their markets in the future. They could also be alienating their current customers who don't want to be forced into a certain solution merely for the convenience of the developer. Instead, they should determine what it is that their customers need. Do they need cross-platform solutions? Do they need top performance and ease-of-use? Are there going to be a lot of updates to these apps? Without answers to these (and other) questions, you can't reasonably limit yourself to one solution or another.
Saturday, January 29, 2011
Hiring programmers in the age of search engines
But are they the tools that programmers need to succeed?
Here is my list of top six skills I'd want out of a senior-level programmer, in order of importance:
- Ability to understand the implications (business and technical) of making certain changes
- Ability to understand the business need behind a certain feature and be able to suggest technical alternatives to meet that need
- Good grasp of general programming best practices
- Ability to find appropriate solutions when a difficult problem arises
- Ability to pick up new technologies and ideas quickly (since technology changes quickly)
- Specific knowledge of the language/tool-set being used at that time
Yet this is exactly the approach that most hiring managers seem to take. They try to gauge a candidate's technical skills, focusing on what I'd argue is the least important skill a programmer needs. What's the alternative? Start by listing the most important tasks that the programmer will perform. Don't focus on just the technical skills. Ask questions to gauge the candidate's abilities in this area.
For further details, you can read one of my previous blog posts about the subject.