Monday, March 27, 2006

Using ASP.NET Session State in a Web Service

Using ASP.NET Session State in a Web Service

This was a happy discovery. Haven't had a chance to take advantage of it, yet, as most of our focus is on .Net web apps, but we do occasionally use web services, and many of us thought web services were stateless.

Friday, March 10, 2006

Way To Go O.O.! - The Daily WTF (VSmirk)

Way To Go O.O.! - The Daily WTF (VSmirk)

Love this site. I've been too busy to really look at it lately, but it's a great way to see really, really bad code!

Thursday, March 09, 2006

An Article on Software Development Best Practices

Received an email at work today about this article: The Joel Test: 12 Steps to Better Code - Joel on Software. Now, myself, when I was planning on a move back to Knoxville, as my wife has an Internship here, the best candidate company I had down there at first was a financial services company that has been experimenting for the last two or so years in implementing Agile Processes.

In talking with a friend of mine who works there, I've learned they've got the whole gamut. They run hourly integration tests -- mind you we're talking automated tests. Everything is regularly recompiled and redeployed, although he admits that they've run into some trouble with the automated deploy process. Code is peer-reviewed before being checked in. Unit tests are written for most of the code that is produced.

I ended up taking a job with some former co-workers who have started a company. But I would have loved to have seen the Agile environment in practice!

Thursday, March 02, 2006

Coding and Design Blog

Okay, so I'm going to get topical, here. As a professional programmer, I have to present myself in the best light possible, but in any endeavor, you are truly trying to learn and explore, to find ways to grow in your chosen field, and in order to do that, you have to risk looking like you don't already know the answers and instead learn to be naive again, asking questions and finding new solutions.

That's what I aim to do here.

I have worked as a programmer, a systems analyst, investigating business requests and creating requirements for other developers, as a project manager, taking a defined project and working with a team to implement the proposed solutions, putting out fires, managing change, and as a systems architect, taking existing systems of software and databases and deciding how things should be arranged, or rearranged, to work more effectively and to be easier to maintain.

The fundamental aim of any business is to generate more revenue than is being spent on overhead. You want to make a profit. Anybody involved in even small investments of money and time has learned that sometimes you have to work at a loss before you get the intended returns. You may go into debt to go to college or to buy a car or a house. But if the car enables you to get to a high-paying job, or if college enables you to make even more money than you would otherwise, it is worth the investment.

Somehow, though, in business, there is a push to get those returns sooner rather than later. Perhaps it is because there are multiple people managing different responsibilities: bosses delegate responsibility for executing a task, but maintain responsibility for budget, and so start putting pressure on their underlings to cut costs and get their projects out sooner. Or perhaps it is because projects so often lose momentum, due to red tape and endless meetings, thereby creating a sense that projects have to be completed soon, at the expense of well-prepared design, or they will never get done at all. Or perhaps it is because there is a sense of futility in trying to planning things well, because no matter how much you plan, someone will change things, now or later, making most of the plan irrelevant -- and how much is that helping the company's bottom line?

So one of the biggest tasks for anybody in a senior developer or project management role is to balance the concerns for the bottom line with the real benefits of taking the time to plan, to design and to anticipate future needs.

An example: Someone comes to you and asks for a web application that brings up customer orders. All they want, they tell you, is to have the orders displayed along with the customer name and phone number in case they need to contact the customer when there are problems.

Easily done.

But what happens if you later on get a request to include the ability to add new customer records? Or to update the customer phone number once you've learned of a change?

What happens if your company starts taking clients who want you to manage their customers, as well? There are database tables already in existance which describe the customer, the orders they have made, the money they have paid. Now you have a decision to either use these existing tables, adding a field in the data table designating them as your customer, or your client's (and what happens if you both have that customer at different times?), or to create an entirely new system of tables, maybe based on your existing one, but only used for your client's customers?

Your decision maker is going to be struggling with the impulse to make this change quickly, while minimizing the chance of bugs occuring in your software. And one basic premise in software design is not to just copy and paste your existing code and data tables so you can have one work for your client. Why? Because now, any time you have to make a change, you have to make the matching change in your other copy of the code. Twice the work.

But I can tell you for a fact that, no matter how much the best intentions will be to modify applications to work flexibly under both circumstances, the interest of trying to get that project done sooner so you can start making money faster will always result in some or most of your problems being solved by copying entire bits of code, adding columns to an already big data table, including specific bits of code to handle one client's specific needs.

This blog is about these problems. It's about software development as a career. I will post occasional blogs about my own day-to-day challenges and discoveries, about questions or theories I am pondering, about articles I have read. About how and why programming solves our daily business and personal problems, and how things can be managed better.