Archive for the ‘Single Developer’ category

Death of the Single Developer?

June 16, 2009

I was reading the following article in InformationWeek and I was struck by the following quote:

 “The cliché of the solitary coder is dead.”

The article goes on to talk about a number of Corporate IT application development groups that have done some pretty phenomenal things for their companies. 

This is a subject near and dear to my heart as I am the IT department at my day job and I am the only developer for my business.  I can categorically say that in my day job, it is certainly not by my choice. 

Is It Possible to Deliver Great Results By Yourself?

I don’t know – I think it depends on the developer.  I can say that in my twenty plus years of IT, the amount of stufff you need to know has grown tremendously.  For the applications that I typically develop (your based Create Report Update Delete – CRUD applications – and yes some of them are just that), here’s a short list of what you need to know:

  1. Database/Table Design
  2. Object Oriented Design
  3. User Interface Design
  4. Requirements Gathering
  5. Application Development tool
  6. Testing
  7. Implementation/Installation Packaging

Notice I didn’t even get into the application development tool of choice or platform – Web vs. Windows.  This is a pretty steep learning curve for anyone.  A person can become a master in any single topic I listed and still not know everything.  I find it ironic that while a development tool like Visual Studio .NET can make you more productive because many of the things you might want to do are part of the .NET framework, it is so huge that it seems like an endless task to figure out how to do what you want.

Is It Desirable?

I don’t know;  I have mixed feelings about that.  As a developer, I love owning the application and being able to point at it and say “I built that.”  That’s on the good days when everything is running as it should.  On the days that there seem to be more new bugs than lines of code in the system, you want to hide in a cave, lest the users arrive with pitchforks and torches…

But the practical reasons that it is not a good idea are:

  • All the knowledge of the application is embedded in one person’s head.  I don’t care how well it’s documented, there’s stuff that someone will want to know quickly that is very difficult to extract from a source code listing.
  • There is no second eye for design choices.  It is that person’s design, warts and all.  While I don’t recommend design by committee, having other resources to assist in the design phase will certainly create a better product.
  • The pressure to get it done can override a developer’s natural (or unnatural) tendencies to follow good development practices.  Sara Chipp wrote an excellent description of this phenomena here

Is It Really The Death of the Single Developer?

In a word, no.  For one very simple reason: COST.  Many small and medium size companies (even if they are part of a bigger corporate parent) can’t justify having a team of programmers.  These companies always need someone to develop something that works exactly the way the business works.  As much as the big software vendors like to throw everyone in the same functionality pool for their applications, truth be told, each business is unique.  It has a unique structure, culture, and institutional history.  All that stuff becomes the DNA of their business processes.  And as a developer it’s your responsibility to turn that DNA into something – hopefully not a genetic mutant hell-bent on world domination…

Can a single developer do that?  The answer is…it depends.  If the company realizes all of the things that a developer can bring to the table and is willing to invest in that developer in terms of training and decent tools to do his/her work, it might just work.  The developer does have to be linked into the business and know what’s happening.  He/she has to be sensitive to the business climate, really understand what it is the business wants from the developer, and have his/her pulse on the work going on out on the floor.  Likewise, the business needs to listen to the developer when it comes to what’s needed to accomplish a project in terms of time, money, resources (not necessarily other developers – users too!), and respect the developer’s technical decisions and expertise.  If the developer says “If we don’t start to rewrite this critical business from Visual Basic 6 to a .Net platform now so that it will run when we migrate to Vista/Windows 7, we are going to be dead in the water”, you might want to listen to him/her, instead of (figuratively) patting him/her on the head and saying “That’s nice. When’s the next release?”.  If you find a company like that, please let me know…

However, in many small shops, the developer is also the Server Admin, Network Admin, PC Hardware and Software Support, and Printer Repair person.  Now take that list from above and then add everything you need to know to support THIS list of duties and I fear that the majority of people’s heads would explode at the amount of knowledge needed.  And end result?  I think it’s safe to say that the company gets exactly what they paid for – a jack of all trades, master of none.

Conclusion

 I still think it’s possible for a single developer to succeed.  While the single developer has many hurdles to clear that aren’t found in a development team, there are two things that the single developer and the development team both need to succeed – a clear commitment from the business to support the development team and excellent communication between the team/single developer and the business.  If I ever can find a company like that, I’ll let you know!

Advertisements

Crisis of Confidence and Motivation

March 25, 2009

“You fall for reality,
You’re bruised and defeated,
Then you learn to fall in love with yourself.
That’s motivation”

“That’s Motivation” – David Bowie, from the movie “Absolute Beginners”

It’s been one of those weeks where I feel I’m tottering between brilliance and stupidity.  This is one of the hardest parts of being a solitary developer.  One minute I’m feeling great because I’ve done something I didn’t think I could do, the next, I can’t figure out something that I should easily figure out.

Although I’ve been developing for 13 years now, I’m old enough that I missed out on object oriented development in college and I’m now trying to play catch up.  In my own development project, I’m working on a basic Windows application talking to a database.  It should be straight forward, but I seem to be complicating it for myself.  And I find myself constantly rethinking what I’m doing  – should I use the basic DataConnectors or should I look at making it object oriented?  Should I be doing Object Relational Modeling?  Should I use Access, SQL Server Compact, or Sqlite for the back end database?  All the while I feel like I’m spinning my wheels and redoing work I’ve already done.  Or spend a lot of time on something and scrap it and take a different approach.

This is one of those times when I desperately wish I had an other developer as a reality check and guidance.  So when faced what seems like an endless task, how do I get enough gumption to get going on my development work?

Here’s how I do it:

1) Blog about my troubles– If I get my troubles and feelings down in actual words, they stop rattling around in my head and distracting me like shiny little toys.  Also, feedback from the blog might also point me.

2) Step back and break what I need to do down into tiny tasks – My biggest problem with this step is having enough continual time to look at what I need to just build a to-do list that I can whittle down to nothing.

3) Let it simmer and come up with “brilliant ideas” in the shower and the drive to work – I sometimes comes up with my best ideas here.

4) Just keep swimming – Dori’s mantra from Finding Nemo is a good plan.  You got to keep moving because stopping can be death, especially in development.  Keep moving.  Keep trying something, anything.  Eventually you will figure out what works for you.

So I’m going to make some definitive choices (at least for now) and break this project down into bite sized chunks.  I think I’m overcomplicating things and I really should just evolve back to the KISS (Keep It Simple Stupid) method.

Wish me luck!

“I’ve nothing much to offer,
there’s nothing much to take,
I’m an absolute beginner,
but I’m absolutely sane.”

“Absolute Beginners” – David Bowie, from the movie “Absolute Beginners”

Army of One

March 9, 2009

If this is your first time here, I should say that I am the lone software developer in both my day job as well as in my company.  This is both a blessing and a curse.  It’s like what Uncle Ben said in Spiderman “With great power comes great responsibility”.

What’s Great About Being a Single Developer
Freedom
-You pretty much have the ability to do whatever you want.  If you don’t want to follow a methodology, you don’t have to!  You can build the system any way you want.

Ownership – You own the application.  You know its ins and outs, all the dark places with the twisted code that you took you forever to get right.  It has your stamp on it.  It’s your baby.

Pride – When it’s working and doing exactly what it’s supposed to do, you can sit back knowing that you were the one and only person responsible.  You can enjoy the kudos that your application receives and you think “Man, I’m a great developer”

What’s Horrible About Being a Singe Developer

No Guidance – When you start a project, it’s a little like being pushed out of plane (with a parachute…most of the time) over some wilderness.  When you land, you have to find you’re way back to civilization.  If you’re lucky, you know the terrain or at least have a compass.  Other times, you feel like you’re stuck in the wilderness, just struggling to survive until you can find a trail that will send you back to civilization.  And since you’re alone, there aren’t even kindly strangers you can ask on your way.

Responsibility –   You own the application.  But suddenly, instead of being the paragon of software development, it’s started acting like Frankenstein’s monster crossed with HAL.  And it’s ALL…YOUR…FAULT.  Remember that twisted code in the dark places of the program?   You get to fight that monster all by yourself.

Demoralizing– When you feel like the bug reports are coming in at a rate greater than you could even create them in the first place, you’re saying to yourself “How could I have missed that?”.  With each new bug report, error, or complaint that it doesn’t do what the user wants, you begin to think “Man, I am the worse software developer in the world!  Maybe I should take up a different line of work…”

So Is It Good, Bad, or Somewhere In Between…

My personal feeling it’s neutral to somewhat bad to be a single developer.  The biggest problem for me personally is not being able to bounce ideas off anyone else.  And when you’re treading new technical ground (at least for yourself), it can be frustrating and demoralizing.  When I went to college, object oriented programming was not widely used in industry.  Now, I find myself playing catch up.  I’ve been working on learning object oriented programming because I’m work in languages that require it.  But there are lot’s of things I don’t understand.  I need a mentor or at least someone I can go to for advice.  That’s one of the reasons for this blog; not only is it my chance to document my learning, but to make contacts and learn myself.

Another reason I think that being a single developer is tough is that you can get pegged as being someone who wants to work by himself/herself and can’t work in a group.  I’ve had two interviews where I was asked if I could work other people.  I didn’t get either job, so I have no idea if that was part of the reason or not.  But in my heart, I think it was a factor.  In both my current job and my business, I would LOVE to not be the only one.  But management at my job decided otherwise and I don’t have the money to pay anyone else. 

So Now What?

I plug along.  I follow the best advice I can get from the Web, from books, from magazines, just about any source I can find.  I look at new technologies (.NET with LINQ, Windows Presentation Foundation), new methodologies (Agile), and just good old rules of thumb and I try to adapt them to my own use.  I really think that someone should work to adapt some of the widely used methodologies like Waterfall (yes, I know it’s evil) or Agile and strip them down to what’s manageable to a single developer.  Because I’m sure that I’m not alone out there.  I’m sure there are many developers stuck by themselves, either at a regular job or their own business endeavor.  It can be lonely out there, but to me, in the end, the result is the reward.  Seeing that shiny application in use and hearing a heartfelt thank you from the user is the best result.