Author: way0utwest

  • NCAs and NDAs

    This editorial was originally published on Mar 12, 2008. It is being re-run as Steve is on holiday.

    It’s getting close to March Madness, but this editorial has nothing to do with basketball. I saw a career newsletter recently that answered a question someone had about negotiating non-compete agreements (NCA) and non-disclosure agreements (NDA). The basic answer was that you might want to negotiate reasonable limits to these agreements to protect yourself.

    I’m under a few NDAs, one as an MVP, one as part of Red Gate, and I still have a NCA as part of the sale of this site. I’ve also signed some in the past, but I’ve been careful to read them and negotiate the terms to be more fair, at least in my mind what was fair to me and the company. Often the original agreements I’ve seen are heavily in favor of the company and should be changed.

    The MVP one with Microsoft actually seemed fair to me and mostly covered releasing information that we get as MVPs in advance of Microsoft’s disclosure. So I always ask before I repeat something I’ve gotten through their channels.

    I don’t think that NDAs or even NCAs are that commonplace as a condition of regular employment, but you should be careful and read them carefully. The exceptions might be if you’re a consultant (often an NCA will be given to you) or you work in a company that’s going some type of research or invention, including software. In these cases, I think you might see a standard one.

    However you feel about them, usually they’re required as a condition of employment in those cases, however you don’t necessarily have to accept them as is. I highly encourage you to read them and ask for changes that you think make sense. Usually this involves limiting the distance, time, or scope of the agreement. I definitely advise you to limit time frames to no more than one year for most time limits, a reasonable distance limitation (50-100 miles), and scope out specific companies for which you cannot work (for example, current customers or even only those you have contact with).

    One thing I’d also mention is that don’t look at these agreements as ironclad. I know consultants that have gone to work for current customers of their employers by negotiating the transition. Often the contractor doesn’t want to anger its customer, so it may let an employee go as a gesture of goodwill. Of course you probably have to work for the company, not be your own contractor.

    Just keep in mind one thing if you ever want to get around the NCA or NDA. You need to ask and negotiate again, which just might get you what you want. If I’ve learned one thing in negotiating anything, it’s that you can’t get it if you don’t ask.

    Steve Jones

  • The Copy Cat Poll

    This editorial was originally published on Aug 3, 2012. It is being re-run as Steve is on vacation.

    One of the interesting facts I saw a few years ago talked about storage in enterprise environments. There was research that showed many enterprise applications had 6 or 7 copies of their large databases inside the organization. In addition to the production copy, there were many other copies in use, resulting in an explosion of growth. That wasn’t surprising, and it was one of the drivers for implementing compression in many databases.

    While the cost of storage is constantly coming down, it’s still expensive for enterprise class hardware, especially in a large SAN device. Today I wanted to ask those of you that work on real world systems to make a quick count of your own system, and let us know. I can’t decide if 6 copies of a production database is high, or low.

    How many copies, on average, of your production databases are in your company?

    I suppose you could count backups as a copy, since it’s disk space usage and you have to pay for it. If you count backups, let us know, but I’m thinking just about the test systems, development systems, HA or DR systems that might receive copies of the data. Some of those secondary systems might be in use for other purposes, such as reporting from readable secondaries in an AlwaysOn scenario. Whether they are or not, they are still copies of your database.

    I used to think that four or five copies would be a lot, but with the advances in technology that allow different DR options, and the cheap local storage available on today’s desktops and laptops, I wonder if seven or eight copies might be more accurate.

    Take a count today; you might surprise yourself with the results.

    Steve Jones

  • Time Off

    This editorial was originally published on Aug 20, 2012. It is being re-published as Steve on vacation.

    As a US citizen, I’m lucky to work for a UK company. I get a generous allotment of vacation, and desperately try to use it all each year. I haven’t been successful yet, but I’m getting closer. If we could only get a little more snow at the beginning and end of the season…..

    Last year a friend told me that they lost 6 days of vacation. Over a few years this person had accumulated extra vacation by basically working too hard and when the year ended, some of their vacation was lost because of carryover limits. This person vowed to change this year and use all their vacation, but with a busy job at a small company I’m not sure that will come true. Unfortunately, I’ve all too often seen this same behavior from many people in IT.

    This piece shows that all too often people are not taking their vacation, or they’re not taking it as a complete break from work. I’ve been in both situations, and over time I’ve learned that I’m not being more productive in either case. I’m unbalanced, and over time I become less productive. That’s especially true if I’m doing creative work, like writing, or developing code.

    There’s no shortage of poor managers out there, and there are plenty of them that will work you as hard as you allow. I don’t have any great solutions for dealing with them other than scheduling vacation every year, insisting you get to take it, limiting contact with work, and if all else fails, looking for another job.

    Life is short, too short to spend more of it as work than you have to. Take advantage of your vacation to relax and recharge, even if it’s a stay-cation at home. Getting away from work is not only important, it’s something you owe to yourself and your family.

    Steve Jones

  • Filtering Objects with DLM Dashboard

    I’ve been looking at some of the features of DLM Dashboard as I go through work building database development pipelines. In this post I wanted to cover one of the lesser used features, filtering objects.

    Note: DLM Dashboard is a free tool from Redgate Software. Use it to monitor the schema of your development, test, and production databases and get notified when changes are made.

    Why would you filter objects if you’re auditing changes? Well, this isn’t really an audit per se. It’s more a tracking mechanism that provides auditing, but sometimes you don’t want to audit everything.

    For example, in my database pipeline, I have these databases:

    2016-08-23 12_04_29-SalesDemo-2015-12-01-1745-export-i-fgod4b6h - VMware Workstation

    As much as I want to track down the changes to code, there are things I don’t want to deal with. For example, I don’t care about users. I (properly) use roles to manage security, and the users in each environment aren’t going to be deployed from one database to the other. More importantly, we don’t need to track them. So let’s stop.

    If I go to the right side of my pipeline, I can see a “Filter objects…” link.

    2016-08-23 12_04_49-SalesDemo-2015-12-01-1745-export-i-fgod4b6h - VMware Workstation

    When I click that, I get this popup on the left, where I can upload a filter file. The filter file is the same format that SQL Compare uses, and indeed, the easiest way to create one is with SQL Compare. I’ll do that.

    2016-08-23 12_05_09-SalesDemo-2015-12-01-1745-export-i-fgod4b6h - VMware Workstation

    I’ll run SQL Compare and then grab two random databases. It doesn’t really matter since I don’t care about the comparison. Here I’m comparing a database to itself.

    2016-09-05 08_24_52-New project_

    When the comparison finishes, I can go to the left side and set filters.

    2016-09-05 08_25_26-SQL Compare - New project_

    There are a lot of choices here, but I’ll simply remove the checkbox on “Users”.

    2016-09-05 08_25_43-SQL Compare - New project_

    Once I do that, I can save the filter file. There’s a save icon near the top of the filter dialog.

    2016-09-05 08_26_00-SQL Compare - New project_

    Clicking this gives me a dialog to enter a file name.

    2016-09-05 08_26_15-Save As

    Now I can just close SQL Compare. By default, these filter files are in %My Documents%\SQL Compare. Once I’ve saved that file, I can see it in the Windows Explorer.

    2016-09-05 08_26_38-C__Users_way0u_Documents_SQL Compare_Filters

    Now let’s go back to DLM Dashboard. I can browse to my filter file and load it. Once I do that, the filter is applied, and my main page notes that I’ve got a filter applied on that pipeline.

    2016-08-23 12_10_49-SalesDemo-2015-12-01-1745-export-i-fgod4b6h - VMware Workstation

    There is a warning here, that notes the change of a filter is actually a drift detection change. This means the schema is not recognized. The same things happens if you remove a filter.

    2016-08-23 12_13_51-SalesDemo-2015-12-01-1745-export-i-fgod4b6h - VMware Workstation

    If I look at the details, you’ll see the filter has been applied.

    2016-08-23 12_14_07-SalesDemo-2015-12-01-1745-export-i-fgod4b6h - VMware Workstation

    Note: This filter is only applicable to those database in this pipeline.

    Now, let’s test this. Users are ignored in this pipeline, so if I add a new user to the database, it shouldn’t affect the system. Let’s do that.

    2016-08-23 12_13_06-SalesDemo-2015-12-01-1745-export-i-fgod4b6h - VMware Workstation

    SQL Source Control detects this (though I could filter it here as well).

    2016-08-23 12_13_30-SalesDemo-2015-12-01-1745-export-i-fgod4b6h - VMware Workstation

    After I commit the change, it flows through the CI process and gets deployed to the Integration database. I can see the login here:

    2016-08-23 12_16_47-SalesDemo-2015-12-01-1745-export-i-fgod4b6h - VMware Workstation

    However, I don’t see drift.

    2016-08-23 12_16_56-SalesDemo-2015-12-01-1745-export-i-fgod4b6h - VMware Workstation

    You’ll have to trust that I named the drifted schema this, but what if I include a few changes? I’ll add a new procedure and commit it to my VCS. The CI process runs and this is deployed to integration. Now I can see a change in Integration.

    2016-08-23 12_20_08-SalesDemo-2015-12-01-1745-export-i-fgod4b6h - VMware Workstation

    This is the same schema I named in Development (I know, I should use numbering). It’s marked as a change from the CI process, and I need to acknowledge that.

    The details of the change:

    2016-08-23 12_20_18-SalesDemo-2015-12-01-1745-export-i-fgod4b6h - VMware Workstation

    The history, after I’ve Acknowledged the changes

    2016-08-23 12_20_48-SalesDemo-2015-12-01-1745-export-i-fgod4b6h - VMware Workstation

    Filtering Helps

    When you’ve got environment specific items, or things that you want to exclude from tracking, filtering works. These might be schemas controlled by other groups or a third party. This might be security information. This could be anything.

    By using a filter, you can reduce the noise. By deploying these filters throughout your DLM process, in SQL Source Control, in DLM Automation, in DLM Dashboard, you can limit the extra information that isn’t necessary for you to view.

    Getting Started

    You can start using DLM Dashboard for free today. Download a copy, at no charge, and monitor up to 50 databases from a single installation. Or install multiple instances to watch more databases.

    I think you’ll find DLM Dashboard is a handy tool for tracking those development efforts you want to be sure are deployed completely to downstream environments, while ignoring those that aren’t important.