Archive for Software Development

Agile Soup

Fire PlaceOK obviously something happened to get me back into the blogosphere. That “something” is actually two things. First, I spent the whole summer hunched over my table saw building a fireplace and that project is finally done. I am proud of that sucker. I spent a lot of time on the phone with my dad figuring out what I was doing, but we made it happen and that room is damn toasty.
Second, as I recently mentioned, I went to the Higher Ed WebDev conference in Cincinnati. The conference itself wasn’t totally amazing or eye opening, but it did help re-enforce some motivators I had just stewing in my head. We will call it the catalyst.

Agile SoupWe will also call these stewing ideas “Agile Soup.” Agile is a model for a software development life cycle. You might even call it a project management methodology. The old, most accepted method was called a Waterfall. There’s also an IBM version of waterfall called RUP, which is what I followed religiously for years. I recently started reading about these crazy developers though in California who were trashing the idea of requirements and actually developing on site with clients instead. Gone were requirements documents. In came user stories and use cases and note cards. It sounded like fairy tail land… until I started reading up on it. Agile sounded like it could be a legit model for small projects so I tried it.

Now I’m not only drinking Agile Kool-Aid, I’m serving up some Agile Soup. This article will serve as a quick intro on how Agile can be thought of as more than just an SDLC and how you can use the principles to run your whole business.

First off, let’s review the AGILE Manifesto. If you’re familiar with Agile, then you’ve seen this before:

Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan

I love every part of that. That manifesto is sort of the creed that drives a software development life cycle, but nowhere in it do you see any detail about how exactly the process works. It’s minimalist. The actual Agile process (or at least the one I use, called SCRUM) involves prioritizing client needs, figuring out how many of these needs can be accomplished in a 2 week development “sprint,” and then delivering, regrouping, and re-prioritizing every 2 weeks until the client decides, “hey, this is good enough.” A colleague of mine at Ohio State, Beth Snapp developed her own version called “Rapid Iterative Development.” Her idea is very similar to SCRUM, where we have this software development paradigm that is based on quick, well coordinated, flexible delivery. It focuses on developing working software in small chunks rather than working on abstract documentation followed by long development periods. I like this quote:

The problem with abstractions (like reports and documents) is that they create illusions of agreement. A hundred people can read the same words, but … they’re imagining a hundred different things. That’s why you want to get to something real right away. – Rework

So the goal is to develop these small chunks rather than spend a bunch of time writing documentation and then disappearing into a cave for months building a monster. This way, you’ll be able to change direction easily. The more expensive it is to make a change, the less likely you are to make it. It’s also a lot easier to completely scrap everything you’ve done in a 2 week sprint than it would be to scrap an entire project. So if you screw up or miscommunicate something, you catch it before you become attached to it and you can scrap or change course before it’s too late. The concept is pretty simple, really.

My first light bulb moment piecing Agile into a business philosophy wasn’t really an “agile” moment at all. It came while listening to someone talk about the right approach to social media. His point was that you have to be authentic. These days people don’t value press releases as much as they value customer comments. A facebook or twitter account that is maintained on behalf of a company by a nameless, faceless PR firm or communications office will get exposed and ignored. But if Bill Gates or Steve Jobs get real, people will listen. So the idea is to embrace who you are as a company and be authentic if you want a successful social media campaign.

Rework

Rework

So I thought about that and I got comfortable with the fact that I’m a small web development freelance ringleader. Then I started reading the book Rework by Jason Fried and David Heinemeier Hansson and the light bulb really came on. The book is presented in a bunch of really short 2 or 3 page chapters. The chapter names have Agile oozing all over the place:

  • Planning is guessing
  • Ignore the details early on
  • Good enough is fine
  • Your estimates suck
  • Make tiny decisions
  • Speed changes everything

After reading that great book, listening to people tell me how being authentic is hot, and really embracing the Agile SDLC, I came up with my own Agile Soup… also known as the Home Base Web Solutions manifesto:

Fostering relationships over volume and efficiencies
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Personal attention over following protocols

OK two of those didn’t change. Get over it. I thought about it for a while and realized that I was just rewording the original Agile Manifesto. The end result is the same though. My business is unique. Each of my clients are unique. Every project I work on is unique. If I stay lean and focus my efforts on rapidly deploying software that meets my core requirements and continually improving both product and process, I can’t go wrong. If I’m focusing on building relationships and collaborating with clients to help their businesses grow rather than negotiating terms and conditions to put money in my pocket, I think everyone is better off because if my clients are successful and they like me, not only will they use me again, but they will recommend me to their friends.

PHP vs ASP.NET

Have you ever talked to a NASCAR fan and asked him Chevy or Ford?  Or a college football fan and asked Ohio State or Michigan?  Or how loaded is the question, are you a Republican or a Democrat?  It’s pretty funny how it’s really hard to find someone with an unbiased reaction to those questions.  If YOU are asked one of those questions, you almost don’t even want to answer  because there’s a 50/50 chance you’ll end up in some sort of endless argument.  (Read about halfway down this article to see how loaded the question Pepsi or Coke? can be)  The same holds true for computer geeks when you ask PHP or .NET?  Programmers seem to either be gung-ho Open Source advocates or Micorosft worshipers.

Well, folks, the good people at Home Base Web Solutions are here to offer an unbiased overview of the two for your reading enjoyment.  We do realize that if you are reading this article, you probably are thinking of programming your own website rather than paying us to do it for you and we are OK with that.  If your site fails, give us a call and we will make it right.

First of all, before getting into specific pros vs cons of the PHP vs .NET, there are some important general concepts to understand:

  • First and foremost, .NET is a framework, PHP is a language.  .NET can be developed using many different languages, the most popular are C# and VB.
  • .NET is proprietary, PHP is Open Source.  Support IS available for both.  Microsoft support may come from certified professionals, but sometimes costs money.  PHP support is more readily available, but may come from forums with no guarantees.
  • .NET may include compiled code (.dll’s), PHP is interpreted at run time.  If designed properly, this should result in faster loading pages in .NET… however, unless you are doing some sort of very complex operations behind the scenes, the difference is negligible.  There are probably specific examples out there where one method is faster than another, but there are many variables that go into how fast a page will load.  If the page is designed well, it will load fast.  A nanosecond either way won’t bring down anyone’s server.

Now below is a quick comparison of some general features comparing PHP vs .NET.

Features .NET PHP
Easier and quicker to learn X
Faster to deploy on small websites X
Superior development environment X
Built in plumbing for a wide variety of functionality X
Designed to scale X
Loosely typed, easier to develop small applications X
Generally quicker to make simple changes to existing apps/sites X
Hosting costs are generally the same X X
Precompiled (.NET) vs. Interpreted at run time (PHP) X
More control over the entire HTTP pipeline using HttpModules and HttpHandlers X
Debugging and error handling capabilities X
Object Oriented framework: inheritance, polymorphism, overloading, etc. X

Now before we get a million comments about the quick run-down above, it is important to note that it IS possible to develop object oriented code using PHP and just because .NET has some neat debugging capabilities doesn’t mean that they’re always immediately easy to implement. There is plenty of material out there that argues tooth and nail either way, but in our general experience, we have found everything above to hold true… for us.

At Home Base we may use either .NET or PHP depending on the application. Small standard web applications such as blogs, brochure websites, standard shopping carts, and basic content management systems are done using pre-existing open source, PHP based solutions. WordPress, Joomla, and a host of shopping cart solutions are out there. They are easy to install and easy to customize. An entry level programmer can open up a PHP based website and probably figure out some of the nuts and bolts of the system to make some minor changes.

For large custom applications, our preference is to use .NET. The scalability, built in components, and inherent object oriented framework provide solid fundamentals for a well designed application. .NET also provides us a platform to more easily implement a multi-tiered framework, which allows us to use some development techniques such as test driven development, or the ability to plug in specialists into specific layers if ever necessary.  .NET also opens the door for us to have multiple User Interface gateways.  We could develop an application and interchange a web interface with a mobile interface with a desktop interface or even some custom robotic pimp shit interface that hasn’t been invented yet.  If your application is properly layered, you can interchange all of those UI’s without touching your core.  (I am currently developing an application for the Microsoft Surface. 90% of my development and testing will be using a simulator. This is all possible, and easy, with proper layering.)  We will save the benefits of an N-Tier software architecture for another post though.

We also prefer MS SQL Server 2005/2008 vs MySQL, but again, that’s another post. You can technically use either database application for either PHP or .NET, but typically SQL Server comes hand in hand with .NET and the same holds true for MySQL with PHP.  If your database is small (<100,000 records) and your server load isn’t at CNN levels, MySQL should work fine.

I will try to update this post with some good links to similar content.