This editorial was originally published on May 18, 2009. It is being re-run as Steve is on vacation.
Software is a very interesting business. Where else can you produce a product that has zero marginal costs for additional units? Where else can you force a "maintenance" charge on your product? What other product must continue to be improved upon by the manufacturer after it's sold?
There actually are other industries for all of these cases, but they're not numerous, and they differ from software. The business of building and selling software is fascinating, and I'm always learning more about it. I constantly see great questions in the forums at the Business of Software social network site. I'll also plug the Business of Software 2009 Conference; if you're a software person, consider attending this event. I went last year and found it very stimulating and educational, forcing me to think a lot about how that industry works.
I happen to work for a software vendor now, Red Gate software, and I used to work for another, JD Edwards. I wasn't a part of the development or sales in either company, but I did get to talk to people that were, and learned a bit the business. And so when I saw this open letter to Oracle, it struck a bit of a chord.
I'm not sure how software maintenance evolved to where it is today, but I think requiring it on a regular basis is an antiquated way of doing business. Microsoft doesn't do it, though many third party vendors that work with Microsoft product do. However I'm not sure that it's really a value proposition for most customers.
At least not if the software is written well. It's a piece of junk, maybe that maintenance is required.
I think that maintenance should be an optional part of the product, and that should fund support efforts, not a rolling cash cow to build the next version of your product. Sales fund that, or I think they should.
Today's podcast features music by Everyday Jones. No relation, but I stumbled on to them and really like the music. Support this great duo at www.everydayjones.com.
I really appreciate and value feedback on the podcasts. Let us know what you like, don't like, or even send in ideas for the show. If you'd like to comment, post something here. The boss will be sure to read it.
Compare and synchronize database contents
“I've been really missing a neat data comparison tool - SQL Data Compare Pro seems to be the answer to my prayers.” Jan Hansen, Database Architect. Download a free trial.
Save 45% on our top SQL Server database administration tools.
Together they make up the SQL DBA Bundle, which supports your core tasks and helps your day run smoothly. Download a free trial now.
16 essential SQL Server tools
In one installer, the award-winning SQL Toolbelt contains everything you need to work with SQL Server. "The SQL Toolbelt provides tools that database developers as well as DBAs should not live without." William Van Orden. Download a free trial.
If you are planning on taking the Microsoft Certification Exam for 70-462, this guide provides the step-by-step instructions to completely setup your Hyper-V lab environment used in the official training kit. More »
Ace your preparation for Microsoft® Certification Exam 70-461 with this 2-in-1 Training Kit from Microsoft Press®. Work at your own pace through a series of lessons and practical exercises, and then assess your skills with practice tests on CD—featuring multiple, customizable testing options.
Maximize your performance on the exam by learning how to:
Create database objects
Work with data
Troubleshoot and optimize queries
You also get an exam discount voucher—making this book an exceptional value and a great career investment.
Yesterday's Question of the Day
(by Steve Jones):
From which DMV in SQL Server 2012 would I query to get a list of the server roles?
You get a list of the logins and roles from sys.server_principals DMV. There is a type_desc column (as well as a type) that will let you know which principals are roles.
If you need to check a row for changes you can use HASHBYTES to do so.
Here is how to create a HASH value for the entire row. You want to use SHA1 to make sure there are (virtually) no collisions.
For this case the hash column should be VARBINARY(20)
Make sure <primary key> is the key for that table. If there are multiple rows with that key, the hash will include them all.
The perfect use for this would be a nightly data load where you get the entire universe of data each night, maybe thousands of rows, but only a small percentage of the rows actually change. This allows you to identify the deltas and just process them instead of having to process everything.
You could also use this to identify all row changes for a given table by comparing a saved hash value to the current hash value. Just remember, the hash is static so if you need to update it you will have to create a process to do so.
This newsletter was sent to you because you signed up at SQLServerCentral.com.
Feel free to forward this to any colleagues that you think might be interested.
If you have received this email from a colleague, you can register to receive it here.