Posted on March 22, 2008 16:25 by mcollins

Tim Heuer, of Microsoft fame, commented on an earlier post of mine this morning and made me think of a lot of things that he probably didn't mean to get me thinking about, but I did regardless.  So here are the results of my thinking.

So when is it ok to build another wheel?  What I mean by that question is when should one rebuild something, versus using something that someone else has already written?  Or to take this another step further, should you spend time building something that someone else has built just for the heck of it, when the original work would have suited your needs?

Usually, I try to take the path of reusing other's work, because ultimately if I am able to do so, it helps me to get closer to my goal.  My main goal usually both on my personal hobby projects and my professional work projects it to build applications that serve a purpose.  My applications are usually built on technology.  The question that I always run into is should I spend a significant amount of time building technology, or should I focus on those things that will help me to actually deliver my application?  The answer that I usually try to strive for is that I want to focus on actually building the application's features, because it's the features that matter to me.  I want to spend as little time as possible focusing on technology, because it delays my ability to complete and utilize a feature, and my main goal is to deliver applications, not invent technology.

So, when it comes down to implementing a feature, if there's something out there that is usable and will help me to achieve my goal, should I use it or reinvent the wheel?  The answer is that I should probably try to use the existing technology so that I can focus on the application.

For example, I came across the SlideShare website back in January and I instantly fell in love with it.  SlideShare is one of the coolest websites on the Internet in my opinion and provides an absolutely fantastic solution to the web community for sharing information.  SlideShare lets you upload your PowerPoint presentations.  Once uploaded, SlideShare will convert your PowerPoint presentations into a Flash application, and you can view your presentation online or embed it in a web page or blog.  Here's an example:

 

This is a fantastic service that SlideShare provides.  However, as a Microsoft developer and aspiring Silverlight developer, it would be super cool if I could put this same functionality into Silverlight and do something such as combine the presentation with additional text, video, audio, etc., all managed through Silverlight, JavaScript, and HTML.

Realistically (because I have researched it), this is something that is possible if I use PowerPoint 2007 and the Open XML APIs to get to the PresentationML and DrawingML markup that make up the slides.  I could spend a lot of time building a Silverlight player and doing all of the hard work to make this presentation control reusable.  Maybe I will do this one day, but right now my primary need is that I want to embed a PowerPoint presentation into a web page, and while SlideShare may only provide me with a feature limited Flash presentation, it's still good enough for what I need at the moment, so maybe I shouldn't worry about reinventing this wheel right now when my main goal is to produce content that I can share with others on the web.

That being said, is it still ok to reinvent the wheel at times, and when is it ok?  Of course it's ok to reinvent the wheel whenever you want.  The main reason why I do it at times is to learn.  I'm a technologist as much as I'm a developer.  I like to learn how things work.  I may create my own ribbon control for my applications to make my applications look like Microsoft Office 2007.  I'm not doing it because I think that I can do it better.  I'm doing it because I want to learn how they do it and understand.  I may not build a ribbon or use it in production code, but the techniques that I gain from tinkering with the technology may help me to apply the technology in whole or in part to other solutions.

Right now on this blog, we're using BlogEngine.NET.  Because I'm documenting how to use the Blogger and MetaWeblog APIs in my earlier posts, does that mean that I'm looking to replace BlogEngine.NET on this website?  No.  I may someday write my own blogging engine, but most importantly by understanding how a tool such as Windows Live Writer or Microsoft Office Word can publish content to a blog, I may find another use for these tools such as being able to publish up to a custom website that I build.  I'd much rather be able to tell my end-users that they can create their content in Microsoft Office Word, which they're usually comfortable working with.  This serves two purposes.  First, my clients can work in a comfortable place such as Word that they know and have skills with.  Second, if my end-users can use Word for content publishing, then I don't have to spend a lot of time building a web-based editing interface (at least right away).  Instead, I can focus my time working on implementing the value generating part of the project, which is the website front-end that content consumers and my client's customers will be using.

In summary, I don't think that it's always right or proper to reinvent the wheel when acceptable options present themselves.  But I'm always a fan of tinkering when it comes to learning and understanding how technology works and learning new ways to apply the technology to your job.  After all, I'm not a fan of not sharing techniques of software development.  There shouldn't be any smoke and mirrors or "magic" behind software development.  The only magic should be that we, as software developers, get to enjoy producing great software that others get to use.



Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Related posts

Comments

March 22. 2008 21:35

it's great to write things to learn, i'm a huge fan of doing that. i'm not a huge fan of when you need something and you write it because you can...i've decided over the years that i've lost countless hours when i could have just bought a control, used an open source project, etc. but i love your notes here on writing to learn -- definitely something worthwhile.

on the slide.share front -- i've been thinking the same thing (a little simpler than yours) -- i have a working prototype that does a few things -- a little of my own and then integrating with Slide.Show. Upload a PPT, extract the slides into images, then generate a slide.show input for them. helps me learn, as well as implements something that i didn't need to

keep it coming mike! -- can't wait to see some of the samples you alluded to.
|

timheuer

Add comment


 

[b][/b] - [i][/i] - [u][/u]- [quote][/quote]



Live preview

November 20. 2008 20:20

|