This is about me and my quest for, er... greater things in life? Good food, good drinks, friends and family and my eternal quest to figure out what I want to do when I grow up. (hint: it's probably going to involve code)

Friday, September 26, 2008

Moving to Agile

A lot of people, including my colleagues, say that they are Agile without really knowing what it means. I won't pretend that I understand the concept fully, but I sure know enough to be certain that I am not a follower of Agile methodologies at the present.

As Kaizenconf approaches I need to reflect on where I stand currently and where I want to be in the short and long term, career wise and skill wise.

Already the benefits of a conference that asks its participants to either teach or learn and to come up with discussion subjects are showing themselves. With people from all over the world, everybody way smarter than I am, I cannot waste this opportunity to learn. LEARN! My thirst for knowledge it literary killing me! It hurts to know you don't know anything!

I am 31 and I don't know shit. I will not let this stand!

This is why I am so happy to be able to attend Kaizenconf.

Anyway, I decided recently that I would move my team to use Agile methodologies and in the process learn as much about it as I can about it and gain a deep understanding of the philosophy behind it in order to be able to adapt properly to different contexts and situations. 

So far, my first step has been to introduce source control to our team. It still blows my mind that it wasn't used in on an everyday basis. Everybody knew what it did, but they thought that since nobody would ever work on the same web page at the same time, we didn't need it. I started using Subversion for my own projects and started slowly to push it to my team mates. Then my boss decided to buy Microsoft Team Foundation Server and told us to use that. 

Okay, not the exact victory I wanted, but still a victory, right? I got them to use some form of source control. The winds of change have started blowing and once I got any kind of momentum, other changes I'd like to make will be easier to implement.

But there's a lot of resistance to change. My colleagues have been stuck in a Classic ASP world for too long, developing individually, our projects being small and simple with no architectural design whatsoever. Over the years, new features were patched on top of old ones and employee IDs were hard coded in the source code, all in the name of speedy development to make our customers happy, the said customers being users in other departements.

As time went by, code duplication started running rampant and bad coding practices became bad habits.

I came in a year ago and finally, just a few months ago, sneaked in an ASP.Net application in the mix, slightly opening the door to the wonderful world of automation, unit tests, deployment and all other things that most of you are probably accustomed to.

The next step in my strategy is to use Asp.Net more and more. Already, somebody on my team is going to a five day training on .Net 3.5, so things are going according to plan so far!

Eventually, I want to automate our building and deployment process, incorporate unit tests and get started on Domain Driven Design and Domain Specific Languages and anything else that would benefit my company that I can learn from this day onwards.

The immediate next step, however, will be to sell to my team the virtues of Sandboxing. Even though we are implementing some form of source control, my boss still wants us to all work from a shared folder on the development server because he's afraid that code that resides on our machines might be destroyed if a hard disks fails, for example. Sigh... I can tell the hill will be steep to climb. 

-----

So where am I and where do I want to be? I want to be good at what I do and I to do that I cannot accept the status quo. I will lead my team and adopt agile methodologies and in the process learn as much as I can.

Who knows, maybe one day I'll lead other teams to do similar things in the manufacturing world.

Sunday, September 14, 2008

Mentor

I need a mentor!
This is the key to my success in computer programming: mentors!

The same way cooks go from restaurant to restaurant in order to work for the best chefs, I want to work for successful developers or software architect. Unfortunately, I can't at the moment. Well... no, that's not exactly true. I'd prefer saying that I choose not to because I kinda enjoy the advantages that my work gives me, even though advancing my carreer will be harder.

Is there such a thing as an online mentor? Some type of programming coach that could meet with me online to review what I'm doing and help me get better at my craft? Hopefully I'll soon get to meet somebody like that.

Friday, September 5, 2008

Kaizenconf

I've been fortunate enough to be invited to Kaizenconf, some kind of Alt.Net spin off with a focus on continuous improvement. Participants to the conference are asked on the web site to reflect on the following questions:

-How do we improve?
-How do we recognize new improvements?
-What improvements in the past led us to where we are now?
-How do we decide which improvements to make?
-What values drive our decisions for improvement?
-What improvements can we be making right now?
-What obstructions impede improvement?
-What improvements are on the horizon?
-How can we adapt easier to the changes that improvements bring?
-What are the practices and processes that enable improvement?

"Improvement" is in every question. Improve, improve, improve and more importantly, improve! But a harder concept is hidden behind those: how do you measure improvement in order to adapt and figure out that what you are doing is right or wrong?

How do we impove? We figure out how to measure our successes, then find ways to improve on those measurements on each and every project.

In my case, as an IT developer in a manufacturing plant, I could measure success by how well one of my applications is receive by my "customers" in other departements. Is it easy to use? How was the learning curve? How fast did they start depending on it? Does it mesh well with other applications in the enterprise? How much effort did I need to put on maintenance? What about late bugs? And the list goes on and on...

In the end, I need to figure out what will minimize efforts while maximizing speed, easy of use and whatever else makes a great software application. I call improvement whatever lowers my efforts and makes all the rest better.

I'll have to answer all those questions as honestly as I can before I head out to the conference.  If I can't, I'll at least know what to look for once I'm there.

TFS - Team Frustration Server

I've been assigned the nice task of reinstalling our Team Foundation Server (TFS) to another drive. Well, after 6 hours of not getting anywhere with it, I'm going to ask my boss to just wipe out the server and install a fresh copy of Windows on it. I gave up at the point where I can't even restart the SQL Server service.

But seriously, I was pushing out IT team to use source control and I'm glad I got some result out of this. But I was pushing for Subversion and my boss, this Microsoft-Has-The-Best-Tools type of person, turned around and purchased TFS.

What can we use instead of TFS that is 1) Free, 2) easy to install?

-Subversion and TortoiseSVN for source control
-MSBuild, or NAnt for automated builds
-NUnit for unit testing
-A simple Wiki engine for sharing documentation
-Bugzilla for tracking bugs and work items
-CruiseControl.Net for continuous integration

And they can all work together, just like TFS, with less hassle than installing this mamoth piece of crap! Crap, crap, crap, crap, crap!

(deep breath)

Ok, now I need to reinstall Windows... sigh...
Oh yeah, we had TFS installed and working properly, but we were running out of space on the C drive. I did something wrong, somewhere... I read that you need to uninstall things in the right order!

Continuous Improvement in Software

I'm thinking about attending the Continuous Improvement in Software Conference in Austin this October. I'm in great need of refreshing my views/philosophies on .Net since it is the plateform I'm working on for my day job. I've whined too much about being stuck in the southern Texas farmlands, almost outside of civilization. Being a programmer in a 20,000 people small town is not conductive to Continuous Improvement, which is why I started this blog to begin with.

Hopefully this will give me some leads as to how to improve on my own and become a leader in my field without having mentors or a community to help me grow!