Database Unit Testing from the Beginning

Tuesday, 15 November 2011 08:11 by Donald

The concept of unit testing for a database and really this means a database project still seems like a wild idea.  Of course I am still surprise how many development shops still use their production database as their source of truth which it shouldn’t be but that’s because they do not have their database in source control.  In order to take you down the road to explore some of the benefits that are going to be available to you with being able to run unit tests on your database I need to get us all caught up with how to create a database project as this is where the magic happens.

Creating a Database Project 

You need to have Visual Studio 2010 Premium or higher to create a database project.  One of the options that are available to us is to reverse engineer an existing database and that is what we are going to do in these first steps.  I have installed the sample database called AdventureWorks.  This is available as a free download from the Codeplex site.

http://msftdbprodsamples.codeplex.com/releases/view/55926

 image

From Visual Studio you will want to create a new Project and select the SQL Server 2008 Wizard which can be found under the SQL Server node found under the Database category.  Give it a name, I called my AdventureWorks and give it a location on your hard drive where you want the project to be located.

A wizard will popup and take you through a number of pages, just accept the defaults until you get to the Import Database Schema page as this is something we do want to do is to import the AdventureWorks database.

image

Make sure you check the Import existing schema and then you will likely want to click on the New Connection button unless you have made a previous connection to the database, that connection string won’t be found in the dropdown.

image

If you have connected to databases in the past this dialog box should be very familiar to you.  Basically we need to say where the SQL server is.  In this case it is on my local machine and is the default instance.  Other common server names are also localhost\SQLExpress as that is the name instance that SQL Express creates when it is installed.  After you get the server instance completed the dropdown of database names will be populated and from there you should be able to find the AdventureWorks database.  I also like to click on the Test Connection button just to confirm that there aren’t any connectivity issues.  Click OK and we are ready to move on.

Click Next and continue through the wizard pages and accepting the defaults.  On the last page click Finish.  This is where this Visual Studio wizard really does it’s work as it creates the project and does a complete reverse engineering of the database.  The end result is a Visual Studio SQL Database project that represents the database in code which is suitable for checking into Source Control, capable of deploying changes that might be made to this project, being able to compare changes between versions and much much more.

Lets get to Unit Testing

When you are on a database project as in I have physically clicked on it so that it has focus you will see that a number of toolbar buttons appear.  We want to click on the one called Schema View.

image

This brings up another little window in the same area as the Solution and Team Explorer area of Visual Studio called the Schema View.

image

From this view you will want to expand Schemas, then expand the HumanResources, expand Programmability, Stored Procedures and finally you want to right click onto the uspUpdateEmployeePersonalInfo and choose Create Unit Tests…

If you don’t already have a Test Project the next step will let you create a skeleton Unit test for this stored procedure and the option to create a new Test project in the language of your choice.

image

You will find that when this window opens you can choose more than just the one stored procedure that we choose in the previous step but yours is the only one that is checked.  If you did want to have more than one stored procedure in the same class file you could pick them as well.  Then set the Project name or select and existing Test Project and give it a decent class name.  I named mine HumanRecourceUnitTests.cs.  After you click OK it will build all the pieces the test project and default unittest.cs file that we don’t need and everything just starts to look like a typical Unit Test until the following dialog pops up.

image

Now in order to run unit tests against the database you need a connection to the database.  In the first part of this you should be able to find your original stored procedure that you used to create the database project.  You will notice that this dialog has an optional additional what it calls a secondary data connection to validate unit tests.  In this sample we will not need this but in a real world application you may so let me explain that scenario.  When an application that is built with a database connection, typically that application and the connection string would just have enough rights to run the stored procedures and nothing else.  In those cases you will want to test those connection string when running the stored procedure that you are testing but that same connection string would not have the rights to check the database to see if those rights are valid especially in a scenario where you want to check if the right values got inserted or deleted, that is where this secondary data connection comes in, it would be a data  connection that had higher rights to look at those values directly from the tables.

After you have clicked the OK button Visual Studio will display a skeleton of a unit test to test this stored procedure.

image 

In theory we have a unit test that we could run, but the results would indicate that the results are inconclusive because although this stored procedure is being run, it is really just exercising the stored procedure and not really testing it as in giving it some values to insert and checking if those values come back.

We are going to replace the unit test calls here with the following code snippet.  I have it all in one piece here for you to easily grab this but following this I will break down this code so you can see what is going on.  It is very similar to what the skeleton provided with us but we give it some distinct values.

-- Prepare the test data (expected results)
DECLARE @EmployeeId int

SELECT TOP 1 @EmployeeId = EmployeeId
FROM HumanResources.Employee

-- Wrap it into a transaction to return us into a clean state after the test
BEGIN TRANSACTION

-- Call the target code
EXEC HumanResources.uspUpdateEmployeePersonalInfo
    @EmployeeId, '987654321', '3/2/1987', 'S', 'F'

-- Select the results to verify
SELECT NationalIdNumber, Birthdate, MaritalStatus, Gender
FROM HumanResources.Employee
WHERE EmployeeId = @EmployeeId

ROLLBACK TRANSACTION

The first part of this code is to capture the EmployeeId that we want to update so that is what the first DECLARE statement does.  In the next call we just want to capture an existing EmployeeId from the Employee table and because we really don’t care which on it runs us but we only want want we use the TOP 1 clause in that statement.  At this point our declared variable @EmployeeId now has this value.

Note: I have found that there could be a breaking change here that depends on which version of the adventure works database that you have as some will have the employeeId and others will have this column named BusinessEntityID.  To find which one you have go back to the Schema View of the project and expand the Schemas, HumanResources and Tables.  Find the Employee table and expand the Columns, the column in question will be that first one right there.

image

Because the stored procedure will make changes to the data in the table and we may not want to actually commit those changes we just want to test these changes we surround the next pieces around a transaction and after we have collected our validation values we can roll this back.

After the transaction we call the update stored procedure and pass in some specific data.  Next we call a select statement to get those values from the table with the EmployeeId that we just passed into the previous steps.  Finally we roll the whole transaction back so that we do not actually make any changes to the database so we can run this test over and over.

Before we can actually run this test we need to make some changes to the Test Conditions portion of the unit test.  First you will want to remove the existing entry that is shown there by clicking on the Delete Test button.

image

After you have removing the existing Test Condition we can then add a new one or more to verify the results.  Select Scalar Value from the dropdown control and click on the “+” button.

image

On the scalarValueCondition1 line that this action creates, right click on this line and choose Properties, which will display the properties window.  Update the following information:

  • Name: VerifyNationalId
  • Column number: 1
  • Enabled: True
  • Expected value: 987654321
  • Null expected: False
  • ResultSet: 1
  • Row number: 1

image

What is really happening here is that we are going to look at that first column and see if it matches the NationalId that we sent to the stored procedure.  NationalId is the first column that is returned in the select statement.

We are now ready to run the unit test and see that it is working and pass the test.  Typically in a unit test you could be anywhere in the method of the unit test do a right click and you will see one of the context choices being to run test.  However what we have been working on so far has been the design surface of the database unit tests which is why we were able to write SQL statement to write our tests.  To see or get to the actual code page you need to go back to the HumanResourceUnitTests.cs file and right click on it and choose view code.

image

As an alternative you could select the file in the solution and press the F7 key, either way you will then be looking at the actual test and if you right click anywhere within that method you will see that one of your choice is to Run Tests.  Do that now and you will see the test results go from a Pending to hopefully a Pass.  If you do get a failure with an exception you will want to check the column names from this table.  Some of the names changed and even the way they are spelled.  It appears to be case sensitive as well.  Like I mentioned before, there seem to be more than one version of this sample database out there and they did make some changes.

image

Now that we do have a working test, I always like to make a change to prove that it is working by making it fail.  So to make it fail, change the Expected value to 9876543210000.  I basically just added 4 zeros to the end of the expected result.  Re-run the test and it should fail and if we look at the Test Result Details we can see that the expected results did not match, which is exactly what we expected.

Take out the padded zeros and run the test once more so that we get a passed test once more.  This is just a step to keep or tests correct.

Associate this Unit Test to a Test Case

The following section is going to need TFS 2010 in order complete this part of the walk through, and even better if you have Lab Management setup to complete the development, build, deploy, test cycle on these database unit tests.

Right now, the unit test that we created can be run from Visual Studio just like we have done in this walk through.  You can also make these part of an automated build which if this test project was included in the solution for an automated build in Team Foundation Server (TFS) it would automatically run and be part of the build report.  However, this would not update the Test Plan / Test Suite / Test Case that the QA people are using to manage their tests, but it can.

In Visual Studio, Create a new Work Item of type: Test Case, and call it “uspUpdateEmployeePersonalInfo Stored Procedure Test”.  We won’t fill anything in the steps section as we are going to go straight to automation with this Test Case.  Click on the Associated Automation tab and click on the ellipse “…” button

image

This will bring up the Choose Test dialog box and because we have just this one test open in Visual Studio we will see the exact test that we want associated with this test case.  Click on the OK button.

We now have a test case that can be used to test the stored procedure in automation.  When this test case is run in automation it will update the test results and will be reported to the Test Plan and Suite that this test case is a part of.

Currently rated 1.6 by 248 people

  • Currently 1.552419/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Categories:  
Actions:   E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed

Database Schema Compare where Visual Studio goes that extra mile

Thursday, 27 January 2011 13:58 by Donald

There are a number of good database tools out there for doing database schema comparisons.  I have used different ones over the years at first initially to help me write SQL differencing scripts that I could use when deploying database changes.  If your background is anything like mine where you were namely a Visual Basic or a C# developer and could get by with working on SQL if you could write directly to the database.  There were challenges with being able to script everything out using just SQL.  Today that is not nearly an issue for me and I can do quite a bit with scripting and could build those scripts by hand, but why?

WHAT… Visual Studio for database development?

Over the years I have tried to promote SQL development to be done in Visual Studio.  I made a great case, SQL is code just as much as my VB, C#, F# or what ever your favorite language of choice happens to be and should be protected in source control.  Makes sense but it is a really hard sell.  Productivity goes down hill, errors begin to happen because this is not how the SQL teams are used to working on databases.  It was an easier sell for me because I loved working in Visual Studio and found the SQL tools not to be as intuitive to me.  I have never been able to figure out how I could walk through a stored procedure in Query Analyzer or Management Studio but have always been able to do this with stored procedures that I wrote from within Visual Studio and that was long before the data editions of Visual Studio.

Ever since the release of the Data Dude or its official name back then, Visual Studio Team Edition for Database Professionals, this was what I did and I tried to convince others that this is what we should be doing.  It was never an easy sell, yea the schema comparison was nice but our SQL professionals already had all kinds of comparison tools for SQL and it would be too hard for them to work this way.  They wanted to be able to make changes in a database and see the results of those changes, not have to deploy it somewhere first.

So as a quick summary of what we figured out so far.  Schema comparison from one database to another, nothing new, your SQL department probably has a number of these and use them to generate their change scripts.  How is Visual Studio schema comparison better than what I already have how is it going to go the extra mile?  That my friend starts with the database project which does a reverse engineering of sorts of what you have in the database and scripts the whole thing out into source files that you can check into source control and compare the changes just like you do with any other source code.

Now once you have a database project you are able to not just do a schema comparison with two databases but you can also compare from a database and this project.  The extra mile is that I can even go so far as to deploy the differences to your test and production databases.  It gets even better but before I tell you the best part lets go through the actual steps that you would take to create this initial database project.

Create the Database Project

I am going to walk you through the very simple steps that it takes to build a database project for the AdventureWorks database.  For this you will need Visual Studio 2010 Premium edition or higher.

We start by creating a new project and select “SQL Server 2008 Database Project” template from under the Database - SQL Server project types.  Give it a name and set the location.  I called mine AdventureWorks because I am going to work with the sample AdventureWorks database.  Click OK..

image

Visual Studio will build a default database project for you, but it is not connected to anything so there is no actual database scripted out here.  We are going to do that now.  Right click on the database project and a context sensitive menu will popup with Import Database Objects and Settings… click on that now.

image

This opens the Import Database Wizard dialog box.  If you have already connected to this database from Visual Studio then you will find an entry in the dropdown control Source database connection.  If not then you will create a new connection by clicking on the New Connection… button. 

image

So if you have a ready made connection in the dropdown, choose it and skip the next screen and step as I am going to build my new connection.

image

Because my adventure works database in on my local machine I went with that but this database could be a database that is anywhere on your network, this will all just work provided you do have the necessary permissions to connect to it in this way.  Clicking on OK takes us back to the previous screen with the Source database connection filled in.

Everyone, click Start which will bring up the following screen and start to import and script out the database.  When it is all done click the Finish button.  Congratulations you have built a Database Project.

image

You can expand the solution under Schema Objects, Schemas, and I am showing the dbo schema and it has 3 table scripts.  All the objects of this database are scripted out here.  You can look at these files right here is Visual Studio.

image

However you might want to use the Schema View tool for looking at the objects which gives you a more Management Studio type of view.

image

Just click on the icon in the Solution Explorer that has the popup caption that says Database Schema Viewer.

image

Updating the Visual Studio Project from the database

In the past these were the steps that I would show and demonstrate on how to get a database project scripted out and now that it is code is really easy to get into version control because of the really tight integration from Visual Studio.  My thoughts after that is this is the tool that you should be working in to evolve the database.  Work in Visual Studio and deploy the changes to the database.

Light Bulb Moment

Just recently I discovered how the SQL developer does not really need to leave their favorite tool for working on the database, Management Studio.  That’s right, the new workflow is to continue to make your changes in your local or isolated databases so that you can see first hand how the database changes are going to work.  When you are ready to get those changes into version control you use Visual Studio and the Database Schema comparison.

image

So here we see what I always thought was the normal workflow, with the Project on the left and the database that we are going to deploy to on the right.  If instead we are working on the database and we want to push those change to the Project, then switch the source and target around.

image

Now when you click the OK button you will get a schema comparison just like you always did but when deployed it will check out the project and update the source files.  This will then give you complete history and the files will move through the system from branch to branch with a perfect snapshot of what the database looked like for a specific build.

image

  1. 1.  Click this button to get the party started.
  2. 2.  This comment will disappear in the project source file.
  3. 3.  The source will be checked out during the update.

The Recap of what we have just seen.

This totally changes my opinion on how to go forward with this great tool.  The fact that we can update the project source from the database was probably always there but if I missed the fact that this was possible then I am sure many others might have missed it as well.  It makes SQL development smooth and safe (all schema scripts under version control) and the ready for the next step to smooth and automated deployment.

Currently rated 1.6 by 73 people

  • Currently 1.630136/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Categories:   Technical
Actions:   E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed

The Two Opposite IT Agenda's

Monday, 17 August 2009 13:48 by Donald

The Problem

I have been in the Information Technology (IT) field for a long time and most of that time has been spent in the development space.  Each environment different from the previous one and in some cases there were huge gaps in the level of technology that was used and made available in each location.  This has stumped me for a long time why this was.  You go to a user group meeting and when ever the speaker was speaking about a technology that was current and he would conduct a quick survey around the room how many were using this technology, the results would be very mixed.  There would even be lots of users at these meetings where they were still using technologies that were over 10 years old and no sign of moving forward.

Why is this happening?

Good question, and after thinking about this for a long, long time I think I have the answer.  It really depends on which aspect of the IT spectrum is controlling the development side.  I think it has become quite acceptable to break up the whole IT space into two major groups, the IT Professionals, and the Software Developers.  When I first moved to California I worked for a company that was a software developer and they did software development for their clients on a time and materials basis.  There was no question as to which wing of IT influenced the company with regards to technology and hardware.  The developers in this case were golden, if you needed special tools, you got them.  Need a faster computer, more monitors, special machines to run beta versions of the latest OS and development tools, you got it.  You were on the bleeding edge and the IT Professionals were there to help you slow down the bleeding when that go out of control.  However, this company was always current got the best jobs and in a lot of cases when we deployed our final product to their production systems that would be the point at which their IT department would then be forced to update their systems and move to the new round of technology.

Welcome to the Other Side

What happens when the influence is on the other foot, the IT Professionals.  They have a different agenda as their number one goal is stability, security, and easy deployment.  However this does come with a cost, especially when the company is heavly relying on technology to push its products.  I have heard this from many different companies all with in this same situation, that they are not a technology company, the technology is just the tool or one of the tools to deliver their products.  When this group controls the budget and the overall technical agenda things like this will happen.  Moving forward will be very, very slow and the focus will be purely on deployment issues and keeping those costs under control and not on the cost of development which could get very expensive as the technology changes and you are not able to take advantage of those opportunities.  Over time, the customers that receive your products will start to evaluate your future as not being able to move fast enough for them because they are going to expect you to be out there and fully tested these waters before they move there and if your not it is not going to look favorable in their eyes.  This is especially true if you have some competion in your space that are adapting the new technologies faster then your company is.

There is another side to this that I have witnessed which bothers me even more.  The decision to move all enterprise applications to the web was never from the development side of IT but came from the IT Professionals.  Remember one of their big agendas is the easy, easy deployment and as a result they have made software development so expensive that we have been forced to move as much as we can to off shore development companies.  In most cases this hasn't even come close to a cost savings for the applications as you never seem to get what you thought your were designing and it is not always the fault of the off shore companies, they are giving your exactly what you asked for.  In more cases it is the wrong technology for the solution.  Most high volumn enterprise applications were desktop applications with a lot of state (data that you are working with).  The web is stateless and over the years many things have been developed to make the web appear stateful but is it not.  I have seen projects spend 100 times more time and money into implementing a features on a web to make it appear and feel like a desktop application.  Now to be clear this argument started when deployment of desktop applications was hard as in the early days there was no easy way to keep all the desktops up to date except to physically go around and update them as patches and newer versions became available.  However, in the last 5 years or more that has totally changed with things like click-once technology you can implement full automatic updates and license enforcement just as easily as web sites and maybe even better.  We all know there are new tricks every day to spoof a web site into some new security trick.

Whats the Answer

I don't really have the answer but I do have a few thoughts that I have been thinking about and I would love to hear about some other ideas that you might have.  My thought is that you should separate the IT push down two paths and this advice is for the companies that are currently being held back by the stablizing IT Professionals.  I would even go so far as to keep the developers on a separate network then the rest of the employees this will keep the bleeding on the other side of the fence and not affect your sales and support staff which are there to sell and support products that are stable and need to keep them that way.  This will allow the develpment to improve and expand their technical expertise and provide better and more relevant solutions for your customers, internal and external.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Categories:   Technical
Actions:   E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed

Goal Tracking

Monday, 9 February 2009 13:35 by Donald

Since about the beginning of the year I have been thinking about goal tracking.  I compiled a long list of technologies that I wanted to learn, experiment with and maybe even build some projects using some of these newly learned skills.  Nothing quite like turning something new into something useful.  I find that this technique provides me with the best understanding of how and why a technology would be used in one scenario over another.  My goals for this year is a long list and some have a dependency of a previous goal being completed before I even begin, like reading the book before I begin my project based on the technology.

However, I suffer from the getting bored and just needing a break from a certain goal and then forget to get back to it at the appropriate time illness.  It's like I need something to help me track what my goals are and an easy to see a KPI like indicator to show me which goals I need to pay attention to right now or I might miss my target date altogether.  Before I go much farther I should define KPI: 

KPI's are Key Performance Indicators which help organizations achieve organizational goals through the definition and measurement of progress. The key indicators are agreed upon by an organization and are indicators which can be measured that will reflect success factors. The KPIs selected must reflect the organization's goals, they must be key to its success, and they must be measurable. Key performance indicators usually are long-term considerations for an organization.

This is what I need for my goals, some way to track my progress.  I went to work on it, storing the goals was easy.  Give it a name, what your target date is for completing the goal and some exit criteria.  Okay, so I had to think a little bit about that last one, but I needed something that would tell me when the goal was completed.  So, I started with an easy one, reading a book.  I know when I have completed that goal when my current page is equal to the total number of pages in the book.  Sorry, I just jumped into some logic thinking that a computer program could use to determine if it was completed.  So in the case of tracking the progress for my book reading goals I could keep track of what page I was on each day and how long I spent reading.  The last one is going to help in figuring out how fast I am reading this book and checking this against how much time I have set aside to work on my goals.

Okay, then from that information I could recalculate my goal target date by calculating the rate at which I am going what I should actually reach my goal.  If the new target date is earlier then I had planned then the KPI should show me a green light.  If it is later then this, it should show me a yellow (warning) light if I am just slipping but I still have time in my allocated time frame to meet this goal.  Of course the KPI would be a red light if there was no way that I could meet this goal.  This one is harder to determine as it is an indicator which would come up when I certainly have gone past the target date, how I can determine if I have run out of time before this date is hard to calculate especially if I have alot of goals.  There are things that I cannot really know like sacrificing one goal so that I can put all my effort toward the other goal.  If you are behind I will show the warning light, if we missed the goal I will show the red light...but at least I have something that I can track for my goals.

There were a couple of other types of goals that I thought of tracking.  My projects that I build are not based on any page number but I thought I would set a goal in the amount of time I would spend on the goal by a certain target date and track it that way.  This also should work quite well and can easily see when I am on and off track but the red can again only be shown if I have already missed the mark.  Then just to throw something different into the goal tracking mix, I thought about setting up some goals for my weight.  This one is really different in that there is no time element here at all.  In stead we are tracking the weight on a regular basis and let the goal tracker estimate and the rate that I am loosing or gaining weight when I should be able to reach my ideal weight.  I think that the KPI's are going to start showing me problem indicators when I am moving in the opposite direction that I was planning.  If this is going to work or not I am not sure, for instance for the past week I have had no change in any direction and the goal tracker is still saying I will reach my ideal weight within the date I have targeted....time will tell.

Anyway, as you can probably tell by now I have actually started to put together a goal tracking program.  It is still rough and most certainly is a beta product.  If you would like to give it a try and send me some feedback you will find it at http://www.goaltracker.me or if that doesn't work (some IP's might be blocking the me root) you can try http://www.goaltracker2.com/goaltracker.install

Good luck with your goals, I am finding that I am a lot more focused on my goals and staying on track then when I wasn't tracking my goals, so I think it is working.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags:   ,
Categories:   Technical
Actions:   E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed

Who's the Boss

Saturday, 21 June 2008 19:01 by Donald

 

For most of our lives we have a constant struggle to try to be the boss of ourselves. Does it ever happen?  When you grew up as a child I am sure you have memories similar to mine where at some point in your life you were struggling to gain control of your own life.  Could not wait to move out of the house and get out on your own, so that you could be the boss of you.  How’s that going for you?  Are you the boss of you yet?

It is not long after you move out that you find you have a whole bunch of new people that have stepped in to take over the boss position.  You have to pay rent so you have to answer to your landlord as he becomes a certain boss and when you can't pay the rent, he fires you by way of eviction.  Then in order to make some money to pay the rent you have to find a job and that usually leads to a boss and might even have a complete entourage of bosses.  You know what I mean, there is your manager, the assistant manager, then there is the shift manager and none of them are shy at giving you orders and commands.  Come to think of it, maybe living at home wasn't so bad after all.

Self Employed
Then one day you wake up with this fantastic idea.  If you start your own company you could become your own boss.  Then you would truly have reached your goal of being the boss of your self.  Then as the company grows you could end up being the boss for lots of other people.  Yea, this is what you are going to do to be the boss of you.  Well it is never quite like that because if you want to remain in business you will need to listen to your customers.  You need to provide them with a service that they will value and will want to pay you for.  One of the very reasons why a small company has a good chance of competing against a larger competitor is the ability to deliver better quality customer service.  Wait a minute!  If I have to listen to my customers and do what they want me to do, then they are my new boss?  That’s right and as your business grows and you attract more and more customers and you want to continue to be successful, the number of people you need to listen to increases as well.You could just ignore the requests of your customers and we all know how that is going to affect your newly formed company.  Remember the last time you were fed up with a business that was ignoring your needs.  Why, you found a new place of business who was more willing to listen to your needs and even provide you with that service you were looking for.
Going Public
Okay, let’s take the self employed business a step farther.  Let say that you do make a real honest effort in your new business and listen to your customers and follow through on many of their suggestions to improve the products and services that you provide.  You make improvements’ in your goods and services for the benefit of your customers.  The company grows and grows, you are the boss of hundreds maybe even thousands of employees, your customers love your products so you decide to take the business to the next level and go public.  You know trade shares of your company on the stock market.  This was of course in an effort to reach more customers and to expand to other geographical areas, expand your horizons and get your products and services into your new deserving customers.This changes things.  All of a sudden you are hearing from a new group of people that want your attention and they keep talking about steady growth, make more profit and drive the share price up.  These are your investors and it sounds like a new set of bosses to me.  They don’t seem to share the same passion that you had with pleasing your customers, in fact they don’t seem to care about them other then to make them pay more money and anything to show growth and make the stock price go up.  This can be a problem, if you grow too fast and the profits are a little slow at coming in you are going to be under pressure to increase profits somewhere and decline expenses in other areas.  Both of these decisions could greatly affect your fine customer service that you have been able to provide in the past.
Politics
Let us talk about one more area in this topic of bosses and that is in the area of politics.  I think that sometimes politicians forget that there positions are in a role reversal of sorts.  Politicians work for the people, I think the correct term is the servant of the people.  Yes the highest ranked position in the country, that of the president is really a servant of the people and we expect them to serve the needs of its citizens and make decisions that are for the good of the people not themselves and the many friends that they have made to get to this fine position of servant hood.
Conclusion
I think that having a boss and having to answer to someone is a fact of life.  You can even get to be the president of the United States only to answer to the people, who are your bosses.  So, in conclusion be the best boss that you can be to the people who look to you for leadership and threat those in a boss position to you with respect.  If they do not deserve your respect, then maybe it is time to leave and find a new and better boss.  There are a number of them out there, I know, I have worked for a few of them myself.

Currently rated 1.5 by 65 people

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

No no he's not dead, he's, he's restin'!

Saturday, 21 June 2008 18:56 by Donald
 Your Last Post

Just in case you did not get the Monty Python reference here is a cartoon courtesy of Blaugh which gets right to the point.  I have been away from writing anything for my web site for a very, very, long time.  Where have I been?  Where do I begin?  I have been quite busy developing software for a number of clients that I cannot name because of none disclosure clauses in my contracts.  I never did understand how disclosing who the actual client is in a public forum would be such a big deal but I can only descibe what I have been doing over the last four years as having worked in the hospitality, mortgage, back to hospitality and now property cost industry.  While that has been keeping me busy with all the work that these projects generate, Mary and I have continued to develop and support our AGP Maker program.

What has brought my sudden attention back to this site and providing more articles and input on what I have been working on?  I guess because of the change in where and how I am hosting the site and a change in the content program to update the site.  This has been the third time that I have changed the content management system for this site.  I started out using City Desk because of an article that I came across. I don't rember which magazine but the article was about content managment systems. The article quoted a couple of paragraphs  from Joel Spolsky and he was talking about City Desk.  That article took me to Joel's web site Joel on Software which was the original inspiration for starting my site.  I liked Joel's style and how he looked at things.  This was the very first blog that I followed faithfully.  Even today, when Joel writes something, I just want to find the time to sit down and read it.  I guess part of it is that Joel does not write every day or even every week.  When he has something he wants to say and share he does and that has always been my goal.  Speak when I have something to say, not just to generate content.

Next I switched the content management system over to Microsoft Content Management System (MCMS).  This was a great learning experience and I was able to leverage my dot net skills.  It provided me with the ability to edit the pages from where ever I was at home or on the road, which was a problem that I had with City Desk as I had to make changes within the City Desk program and then push out all the files to their final location.  The future of MCMS is uncertain as Microsoft is moving that technology into the latest release of Microsoft Office SharePoint Server (MOSS).  That was not the reason I am leaving this platform though, as this is a really great product, it was just impossible to host these sites anywhere but on my public exposing web server.  I really want to move all the public web sites to be hosted outside our office so that they can be expanded and extended and provide a much more stable environment.  Our office is not setup for hosting and right now our hosting needs are not all that great, but things may very well change over time.

This brings us to the third content mangement system that I am switching to.  I am moving all our content over to DotNetNuke.  Once again that leverages my skills as a dot net developer added with the extra benifit that GoDaddy supports this in their free hosting program natively.  This continues to give me the flexability to update the pages were ever I am, give me a better opportunity to get my pages indexed by the search engines and allow readers to link to direct pages and articles.  When I had this site hosted in my office you could not link directly to an article unless you knew the name of the page which was all hidden from view.  This may even lead to some articles that I might do about working with DotNetNuke.

Over the next couple of weeks and months I want to take on some technical issues like authentication and how I have taken advantage of windows authentication but used it in the way that forms authentication provides some greater flexability.  The way that in house internal programs are built and consumed in other companies that I have worked, just bugs me to death.  There is no reason why I need to log onto every single tool that I use if I have logged onto the computer that I am using.  There is no need for this and I have developed some techinques that I will share on how I use this to work the way it should.

I would also like to cover some topics that I have never covered before.  These would just be opion pieces so take them with a grain of salt, but I do want to cover some political and economic issues that have been bugging me.  If nothing else they will make you think cause I am sure my views are going to be a little different then what you might have been expecting.  I do at times have a unique view on the way I see things working and how I think that they should be working.  Keep in mind these are opionions not necessarily based on a lot of facts.

I would like to talk about my conversion and on going conversion of all my web sites going the way of DotNetNuke.  This is a great content management tool that gives me a lot of flexabiltiy as the skins are easy to create, now if only I was better at graphics I could really do something with this tool, but over all the experience is quite plesant.  Modules that are not provided by what is in the DotNetNuke installation package I can create quite easily, I am after all a software developer.  Plus the fact that GoDaddy which has been my domain name registar for years is now providing some free hosting (for the price of a domain registration) and they fully support DotNetNuke as a hosting package.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags:   , ,
Categories:   General
Actions:   E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed