Monday, December 28, 2009

My 2010 Challenge List

Last year my friend John posted about challenging himself for the new year. Obviously not a new concept but there was something I enjoyed about his posting the ideas publicly and then following up on them, if for no other reason than I realized I too wanted to accomplish some of the same things. So in that same vein I figured what better way to dust off this blog than to commit to digital pen and paper my list of resolutions. In fact the dustiness of the blog will directly influence my first one:

Professional Goals:

1) Update this blog with a new topic at least twice a month. This seems an obtainable goal, I do have new ideas to talk about I just never follow up or write them down. Time to change that.

2) Speak at something, anything, and codemash doesn't count. I consider myself a terrible public speaker. Always have been. I get all nervous and shaky and well.. its awkward, but every time I step up and do it I get a little bit better. So I need to do it more often. This could be at something like Ignite Cleveland or a user group or conference. Whichever.

3) Continue developing a Kanban approach for consultancies and apply it to my current job. Towards the end of this past year I started getting my coworkers interested in improving how we do project work. We started using a Kanban-lite style approach for in house work and overall people seem to like it. I want to build on this and actually teach people how the system works. Fortunately I have some fellow advocates in this one.

4) Learn some of the new development techniques and technologies in the .NET world. My day job is 90% .NET work but in reality I find myself more passionate about open source technologies and little scrappy "upstart" languages like Ruby. That said there is some really cool stuff happening in .NET and in order to continue to make my career there I need to learn them. So a short list:

  • NHibernate w/ Castle or ActiveRecord

  • WPF

  • WCF

  • Microsoft MVC

5) Continue to get to know Ruby. I really like this platform and the communities focus on TDD (or BDD) and generally maintainable code is commendable. This year I mainly want to accomplish a couple things.

  • Use cucumber on a project

  • Get comfortable with Rails and RSpec where I don't need a book to look up simple things anymore.

  • Compete and complete an application for Rails Rumble 2010

  • Relaunch EventCasts (the new name for our previous Rails Rumble app Twoups.

6) Get things squared away with Greenfield Studios. Greenfield Studios is the company that some friends and I started last year to try and build a site that would help people affordable use and locate green technologies. The site never amounted to much due to a lack of real data on the topic so it has effectively been shuttered. Since then I've wanted to reuse the name and restructure it legally to serve as an identity to put on any independent contracting work or product work I do. This means finding a good lawyer who I can afford. Suggestions are welcome :-)

7) Finish EventCasts and one other side project. Lately I've been using google wave to track the various side project ideas I have. At present there are 4 in the hopper. I want to get EventCasts done and one of the other 4 by the end of 2010.

House Goals

1) Finish remodeling the basement (without hiring someone to do it). A year ago when we moved in I decided I wanted to build an entertainment / theatre room in my basement. Not sure I'll be able to afford the expensive projector for it this year but I can finish the remodeling part. Also i want to learn how to do this stuff, so hiring someone for anything but the electrical and maybe carpet is off limits.

2) Seal the floor in the garage - I like the look of a painted sealed floor.

Personal Goals

1) Take a vacation somewhere outside of Ohio or any state that borders Ohio. I haven't gone away on vacation (excepting our honeymoon) in a long time.  My wife and I really want to go to NYC or Vegas, which neither of us have ever been to.

2) Pay off my friends at Discover Card. I bought a lot of dumb crap in college and continue to do so.

3) Figure out a "diet plan" and stick to it, lose 10 lbs a month. This is quite possibly insane, and I probably wont pull off 120 lbs in a year but what the hell why not shoot for the moon. I hate the phrase diet because even I know there's no such thing as a fad diet that works. Its about discipline and consistency in eating, exercising and life style. However despite knowing this academically I have yet to actually accomplish it.

I suppose that's all for now. I liked John's reading list from his post but I'll save that for another update (2 per month now right?)

Do you have any plans for 2010 or do any of these "resolutions" ring true for you as well? That's what comments are for :-)

Thursday, July 9, 2009

What is the web missing?

This week's announcement of an entirely web-based operating system in Google Chrome OS has sparked a lot of discussion. Google's strategy for now seems to be to invade the netbook space, an area where an offering like Chrome OS could do well. Netbooks, by their very nature (and name) are designed around internet use and there are very few day to day activities that you can't do in the "cloud." The unanswered question is where google will go with this product after netbooks. They have alluded to branching into the desktop market but there are still a number of areas where a purely internet based OS won't work, for now.

Since reading about C.O.S. I have been wondering what market opportunities are out there if suddenly the web becomes the operating system. What areas of computing still demand a rich desktop environment over a web application and what could be done to move past that. A few things came to mind.

First one that is near and dear to my heart - software development. Right now us code monkeys do most of our work in an editor/IDE running code locally on our machines before promoting it to some sort of shared environment, be it a testing environment or for the more radical straight to production. The fanciest of us use tools and practices like XUnit, BDD and various code metrics applications. Right now there is no purely cloud based implementation of this. In order to move software development onto the web you could need some combination of a hosted virtual development machine with a web interface and the appropriate tooling to make that work. We would need a web-based programmers text editor (yes i know people have ported VI to javascript.) Also I'd like to wish visual studio .NET and eclipse the best of luck in converting their UI to a website.... hah.

The next area of computing that came to mind is a bit more consumer oriented - music. Yes Pandora rocks. So does Last.FM, but their service isn't really the same as say iTunes. In order for the web to become THE computing platform we would need a hosted service where you could listen to your music library, make playlists and browse new music. Also... and here's the fun part... we have to figure out how to sync this to an iPhone / iPod / Zune / whatever.

The last, and possibly most obvious one, is gaming. A service like OnLive would help but who knows when that will be out.

So what other areas of computing currently need a traditional OS?

Tuesday, July 7, 2009

Book Review: The Passionate Programmer

Chad Fowler's The Passionate Programmer is a book about happiness. It is about how to lead a successful happy career doing something that you really enjoy. Naturally it is geared toward software programmers but in reality many of the tips Fowler hands out could be applied to almost any career.

Fowler takes his experiences as a programmer first and a musician second and uses them to identify a set of 53 "tips" broken up into 5 main sections. These tips run the gamut from identifying a core technology or specialty to going out on your own as an independent.

At first glance much of Fowler's content could be pushed off as common sense, however in many cases the most obvious of concepts isnt readily apparent until it is brought to one's attention. The notion of treating one's career as a product is a popular notion that Fowler subscribes to and bases his advice on.

Fowler begins with "Choosing Your Market", a segment focused on identifying a technology or specialty that fits your career goals. He identifies criteria to consider when evaluating the investment required to become versed in a particular technology.

Next he lays out "Investing in Your Product." This section identifies how one can develop expertise in both the technologies they have chosen to specialize in as well as how to become a generally excellent programmer.

"Executing" is the next section of the book, which identifies how you can work to the best of your ability in your day to day tasks. A good percentage of this section is motivational in nature. Chapters like "How Good a Job Can I Do Today?" really seek to overcome the desire to stay in bed in the morning.

Fowler then covers "Marketing..." with tips about how to get your name out both within your current place of employment as well as the greater community.

Finally the book finishes with "Maintaining Your Edge" a call to action to not give up on the prior tips and to continue to treat your career as your product.

Overall the book is a fascinating read and well worth the investment for anyone who enjoys the "softer" side of software development. It serves as an excellent companion to The Pragmatic Programmer, a book with whom it shares some lineage by virtue of the publishing house.

On a school scale I would give The Passionate Programmer a solid B+. It was a good read, with some great information, but it isn't a book I would be compelled to buy as a gift or to put on a "required reading" list.

Monday, June 22, 2009

TECHnic '09 Recap

This past weekend I played co-host to the first of what will hopefully be many TECHnic picnics. The concept is simple. Invite user groups from around the community to a purely social outdoor picnic. Provide food, games and prizes and give people a chance to network.

I'm happy to say it went quite well.

Over the course of the day we had about 150 people come, with peak attendance at any give time around 60 or so.

For the first go around our main sponsor was the fine folks at Boundless Flight, a local consulting / technology company that helps sponsor the local Java user group. Many thanks to Heidi Hooper for latching onto the TECHnic idea and making it a reality. When it all came down to it Heidi did 90% of the work, i basically helped find prizes and played M.C. for the event.

In addition to boundless we quite a few companies sponsor and provide food, drinks or other picnic necessities. Briefly thanks to Pradco, Bulldog Resume, TSC, Bluebridge Networks, Best Technology Strategy, Simplex IT, Eventus and Flex Hire (i hope that's everyone.)

Finally we had some great companies step up and provide prizes or give aways for the event so another set of thanks to Microsoft, The Pragmatic Programmers, Redgate, Jetbrains, Balsamiq, Wireframe Mockups, Telerik, Techsmith, Scooter Software, O'Reilly, Apress, Wiley Publishing, Macromates, Cornerstone and Pixelmator.

You guys all rock. Here's to hoping the technic concept continues and gets bigger every year. I've already had a couple people from outside of cleveland ask me about it considering to put one together in their home town. I hope they do, it was a great time, an excellent networking opportunity and all said and done well worth it.

Sunday, June 7, 2009

Is Mobile the New Internet?

An interesting thing occurred the other day that got me thinking.

I spent Saturday evening with a friend wandering the local Microcenter while he considered purchasing an iMac. He was making this purchase so that he could put a greater focus on his work as an iPhone developer. Naturally we were talking about the topic while the salesman was helping answer questions regarding the machine. The salesman mentioned that he too was studying iPhone development. While he was not a full time programmer he had some hobby background in Java and other languages and really wanted to write something for the iPhone.

We left the store to get dinner and when we came back a different salesman was working. Again the topic of iPhone development came up and again this salesman said he was also looking into it. His background was mostly PHP and a bit of VB, again a hobbyist.

Having had two different people, in the same night both mention their desire to learn iPhone development I said to my friend "Wow that's kinda amazing. Two people, neither of which are full time programmers and the iPhone is driving them to learn programming. When was the last time a new technology really drove a growth in hobby programmers?" His response - "The internet."

So the thought occurs to me, is this the dawn of a new trend in computing so significant that we as professional programmers need to keep up lest we fall behind? Every so often something comes along that can separate the people who are always learning, always focused from the people who aren't. We saw this when mainframe developers suddenly found themselves writing object oriented code. We saw it again when "win-forms" (or equivalent) programmers were asked to write for the web. Will mobile be the next fundamental shift in paradigm?

I'm banking on yes, and here's why.

The rise in smart phone use (and let's be honest, the invention of the iPhone) has changed consumer behavior so fundamentally that the lack of a working mobile website can now be considered a competitive disadvantage. Consumers may not have yet reached the point where they would switch from one company to another based on the strength of their mobile offerings, but i suspect if presented to some consumers during the initial purchase process it would weigh into their decision.

Would a day trading stock buyer manage their portfolio through a brokerage firm without mobile access?
How about using a bank where you can't check your balance on your phone?

Additionally I think we have reached the point where businesses can see the smart phone replacing some of the functionality that laptops have served in the past. I used to work for a fairly large insurance company. At the time all of their claims representatives carried laptops and digital cameras so that they could document vehicles as they inspected them, and over the cell network upload that information to the internal claims management system. This had the disadvantage of being bulky and expensive to maintain / repair. The laptops and camera broke frequently, often requiring a complete replacement to the tune of $300-$1500. Replace that with a $200 iPhone, blackberry or palm pre and you have a low cost, easy to carry device capable of doing everything you could do before.

So is mobile the new internet? Should we all be buying "Learn iPhone development in 21 days" books, or is it a passing fad?

Friday, May 29, 2009

Selling Agile

Recently I have been giving a lot of thought to the nature of managing projects in a consulting world. You see right now my day job is that of a software consultant / contractor. As a consulting company we do a fair mix of in-house project work and staff augmentation. Traditionally we have been a mostly staff augmentation firm, but with a shifting economy our sales focuses is becoming increasingly project heavy.

As our focus shifts we find ourselves trying to develop a niche as a project specialist shop. Part of that process has been having a lot of conversations. Conversations about project metrics, project accounting, tools, best practices, methodologies, et. al.

Thursday afternoon I was having just one such conversation with one of our managers. The topic of agile development came up, what it does well, how it would fit into our business and what we can learn from it. Up to this point we have mostly approached projects in a very traditional, waterfall-esque manner, and more often than not it has worked. However there is always room for improvement so, being a bit of an agile "believer" I've been wondering why not adopt the approach.

The general consensus was as follows:

  1. Iterative development is a fairly solid way to enforce discipline, make a project segmentable, and improve quality by shortening the feedback cycle.

  2. Establishing the end of iteration review culture, essentially showing our work to our clients on a periodic basis while in development is a good thing. It's always preferable to deliver what the client wants now, not what they asked for 6 months ago.

  3. TDD, from a management perspective, has its advantages but as always its a hard fight. Personally I'm preferable to the "why even ask just do it approach" but the topic came up so the natural reaction of a manager tends to be "what do i get out of it besides lost time." Fortunately one of our guys has had some luck showing the benefits so this might be a battle we can win pretty easily.

But in despite of these net positives there were some unanswered questions. Most of them revolved around metrics and measurement. Things I vaguely know the answer to but having never been an iteration manager or agile project leader would need to read into a bit before being really informed.

The most signifigant question, and really the point of this post, is how do you sell agile to your customers?

Considering my companies background the majority of our clients are large, fairly traditional organizations. None of our clients with whom we do project work are inherantly agile shops. The leads to conversations about some really core aspects of the methodology that I can't answer, like:

  1. How do you convince a company to dedicate a resource to being available to do periodic reviews, iteration review meetings and other feedback you need in order to have that short feedback cycle?

  2. How does the billing and project initiation process work? Specifically we do work in two different formats: Time and material or fixed fee. Time and material projects would be fairly easy to do in an agile format. In that format you essentially bill as long as your doing work. Fixed fee though are problematic. In a fixed fee project you generate a proposal up front, quoting a particular amount of time and money and at the end of the project that is what you are paid. With agile it is encouraged to make changes to the requirements as time passes which has the potential of changing the overall scope. However if the project was quoted fixed fee the increased scope doesn't necessarily result in a expanded budget. Additionally how do you estimate that agile project and generate an up front number? If you have a set of previous agile projects you can likely base your estimate on that however what if you are just getting started in agile consulting?

I have had the opportunity to work on agile projects before, and have found that the clients are almost always happier with the result, the developers feel more consistantly focused and challenged and the quality of the code if improved. I have not, however, worked on an agile consulting project. So this being my first post and all an open question to anyone in the know? How do you sell agile?