I am filled with solutions

Weekly essays on testability, testing and being a tester.

Please stop re-inventing the wheel.

Please stop re-inventing the wheel.

There are a lot of software wheels that get re-invented all the time. Re-inventing is a time consuming waste that many projects can cut. In almost all cases it’s much better to do some due diligence and use an off the shelf component where you can. Invest your time, passion and expertise in your actual product.

Save your energy for your real innovations

Engineers are smart. Sometimes we get cocky and think because we know how to build the best X on the web, we also know better about everything else too. Don’t fall into this trap. It’s very unlikely a genius web developer can really create a better database than off the shelf. There are too many good ideas begging to be programmed. Don’t waste time on something that’s outside your core innovation. The world needs customer focused applications that work well with people. Don’t waste your time creating the ten thousandth backend widget you could have gotten for free on the internet.

Existing protocols are good

Nothing makes me crazier than software that implements a broken version of a standard protocol. You can spend time designing a brand new protocol, but if you are doing something that is well known on the ‘net you should try hard to work with existing protocols. Existing protocols have some miles on them and are usually good compromises for everything they do. Designing and testing new protocols is just quicksand for most projects. If you can’t say that the new protocol is the heart of what’s cool about your product, then don’t make a new protocol.

Get your design patterns off the shelf

Most software project fall into some pretty well known patterns. Console applications, three tier web applications, client-server applications and peer to peer applications are very common patterns. If your product falls into any well known pattern, follow the best practices for your pattern. Innovate where you are really on the cutting edge and try to use cookies cutters wherever else you can.

 

Published Monday, August 25, 2008 11:15 PM by SaintD

Comments

 

dferg said:

Reuse is a good theory that tends to fall apart.

Sure, you can try to work with the tools that you have, but somehow you always end up wanting to do something that the tool doesn't support or just isn't obvious even after hours of searching.

Or you find a textbook that describes a classic algorithm.  However all the boundary cases are left out, so you have to take care of those to have software that works in the real world.

How primitive you need to go sometimes seems to be dependent upon whether you just want to make a good demo or you want to make the software that you write really work.

August 25, 2008 9:56 PM
 

SaintD said:

@dferg

You do have a point. However a lot of those low level problems are also pretty well solved in most programming environments. If you use C#, Java or C++ you have access to a wealth of libraries that do a lot of things. Not only that, but they have an extensibility mechanism for getting things to work just right for you. Why create another collection class when you could just use a generic list? If you don't have a really compelling answer to that question that starts "Our whole products mission hinges on ..." then stick with the stuff that already works.

C# for example has generic lists. Those lists have a lot of features. Including sorting and searching (Contains methods use some sort of search). So if you need to know if a list Contains something, just use the method. Most of the time you don't care how it works. It would be silly to create a binary search or some other algorithm from scratch. However, I still see programmers say "well, the built in search is sorta slow with my data, so I implement my own search". I am saying, aviod this unless a speedy lookup at this particular juncture is critical to your mission.

Most programmers give up tinkering at the lowest level pretty quickly. However organizations don't give up re-inventing things that are tried and true. Want to make the best whatever on the web? You could probably do it well using a standard three tier architecture. It's well known, been around the block and very flexible. However, I see application after application try take out the middle layer. They don't do it because they need to, they do it because they want to build something "new" from the ground up. 90% of those projects end up needing the middle layer injected later at great expense.

I could go on and on. The point is, that for most commercial projects, you are better off spending some time investigating "what's out there" than just jumping into coding from day one. Figure out whats compelling about your value proposition and pour your talent into that. You don't want to drain your time and talent creating yet another list box or yet another drop down or whatever.

September 15, 2008 2:43 PM
Anonymous comments are disabled

About SaintD

Dustin Andrews has been testing software at Microsoft since 2001. He currently programs primary in C# and has loved it ever since he learned it had a good regex class. He came from the industry where he has been an ISP unix admin, Perl and SQL developer, dev lead, help desk technician and manager. He has also waited tables, worked many long nights as a convenience store clerk disinfected shoes in a bowling alley and done other jobs he has blocked out of his memory. He is currently in the Unlimited Potential Group as a Server Test Lead.

© 2009 Microsoft Corporation. All rights reserved. Terms of Use  |  Trademarks  |  Privacy Statement
Microsoft
Page view tracker