AuthorMessage
Ashura
Unstopable
Posts: 370

Quote:

Why Software Sucks
by Chris Stewart
Originaly Posted November 2, 2006
Software sucks, 80% of projects fail, and most developers are unhappy individuals. Why is this? My answer; complexity. Complexity is the single factor I would attribute poor software to. The more you have to do, the harder you make it on yourself, the way requirements seem to change, the worse the final result is; right?
Software needs to be simple. Software development needs to be fluid and agile in practice. Developers need to see the forest, not just the trees. We need to solve customer problems and deliver functionality. Developers shouldn’t spend days building component after component, abstracting to the point where the next developer is clueless, and ignoring simple deliverables as functionality. All too often it’s more about how rather than what. By that, I mean most developers care more about the technology they want to use or some algorithm they want to develop. In the grand scheme of things, those things really don’t matter. Developers should focus on what they need to deliver to please their customer. I was that how developer. I would concern myself with the technology and the implementation, rather than the final deliverable. While I enjoyed building the solution in my little bubble at times, I could see the customer didn’t care about my neat solutions. If it fulfilled their request, that’s all that matters. Unfortunately, my cool technological solution fulfilled the requirement fully only about 50% of the time. That software sucked.
So what can you do? Step one is focusing on your customer. They often don’t know what they want, which is fine. Sit down, listen to them, and I mean listen. Don’t talk, don’t formulate your next question or “solution” while they’re speaking. Sit down, turn off your geek, and listen to your customer. This is the person you need to satisfy with your software, so it’s probably beneficial to hear what they want. Next, through hearing their wants and needs, hash out a very general abstract in what you’re going to build. They want an online store to sell books? OK, cool, there’s your abstract. You don’t need to worry about UI placement, object models, and administrative functions yet. Don’t add complexity up front, or you’ll fail.
With your abstract, sit down with your customer and focus on a repetitive process for delivering functionality. Do you want 2 week iterations, 1 week? Establish some iteration schedule and meet it. If you can’t fit in an iteration, scale them back and aim smaller. Expectations are everything. If your customer expects a lot and you don’t deliver, they’re disappointed. If your customer expects half of that, and your deliver that or more, they’ll have a completely different perspective on you and your work. Through these iterations you can work with the customer on a weekly, or bi-weekly basis on delivering functionality. Not “cool solutions”, but functionality that meets business requirements. Business requirements that improve the bottom line for your customer.
As your iterations progress, focus on the UI. In our example, build the catalog page for the books. Lay it out, what fields should be displayed? Your customer and their customers see the application through the UI, not the code. You should see it that way too. Once you build each page/section, you’re effectively building the model at the same time. Sure, you’ll need to add things in your model and database that aren’t visibly seen but the general idea is there. Work on the things that your customer cares about, the things they can see as a verifiable success. Each iteration should deliver a real, visually verifiable, compact piece of functionality. Nothing big, not half of the solution, but small and easily understood pieces of the whole.
I think most of us have lost sight of what’s important in software development. Doing so has lead to bad projects, and plenty of failure stories. Which then leads to unhappy developers. Lets have fun again. Lets enjoy delivering real business solutions. Ship something your customer loves, even if it’s not cool to you. They’ll love it, they’ll want to talk about it, and you’ll be happy someone is gleefully talking about your great business solution. You’ll be happier, you’ll enjoy your job more, you’ll find new excitement in what you dread today. Sounds easy, eh? Lets make software not suck anymore!