Lets rewind back two years ago. I was a fresh software developer of our college. The major problem plaguing college students is that they do not have any practical experience. How do you obtain practical experience? You need to work! You need to make the mistakes you need to make to become a productive professional.
Out of college, I knew exactly one programming language proficiently: C++. Proficiently is probably a poor choice of words. I KNEW C++, but I KNEW enough to make simple decisions and get the job done the best way I could. My first (technically second, but we won't go into that) professional job was all C#. I didn't know C#, but I knew enough C++ to become very comfortable with C#. In fact, one week after starting the job, I was adding new features to the project I was assigned too.
However, I knew that I needed to expose myself to a several different technologies. My wife and I took a trip to Nashville and visited with some friends of ours. One night, I was having a discussion with my friend about his hobby, photography. We had ended up on the topic of him putting up a web page for all of his photos to sell. I thought it was a wonderful idea, and volunteered to build the site for him. The caveat was that I would do the site for free, seeing as how I needed to build up my skills in ASP.NET. He would pay for hosting, etc, and I would build the site for him.
This was almost two years ago, and the site still remains undone.
So what happened? Life happened! Paying jobs happened! Of course its a great idea to say that you're going to do something for free to help someone else. What happens though when you need to mow the yard? Stay late at work? Get sick? Spouse gets sick? The first thing you drop is the project you're not getting paid for.
Fast forward to a year ago. I volunteered to work on my church website. Same scenario. I wanted an avenue to build on top of the ASP.NET skills I had, and I figured working on my church website was the best way to do that. The difference between this project and the first was that I needed the input of several people in order to make any progress on the site. When you're not being paid, the people you're doing the job for aren't as quick to respond to emails as they would if you were charging per hour for their response. This site will be done, but it's taken several months longer than it needed too.
What's the moral of the story? You need work to show off in order to get more work. Offer to do a free project every now and then. Use it for experimenting with new technologies. Don't allow the project to get too complex. You don't have time for that. Get it done as soon as possible. If you let it go for too much longer, you're never going to complete it. That is, of course, you have more will power than I do.