Analysis (Services and Self)

Koan Bremner's view on life as a database and data warehouse professional / addict and non-genetic woman

Sunday, October 31, 2004

If I can just have one in pink, please...

pocketnow.com - Reviews - Koyono's BlackCoat-T - v3.0

I mean, don't you agree, this is just so much better due to its hue?

This blog has been migrated to new software on a different server (http://www.multidimensional.me.uk) and comments on this post on *this* blog are now closed. All existing comments have been copied to the equivalent post on the new blog. If you still wish to comment on this post, please use the equivalent post at: http://www.multidimensional.me.uk/

Read more!

Saturday, October 30, 2004

A Bug's Life (or, how to get a hotfix out of Microsoft Product Support Services)

It's only now, given that Microsoft have just (well, three days ago, actually, but I've only just noticed) published a particular Knowledge Base article, that I feel able to make this post. I make no apologies for the fact that this post is quite lengthy and involved; it documents what was involved in diagnosing a perplexing issue in our analytics product; narrowing it down to what looked like a new and undocumented bug in Microsoft's Analysis Services product; working with Microsoft to prove the bug to them; evaluating the hotfix which they subsequently produced; through to deploying the solution in our application. Personally, I am very impressed with the speed and professionalism with which Microsoft responded, but there are some key tactics to employ when trying to convince them (or any other software vendor) that a bug exists in their product, for which they should produce a fix. Hopefully, these tactics might benefit others.


Fortunately (given the fragmented nature of my memory at the moment!) I have a comprehensive email trail, so the chronology which follows is accurate. However, here's a little background to put things in context. Exony Reporting is designed allow reporting and analysis of operations inside telephony call centres. It imports data (huge volumes of data) from various source systems, consolidates, summarises and packages that data into a form (real-time and historical) that can be used by a wide range of interested and authorised users; and it needs to do so quickly, securely and reliably. The architecture would look familiar to any Data Warehousing professional, i.e. we use a relational database to receive and pre-process the incoming data, an OLAP engine to summarise the data into a form that can be easily used, an application server to contain the business logic, a web server to provide a user interface to browser-based clients, together with inter-site replication to provide resilience to site failures and improved local performance. We've used package software (provided by Microsoft and others) and written substantial integration code to unify them. The key point here is that with a component solution like this, an issue which appears in one area may be a symptom of a problem somewhere else; finding exactly *where* that "somewhere else" is is not always a trivial undertaking!

In early July of this year, I was asked by my support colleagues to look at a problem which was periodically occurring. After completing a new installation of our product, typically a backlog of source data would be imported, processed and summarised, administrators would configure users who would be allowed access to the system, and then those users would begin to use the system, with new data being continually added. At some point, maybe hours, days or weeks after going live, CPU utilisation would suddenly rise to 100% in our application, and not return to normal levels. The application would require a forced restart, but at some point shortly thereafter, the same rise to maximum would occur. This was a little perturbing...

The problem was being shown in our application; what was it in our application code that might be causing this? I couldn't see any obvious pattern; ordinarily, the system could support many users, but once the problem occurred, even a single user could send the CPU usage to maximum. And once it had occurred, then it would recur rapidly. I hadn't seen behaviour like this in testing, but some of my colleagues had; apparently, reprocessing their Analysis Services database from the imported data made the issue go away. Which was the first clue.

High on my list of priorities was finding a single, repeatable series of actions which would reproduce the problem; for me, there's only one thing worse than a system problem, and that's an inconsistent, intermittent and non-reproducible system problem! However, I had made some progress; while I still couldn't identify what caused the first CPU spike, once it had happened, I could easily reproduce it. Once it had occurred, then attempting to access some of the Analysis Services cubes caused the CPU spike in whichever application was attempting access. For example, trying to use Analysis Manager to edit the cube would send Analysis Manager to 100% from which only a hard reset of Analysis Manager was possible; using the MDX Sample Application to issue an MDX query against a cube would have the same effect on the MDX Sample Application; using Query Analyzer to issue an MDX query by means of a pass-through query to Analysis Services would send Query Analyzer to a non-recoverable 100% CPU spike. So, I started working on the hypothesis that once the first CPU spike occurred in our application, then subsequent spikes were not restricted to our application; *any* application attempting to access part of the Analysis Services database would spike. In other words, the subsequent spikes were not the *fault* of our application, but the *symptom* of a fault that lay elsewhere.

I began to suspect corruption in the Analysis Services cubes, particularly since completely reprocessing the cubes (as my colleagues had done) meant a return to stability, at least for a while. This was bad news; the sheer volumes of data we import, together with the need to make the processed data available to users in a timely fashion meant that our architecture used incremental updating and partitioned cubes. The fact that reprocessing the cubes made the corruption go away (temporarily) wasn't really a solution, on two counts; firstly, the time taken to reprocess the cubes (each time corruption occurred) could be substantial; secondly, the staged data might no longer be available in the relational database, or in the source systems. If this problem was caused by corruption of the cubes, we needed to find and fix what was causing the corruption.

The breakthrough came when I was able to examine a clean system on which the initial CPU spike had occurred. Because of the array of software components involved, diagnostic and error logging tools at my disposal were varied: Event Viewer system and application logs; SQL Server error logs; Analysis Services processing logs; bespoke logging in our application; Performance Monitor logging; SQL Profiler traces... as anyone who has tried to diagnose system problems on a distributed server application will know, turning on all available logging will overwhelm you, unless you know what you're looking for, and roughly when it occurred. Having enabled comprehensive logging, the first spike revealed the key; once it occurred, in the Event Viewer application log I could see that the MSSQLServerOlapService (i.e. Analysis Services) had unexpectedly restarted shortly prior to the spike. Because of that, Analysis Services had produced a diagnostic memory dump. I then looked in the processing logs for Analysis Services and some custom code which we use to control Analysis Services processing. Sure enough, immediately prior to the restart and memory dump, Analysis Services threw an error while incrementally updating a dimension. After it had restarted, *any* attempt to access the dimension itself, or *any* cube which used that dimension, would cause the CPU spike in the application concerned; but *not* in Analysis Services itself.

So now the focus changed again. What was happening that caused the dimension corruption? Was our application doing something that it shouldn't... or was there a bug in Analysis Services that was causing it to corrupt dimensions?

I was getting closer to identifying a consistent series of reproduction steps, but at this point I thought it was worthwhile to check the Microsoft Knowledge Base to see if anything relevant was listed there. The article "FIX: The Analysis server computer stops responding when you process dimensions and virtual dimensions" looked promising, so on 14 July I contacted Microsoft PSS by telephone to open a Support Incident and ask for the hotfix referred to in that article. After an initial telephone consultation, so that the PSS engineer could determine if the problem we were experiencing was similar to that which the hotfix was designed to resolved, I was emailed a link from which I could download the hotfix, and commenced testing.

Sadly, the hotfix did not solve the problem. Over the next few days, I was able to reproduce the initial CPU spike three or four times; each time, it was preceded by a dimension processing error. Each time, fully reprocessing the dimension (which necessitated fully reprocessing all the cubes which used that dimension) solved the problem; but only for a while. With multiple occurrences, however, I now had more information to go on. The initial dimension processing error was not always the same dimension; but they were always parent-child dimensions. It was never on the initial processing of the dimension, but always on a subsequent incremental processing. Each dimension that failed had been successfully incrementally processed before subsequently failing.

So now, I needed to determine if it was just parent-child dimensions that were at risk, or was the problem potentially applicable to *all* changing dimensions (all parent-child dimensions are changing, but not all changing dimensions are parent-child) or in the worst case, were *all* dimensions at risk? In any event, having verified that nothing our application was doing was breaking the rules of what you can do with changing dimensions, I opened a new support incident with Microsoft PSS. (Technically, support incidents are chargeable, and must be paid for when the case is opened; however, if the incident is a request for a hotfix which is already available, there is no charge, nor is there a charge if the cause is found to be a fault with the Microsoft software.) As an MSDN Universal subscriber, I also had unused support incidents at my disposal, so on 21 July I opened the new case.

I was dealing with the same Support Engineer who had responded to the initial hotfix request (and with whom I had dealt the previous year on some replication issues); he had already impressed me with his technical abilities and resourcefulness. I explained the stage of diagnostics I had reached, and that Build 931 (the hotfix) had not helped; he knew that there were later builds of Analysis Services than the one I had tried, so he undertook to see if one could be made available to me. On 23 July, I received Build 950. Over the weekend, I tested this build, and the dimension corruption was still occurring. I was now convinced that the fault lay with a bug in the incremental processing of dimensions; I also knew that I would have to prove that the fault was not caused by our application if Microsoft were to be convinced that they should provide a fix. So, I worked on providing a reproduction scenario based only on SQL tables, simple cubes, and a series of updates to the SQL data (representing legitimate updates to the members of a changing dimension) with a series of incremental updates of the associated Analysis Services dimension. Only Microsoft utilities (Query Analyzer and Analysis Manager) were used. Having found one that was simple, consistent, and 100% guaranteed to produce the error, I emailed the details to the Support Engineer on the morning of 26 July.

Within a couple of hours, he emailed me to say that he, too, could consistently reproduce the problem on the more recent Build 960. He asked if I could provide a full description of the operational impact this issue was having on us and our customers (in case he needed to justify the effort involved in producing a code fix) which I promptly sent to him.

On 27 July, I received an email to say that the problem was being escalated within Microsoft; particularly since the issue wasn't just related to a lack of usability, but actual corruption of data leading to substantial downtime while the corrupted objects were reprocessed.

On 28 July, I was emailed to say that the issue would be tested that day on the latest build, Build 964. The issue persisted.

On 29 July, I was contacted by a new Support Engineer, who explained the five-milestone process which would be used to escalate this case. The milestones were: production of a problem report; request for a QFE (Quick Fix Engineering) hotfix; acceptance of the problem by the development team; production of a hotfix for internal testing; release of the hotfix to us for acceptance testing. It was also made clear that, even if the problem was accepted as a bug, there was no guarantee that a fix would be produced, or a commitment to when any fix might be produced.

On 30 July, I was asked to provide some of the memory dump files which occurred when Analysis Services restarted after the initial processing error, which I did. Later that day, I was informed that the case had now passed the first milestone, i.e. a problem report had been raised, and passed to a Critical Problem Resolution Engineer; by whom I was contacted later that day.

On 2 August, I was informed that a request for a QFE hotfix had been raised. This was both good news, and bad. Good, in the sense that Microsoft PSS accepted that there was a serious issue in their product, and therefore a code fix might be forthcoming at some point. Bad, because it also meant that there was no workaround which could be suggested by Microsoft or deployed by ourselves, until and unless a code fix was released.

Even while I was heavily involved in working with Microsoft to raise the profile of this issue, I was working on a mitigation strategy which we might have to adopt, until and unless we received a suitable code fix. On that day, we removed all parent-child dimensions (which were still the only dimensions which had been affected) from our application, and released a hotfix to our customers which would do the same on their live systems. The downside of this action was that the affected cubes would need to be fully reprocessed, and there would be some loss of analytical flexibility; the upside was that the threat of initial corruption and the performance issues which flowed from it would be removed. Sometimes, you need to make an unpleasant decision to prevent an even more unpleasant outcome.

Things went quiet for a week or so, until I was contacted by a new Engineer on 11 August, who informed me that milestone three had now been reached, i.e. the product development team had accepted that a product issue existed which required a code fix. Even now, though, there was still no guarantee that a code fix would be produced.

By 18 August, the development team had isolated the specific conditions which would cause the dimension corruption, and were working on a solution. On 20 August, I was informed that they had produced a code fix, which had been sent for internal testing.

On 24 August, a hotfix was made available to us; my preliminary testing confirmed that it worked, in the context of the reproduction scenarios I had identified. More extensive testing over the following days reinforced the likelihood that he issue had been fixed, and that we could deploy the fix and consider the reintroduction of the parent-child dimensions into our application.

Finally, on 27 October, the Knowledge Base article referred to at beginning of this post, and documenting the hotfix, was published. Maybe it's just me, but even though there is no name-check for me or my employers in the article, it still feels like *my* hotfix! :-)

On a more serious note, this incident probably consumed a month's effort on my part. From the moment the second support incident was raised with Microsoft, however, the baton had effectively been passed, and much less day-to-day involvement was needed from me, until the hotfix was made available. The baton could only *be* passed, however, because of all the work that was necessary to isolate the problem to a specific application, and prove that the problem was occurring because of an inherent issue in that application, and not in the code or logic inherent in our application. I think it's worth stressing that Microsoft really only became formally involved on 21 July; and five weeks later, on 24 August, a tested code fix to a major product which was four years old was made available to us. Personally, I think that is quite an impressive response.

So, what did I learn from this episode; indeed, what transferable lessons are there that I (and hopefully others) can apply in the future, both when diagnosing issues in complicated distributed architectures, and specifically when seeking assistance from a supplier like Microsoft? On the first count, I think the key points are:

1) Use all possible sources (including Event Viewer logs, Performance Monitor logs, Analysis Services processing logs, SQL Profiler traces, SQL Server error logs, own application logging, memory dumps) to identify what might be causing the problem. Particularly, look for abnormal events which coincide with other unusual occurrences;

2) Keep in mind that the symptom may not be the cause - the initial problem appeared to be runaway CPU usage in our application; it was some time before the real issues began to surface;

3) Develop a quickly repeatable automated test suite (e.g. use batch files, scripts, database backups / restores, VMWare / Virtual Server images with snapshots or repeatable resume) when trying to isolate the specific steps which consistently reproduce the problem;

4) Develop automated test cases for all possible interactions, between users and your application, even if you don't expect they will occur.

As for making it easier for a supplier like Microsoft to help you (which also means making it beyond question that the supplier has a responsibility to help you):

1) Isolate the problem to the suppliers product *only* (in this case, SQL tables, SQL queries and cube operations using Microsoft's own applications) i.e. prove that your application and logic is not a contributor to the issue;

2) Stress the impact of the problem on your customers; be reasonable, but be explicit;

3) Accept that a code fix may not occur (especially if manual or procedural workarounds can be identified); develop mitigation strategies of your own, in case a code fix is not produced, or as an interim measure until one is produced;

4) Wherever possible, communicate by email; when telephone conversations have taken place, make sure the content of the conversation is written down (and, out of courtesy, copied to the other party).

After the incident has been resolved (one way or another):

1) Make sure to thank those who have worked on your case; apart from being good manners, who knows when you might need to raise another support incident :-)

2) Give detailed feedback if contacted afterwards; after each support incident I have raised with Microsoft, I've been contacted and asked to give detailed feedback on the incident and how it was handled. No matter how busy I was when asked, I took the time to give that feedback. It is courtesy to give credit where it is due, and that feedback may help to make future support incidents run even more smoothly.

OK, that's it, I've probably broken umpteen rules about the length of blog posts, but if you've read this far, hopefully there's something here that may assist you in the future.

This blog has been migrated to new software on a different server (http://www.multidimensional.me.uk) and comments on this post on *this* blog are now closed. All existing comments have been copied to the equivalent post on the new blog. If you still wish to comment on this post, please use the equivalent post at: http://www.multidimensional.me.uk/

Read more!

Wednesday, October 27, 2004

New Business Intelligence site

In my daily email from SQLServerCentral.com there is an announcement of a new Business Intelligence site, MSBICentral.com which, on preliminary inspection, looks like it will prove to be a great resource. Of particular interest is a two-month undertaking to provide, each day, a new RDL file illustrating some "neat" aspect of Reporting Services. I'll be watching with interest.

This blog has been migrated to new software on a different server (http://www.multidimensional.me.uk) and comments on this post on *this* blog are now closed. All existing comments have been copied to the equivalent post on the new blog. If you still wish to comment on this post, please use the equivalent post at: http://www.multidimensional.me.uk/

Read more!

"What does three up, three down mean to you?"

One of the little pleasures that life throws my way is insomnia. It's much less of an issue than it used to be, but when it happens... 9.30pm last night and I nearly fell asleep on the lavatory, I was so tired. 12.30am and I'm awake with that sinking feeling that this could be a long one. Standard tactics employed (get up, do the washing up, make a cup of camomile tea) without effect. Turn on the TV (something I rarely if ever do at such times) and it's Game 3 of the World Series on Channel 5. And the years roll away...

Boston Red Sox at St. Louis Cardinals, Boston 2-0 up in the series. Boston's first World Series since 1986, in which year I spent the summer in Boston. The fact that I spent that summer cleaning cars was incidental to the fact that I wanted to experience life in a different country; and it was prophetic that the first night I was in Boston I spent watching the Sox play the Oakland A's on the TV in my room in the YMCA. The die was cast.

I knew next to nothing about baseball before then, but I will confess I developed quite a passion for it that summer. Especially sitting in the bleachers at Fenway Park. And it's the little things that I remember, like the group of Texas Rangers fans who steadfastly cheered their losing team without fear of getting smacked by the local fans. I've been to Old Trafford on three occasions, which is three more than most supposed Manchester United fans, and I was supporting their opponents (QPR, West Ham and Southampton) on each occasion (precisely *because* they were playing Man U) and trust me, I wasn't going to be so stupid as to cheer loudly while surrounded by Man U fans. Anyway, my point (such as it is) is that I never felt intimidated at a baseball or gridiron game, but have felt so at football.

Given my memory fun and games recently, I ask myself what trivia I can chain together from that summer. Well, I took a Walkman and two cassettes with me, REM's "Murmur" and John Cougar Mellencamp's "Scarecrow", because they pretty much epitomised what "America" meant to me before I went there. And I remember being blown away the first time I heard "Rain on the Scarecrow" from the latter album, on the radio in my room at college in late 1985; which wasn't the room I was supposed to have, but I'd wrecked my knee quite badly that September and couldn't manage the stairs up to my own room. In Boston, I learned to sail on the Charles River, progressing to sailing Lasers; four years later, I tried sailing a Hobie Cat and it was as if I'd never sailed before. For the flight back home I bought the recently-published "Hunt for Red October", by the then-unknown Tom Clancy, who went on to sell a few more books; so much so that he very nearly bought the Baltimore Orioles baseball team a few years later.

Yes, that's how my memory works.

Anyway, Boston lost that World Series (to the New York Mets), as they did in 1975 to the Cincinatti Reds, and 1967 to the Cardinals... so maybe this is their year. I'm not going to claim to be a rabid fan these days; it must be at least five years since I took the trouble to tape and watch a game, although I remember that in 1991 I used to have USA Today delivered every day just so I could keep up with the baseball... hey, the internet hadn't been invented! ;-)

As you may have gathered from this free-form rambling, I'm now seriously in need of some sleep, so I'm going to try to catch a couple of hours. Go Sox! Lay the "Curse of the Bambino"!

(And a prize of my own choosing for anyone who can name the film from which the title of this post is a quote.)

This blog has been migrated to new software on a different server (http://www.multidimensional.me.uk) and comments on this post on *this* blog are now closed. All existing comments have been copied to the equivalent post on the new blog. If you still wish to comment on this post, please use the equivalent post at: http://www.multidimensional.me.uk/

Read more!

Friday, October 22, 2004

Google Desktop Search Under Fire

AchilleCB writes "Cnn and many other sources are jumping on the Google-privacy-bash bandwagon, they are carrying stories warning of more privacy implications regarding Google's Desktop Search, "if it's installed on computers at libraries and Internet cafes, users could unwittingly allow people who follow them on the PCs, for example, to see sensitive information in e-mails they've exchanged. That could mean revealed passwords, conversations with doctors, or viewed Web pages detailing online purchases." ... Type in "hotmail.com" and you'll get copies, or stored caches, of messages that previous users have seen. Enter an e-mail address and you can read all the messages sent to and from that address. Type "password" and get password reminders that were sent back via e-mail."

[Via Slashdot: ]

There you go, Rex; maybe you are right to be paranoid after all ... ;-)

This blog has been migrated to new software on a different server (http://www.multidimensional.me.uk) and comments on this post on *this* blog are now closed. All existing comments have been copied to the equivalent post on the new blog. If you still wish to comment on this post, please use the equivalent post at: http://www.multidimensional.me.uk/

Read more!

Wednesday, October 20, 2004

Good riddance to bad rubbish

The Sperm Donor, 1929 - 2004

At some point today, the funeral of the individual whose sperm fertilised one of my Mum's eggs to produce yours truly takes place. The fact that I don't know the precise time, location or even if it's being buried or cremated reveals that I'm not exactly overcome with grief. Far from it; I loathed the individual in life, hadn't spoken to it in over twenty years, and sincerely believe that few (if any) genuine tears will be shed at its passing.

If reading this post leaves you wondering how someone like me can feel so much hatred for a "parent", then I'm relieved for you. In an ideal world, I hope we would all feel total and unconditional love for our parents. But I don't hold with the notion that they are deserving of unconditional love and respect just *because* they are our parents. "Respectable is as respectable does", as Forrest Gump might have put it. As a non-Christian, I don't feel bound by the fifth commandment, either. To my mind, respect, honour and love come as a consequence of actions and examples; when a person shows neither, but instead behaves (consistently and remorselessly) in a way that deserves disgust, loathing and utter contempt... well, we reap as we sow.

So no, I will not be mourning today. Such mourning as was necessary (for one parent-child relationship that I never had) I went through years ago. Today, I feel nothing but relief that an enduring drain on my Mum's life is now at an end. And fervently hope that she can live the remainder of her life with the contentment and happiness that I believe she has been denied up to now. And I know I'm not alone in wishing her that happiness.

This blog has been migrated to new software on a different server (http://www.multidimensional.me.uk) and comments on this post on *this* blog are now closed. All existing comments have been copied to the equivalent post on the new blog. If you still wish to comment on this post, please use the equivalent post at: http://www.multidimensional.me.uk/

Read more!

Tuesday, October 19, 2004

Just because you can, doesn't mean you should (take two)

This is a rewrite of a previous post, because I realised that the point I was interested in making had actually got lost in that first version. So, I'll try a different approach.

One of my favourite restaurants is Jacob's Ladder in Dublin. After taking my seat, they would bring a selection of freshly-baked breads, a starter in themselves. (And if the tray was brought around again, well, it would have been rude to refuse). Then a menu over which it was a pleasure to linger; courses which were a treat for the eye as well as the palate; and a relaxed (and relaxing) atmosphere in which to dine alone or in company. I never came away from there without feeling well-fed, satisfied and dewy-eyed with pleasure.

Of course, by the time I'd walked downstairs to the street, the contents of my stomach represented a mashed-up amalgam of the various courses I'd eaten, diluted by whatever drinks I'd chosen. If, instead of serving the meal traditionally, the waiter had brought me a large bowl containing all of the various courses, poured in my choice of drinks, mashed them all up, handed me a spoon and instructed me to tuck in, I suspect that I would have been underwhelmed.

Why? After all, the net result would be the same (my stomach would be filled with a nutritious and filling meal). But the journey would be different; instead of being able to enjoy each course at my own pace, pause for digestion and reflection, possibly even change my mind about my choice of dessert (or even decide not to have dessert on occasion; unlikely, but you never know) I would have to force down everything at once, possibly giving myself indigestion in the process.

In my opinion, introducing a new release of evolutionary software into a customer is a lot like inviting that customer to dine; create a menu which offers choices (but not too many, or the task of choosing will be lengthy and unenjoyable or short and arbitrary). Each individual course should give pleasure, and ready the palate for the next course. Not too many courses; and certainly not courses that clash. The waiter shouldn't rush the diner by bringing the courses too soon; the diner should be satisfied that the bill reflects the meal they've enjoyed; and they should leave the restaurant already anticipating their next meal.

I feel a little like a chef when working with the technologies I do; there is so much that could be done with them, that surely putting all of those possibilities into one release makes sense? Of course not; too many courses lead to indigestion; too many new features can leave the customer unsure of how to use them. The wrong wine can spoil the main course; new features should complement each other, not compete. The diner may not want a dessert; the customer might not have the inclination to use feature X at this time, while they're busy taking advantage of features Y and Z.

It is my responsibility to contribute to a menu and a dining experience that leaves a contented glow, not heartburn. Designing the menu is as much about deciding what to leave out as it is about what to put in; or what to hold back for tomorrow. Less can be more. I believe that most software developers would like to incorporate as many new, compelling and impressive features as possible in each new release; which brings us back to the title of this post...

This blog has been migrated to new software on a different server (http://www.multidimensional.me.uk) and comments on this post on *this* blog are now closed. All existing comments have been copied to the equivalent post on the new blog. If you still wish to comment on this post, please use the equivalent post at: http://www.multidimensional.me.uk/

Read more!

Saturday, October 16, 2004

I gots to gets me one of these...

That's it. No need to upgrade the radio/cassette player in Lotty, the car I bought recently while my beloved Cruella is off the road - again. :-( With this I'll be sorted. Talk about a gadget that brings about a paradigm shift. (And, since it's not on sale yet, by the time it is, I might even be able to afford one...)

This blog has been migrated to new software on a different server (http://www.multidimensional.me.uk) and comments on this post on *this* blog are now closed. All existing comments have been copied to the equivalent post on the new blog. If you still wish to comment on this post, please use the equivalent post at: http://www.multidimensional.me.uk/

Read more!

Get on the bus; get off the bus

My reputation for being inflexible is undeserved; I can be persuaded when I'm wrong! James has provided me with sufficient justification for a full feed, so I've changed it back. I will, however, leave the web page as is for now (i.e. first paragraph only) .

If anyone's interested, these posts by Wil Wheaton, Harold Check, Alex Campbell and Amy Gahran settle the case as far as I'm concerned. So there! ;-)

This blog has been migrated to new software on a different server (http://www.multidimensional.me.uk) and comments on this post on *this* blog are now closed. All existing comments have been copied to the equivalent post on the new blog. If you still wish to comment on this post, please use the equivalent post at: http://www.multidimensional.me.uk/

Read more!

Format Change

Because there a few long posts on here already, I've decided to change the web site to show just the first paragraph of long posts; clicking on the "Read More!" link below an individual post will take you to the full post, should you want to read it. Unfortunately, the way this is implemented means that every post has a "Read More!" link even if there isn't any more to read; hey, I'm a novice at blogger, what can I say? ;-) Also, for those who use reader feeds, I've changed them to send only the first part of the post, again, with a link to the full post. Which saves bandwidth for those who wouldn't want to read a particular post in full. (I am consideration personified.) If anyone views either or both of these changes as a bad move, leave a comment and I'll think about changing back.

This blog has been migrated to new software on a different server (http://www.multidimensional.me.uk) and comments on this post on *this* blog are now closed. All existing comments have been copied to the equivalent post on the new blog. If you still wish to comment on this post, please use the equivalent post at: http://www.multidimensional.me.uk/

Read more!

The past is another country

Reading about my colleague Brad's experiences when he attended a school reunion led me to think about my own past.

Of the people I was at school with, I keep in regular contact with exactly one. Of the people I was at university with, I keep in occasional contact with four or five. And workmates at former employers? Maybe half a dozen, including three whom I'd rate amongst my closest friends. Why so few?

Actually, I don't think that's particularly low. I've moved around pretty extensively over the years, in terms of where I've worked and lived, and have had various email addresses and telephone numbers, most of which are now defunct, so it's not particularly surprising that I don't get too many spontaneous contacts from the past. I don't recall ever making a conscious decision *not* to contact someone again; life moves on,that's all, mine and theirs. And as I've said to others (when asked why I don't send many Christmas cards, for example), communication is a two way street.

Maybe I've been less focused than others on keeping touch with people from my past because there are significant elements of my life I'm in the process of changing! ;-) Even so, I'm not making any attempt to deny or rewrite my past. Some transgendered folks who transition make a conscious decision to build an entirely new identity, breaking all links with their past, and trying to live as if they've always been as they are now. That's fine, and I can understand why some would want to take that approach (sometimes referred to as going "deep stealth") but it's not right for me. My view is that as time progresses, people I meet for the first time will have less and less cause to ask themselves if there's something "different" about Koan; and even if they work it out, it's no biggie to me.

Which means that I see no problem with giving friends and acquaintances from my past life the opportunity to catch up with me, if they choose to. Among other things, my college at university is very keen to keep in touch with former students (we are "Non-Resident Members" of the College, and retain use of many of the facilities for life) so I've decided to add my email address and URL for this blog to their directory, and see who (if anyone) gets in touch.

This blog has been migrated to new software on a different server (http://www.multidimensional.me.uk) and comments on this post on *this* blog are now closed. All existing comments have been copied to the equivalent post on the new blog. If you still wish to comment on this post, please use the equivalent post at: http://www.multidimensional.me.uk/

Read more!

Friday, October 15, 2004

55,000 Euros? I'll take two

Bung one of these on the roof at Benham Valence. Go on!

This blog has been migrated to new software on a different server (http://www.multidimensional.me.uk) and comments on this post on *this* blog are now closed. All existing comments have been copied to the equivalent post on the new blog. If you still wish to comment on this post, please use the equivalent post at: http://www.multidimensional.me.uk/

Read more!

T-Day Plus One Year

16 October 2003 is one of a few upcoming auspicious (for me) anniversaries. One year ago marked the beginning of my transition into womanhood; because on that day, I explained to my colleagues at work (except for a few absentees who were either ill, on holiday or at a customer site) about my gender dysphoria, and that (with the complete support of the company's management) I would be coming to work from that day dressed as a woman, with a new name, but unchanged in responsibilities and abilities. Many people with gender dysphoria either have faced (or will have to face) the process of transitioning in the workplace, so I thought I'd document my experience, in the hope that it might help someone else.

I started working at Exony in March 2003, and at that stage my gender dysphoria was not public knowledge. I was still living as a man, and trying to cope without pursuing a full transition. With hindsight, though, I'm sure that subconsciously I was looking for an employer where I would feel comfortable and safe to transition, should the need arise. I certainly didn't raise the subject at interview, nor once I started! ;-) What I *did* raise with my immediate managers, though, from day one, was that I had been dealing for years with clinical depression; but that a lot of experience of dealing with the practical effects of how depression affected me, together with medication, plenty of counselling in the past, clean living in the present and a period of recuperation prior to joining Exony meant that I felt the role I was taking on was well within my abilities, and one where I could manage my occasional bouts of depression without adversely affecting the company. I think that's proved to be the case (although I can only speak from my side); I'm still there, so hopefully that indicates they didn't lose faith in me! :-)

Six months later, though, I had arrived at the conclusion that permanent transition was really the only viable option for me, so I took my immediate manager (the Chief Technical Officer) to one side and explained to him what was afoot. I don't really know what reaction I was expecting, and I'd long ago accepted that I have no right to expect (or demand) a favourable reaction to what is (for most people) not something they encounter every day. But Doug was fine about it; in fact, he said he was relieved it wasn't something more serious! Which was a salutary reminder to me that sometimes we imagine things about ourselves are much more of an issue for others than they really are.

Doug spoke with the rest of the management team, and I assume they investigated their corporate responsibilities and legal obligations, as any responsible employer would. A few weeks later, we'd agreed that I would be the one to announce my situation to the rest of the staff, and between us we would answer any immediate questions or concerns which were raised. The day before I was due to make the announcement, I met briefly with Doug, Rex (Chief Operations Officer) and Jonathan (Chief Executive Officer), and Jonathan said something that I will never forget. He said that he thought it was a fantastic thing (for me) that I was going to achieve such an important personal goal; and that it spoke volumes for the company that a relatively new employee like me felt that I could go through such a process without fear of prejudice from my employer and colleagues. He said exactly the same thing the next day to the company, after I'd broken the news; and his actions since have proved to me that he meant every word. Respect!

The actual announcement was, in all honesty, a breeze. I've mentioned before that I miss the buzz I used to get while instructing in a classroom. I'd started giving Thursday lunchtime "chalk talks" a few weeks previously, which were informal talks / demonstrations / discussions for an hour or so on a topic relevant to databases, analytical systems and the like which either I felt were not sufficiently clear to my colleagues, or that they had specifically asked me to cover. We were about to begin developing the new analytics product in earnest, so I chose a topic which would appeal to the widest range of staff (including the non-developers) and gave of my best. After the session was over, I said that I had a small announcement of a personal nature to make, and (after a few seconds of hesitation on my part) got on with it.

I had got into the habit of videoing the chalk talks, so that I could turn them into video and audio files for the benefit of colleagues who'd missed a session, so I left the camera rolling, and I still have that recording. It is just six minutes and 55 seconds long. What can I say? They were stars. If any of them had (or have) problems or issues with my transition, they've never been expressed to me, directly or indirectly. Which is exactly what I would have hoped for. It *shouldn't* be an issue for anyone else. But I've read more than a few accounts of workplace transitions by transgendered folks in the UK and elsewhere, and my experience seems to be very much the exception rather than the rule. Stories of immediate dismissal, delayed / "constructive" dismissal, persecution, intimidation and discrimination abound. So, if I *had* experienced difficulties I would have been sad, but not surprised. The fact that I didn't was a source of wonder and relief to me back then, and is something I am grateful for to this day.

And that was my last day in male mode. I went out shopping with my partner Kim the next day for some essential items, gave away, threw away or sold my male clothing, and have lived as I should always have since that day. And I have truthfully never regretted it, not for a moment.

My closing observation on this long-ish post is how I, personally, have dealt with people who've joined Exony since that day. I'm Koan, I work on the database side, I ride a motorbike to work (mechanical breakdowns of my trusty Cruella permitting)... the rest they can work out for themself. I don't say "I'm a transsexual" or "I'm progressing towards a sex change" or anything like that. What other people say to them about my status (if anything), I have no idea, nor do I particularly care. If any of them want to talk to me about stuff, or ask questions, I respond and answer openly and willingly. I take the view that if I don't make a big thing about it, then they won't think that *they* need to make a big issue out of it. That seems to be the case.

Thanks, guys; I really mean that.

PS - to me, "guys" is a non-gender specific collective term; as opposed to "men", "chaps", "blokes" etc. Is that how other people interpret it? If not, maybe I'll start using the term "chuffers" (as coined by my colleague Ant a couple of days ago) instead. I've no idea where that one came from...

This blog has been migrated to new software on a different server (http://www.multidimensional.me.uk) and comments on this post on *this* blog are now closed. All existing comments have been copied to the equivalent post on the new blog. If you still wish to comment on this post, please use the equivalent post at: http://www.multidimensional.me.uk/

Read more!

Thursday, October 14, 2004

The joy of hormones

21 July 2004 was an auspicious day for me; because on that day I began hormone treatment. Which represents the first medical step on my journey. But not the first actual step; I had been living socially and professionally as a woman full-time for over nine months at that point, and went through a lot in the months and years leading up to that point. But that's not a subject for today.

So, hormones… I began with an initial dose of 50 micrograms of Ethinyloestradiol daily for the first eight weeks. I had numerous blood tests prior to that, to provide a pre-treatment baseline, and those tests were repeated after eight weeks. Since all was well, the dosage was then increased to 100 micrograms daily; and, subject to more blood tests after another eight weeks, may be further increased. The blood tests are important because female hormones can have unwelcome side-effects in women; introducing them into a male physiology can also have side effects (strain on liver function, increased risk of thrombosis, for example). I don't want to succumb to something of that ilk, so I'm happy to take it steadily.

I'm also taking a medication called Finasteride, 2.5 milligrams daily. This has been prescribed to help reverse my limited male-pattern baldness. Personally, I don't feel particularly disadvantaged in that area; certainly not in comparison to my brother Russ, for example! But, I'm more than happy to see if there's any benefit from taking them.

Having taken a fair variety of prescription medication over the years, particularly anti-depressants with an alarming array of potential side-effects, I'm quite keen on reading the information leaflet that comes with prescription medication. It can be perversely amusing! Ethinyloestradiol seems to be primarily designed for women for the purposes of HRT, so the leaflet is written with that in mind, but it does say that "Men may develop breasts, their testicles may stop working, they may look more female and become impotent during treatment". And this is bad, because…? ;-)

Although Finasteride is primarily designed to help men suffering prostate problems (benign prostatic hyperplasia, or BPH) it has a secondary use in reversing limited male-pattern baldness. As for side-effects, these may include "impotence, or less desire to have sex; changes or problems with ejaculation, such as a decrease in the amount of semen released during sex" and "breast swelling and / or tenderness". So, nothing for me to be particularly concerned about, although one of my colleagues who expressed interest on the hair regrowth front may choose to think again…

One thing I'd like to gain from these posts is an indication, over time, of how hormones affect my emotions and mood; particularly when I compare how I feel with what my friends, colleagues and loved ones tell me about how I've actually been! Nearly three months on, I can say that I am pleased with the physical effects and, overall, with the emotional effects. But (and it is a big "but", and I'm not referring to my increasingly rounded butt)... I have experienced side-effects which I really wasn't expecting, and could quite happily do without. My concentration and ability to focus have declined markedly, while my memory has been decimated. After the initial amusement factor (at understanding what it means to become a "dumb blonde") wore off (and, for me, it really *has* worn off), this is proving a significant challenge, particularly at work. Whole areas of knowledge have been closed off. In some areas, I know that I *ought* to know something, or feel that I used to know something; in others, I've no recollection of having ever known it. Taken together, everything is taking much longer than I'm used to, and I find it very upsetting, to put it mildly.

My colleagues have been incredibly supportive, and I really appreciate that, but that doesn't stop me feeling incredibly guilty that I'm not as productive as I should be, as I used to be; especially since this is a very busy time for us, and inevitably my colleagues have had to work harder to cover tasks which ordinarily I would probably have done. This has been going on for nearly two months now. I hope (oh, how I hope!) that this will settle down and subside, and soon.

At least one bright spark has suggested that the simplest solution would be to stop taking the hormones. Hmmm... I politely informed them that a suggestion like that betrays a lack of understanding of what impact Gender Dysphoria has on someone who has it. I'm not doing this on a whim, or because I get a kick out of wearing women's clothes. I spent years trying to live with the condition without pursuing gender reassignment surgery, and failed miserably. Just how miserably I'll probably record here over the next few months. For now, let me say this; gender reassignment surgery and legal recognition of my status as a woman represents two things to me. The chance to live the last years of my life with the contentment that was denied me up to now; and the last chance of avoiding the end result of Gender Dysphoria in someone who doesn't (or can't) deal with it. And I choose the possibility of life rather than the certainty of an early grave, thanks all the same. If the memory problems persisted, and I had to choose between hormones (as a precursor to gender reassignment surgery) or regaining sufficient faculties to work as I used to, it wouldn't really be a choice.

Bleurgh... not a very upbeat conclusion to this post. Onwards and upwards, I say!

This blog has been migrated to new software on a different server (http://www.multidimensional.me.uk) and comments on this post on *this* blog are now closed. All existing comments have been copied to the equivalent post on the new blog. If you still wish to comment on this post, please use the equivalent post at: http://www.multidimensional.me.uk/

Read more!

How I earn my corn

I work for Exony; I'm not entirely sure what my job title is, as such things aren't too important around here (one of many things about Exony I like). I spend my time working on database and data warehouse design and implementation issues around our reporting and analytics product. So, Microsoft SQL Server 2000 and Analysis Services are the primary products I work with, with a current emphasis on T-SQL, MDX and a side-order of XSLT. I get a real kick out of solving difficult conceptual problems with those tools, and coaching my colleagues in doing the same (another of the great things about Exony is the technical skills of the people I work with; it's really satisfying working with bright, motivated people).

We tend to have overlapping skill sets, so I'm not the only person who writes SQL, for example (although I'm pretty sure I'm the only one here who enjoys writing MDX!) but we tend to have individual specialisations or preferences. To my mind, this is a two-edged sword; sometimes, we know just enough to get ourselves in a tangle. For example, it's one thing to be able to write a SQL SELECT statement; it's another thing to realise how to write a SELECT statement in such a way that it performs well and doesn't soak up unnecessary system resources; and it's yet another thing to understand the role of objects like indexes or partitioned views in really making them fly. Consequently, part of my role is to identify and promote best practices for the areas in which I specialise, and to keep a watch out for sub-optimal code in our databases.

My background is in OLAP and Business Intelligence, and the primary attraction for me in joining Exony was being able to bring that experience to the evolution of a SQL-based reporting product into a much more powerful analytical product. I suspect that part of my attractiveness to Exony was that I had designed and implemented multiple OLAP solutions previously (albeit not in the telephony arena) and so could jump-start the incorporation of OLAP technologies in our products. Before that could happen, however, I helped to solve some issues around replication and performance in the previous (non-OLAP) version of the product. Once development began on the analytical product, my time was split between designing the new system, and teaching my colleagues how to work with the new stuff.

Prior to Exony, a significant part of my time was spent teaching developers and analysts how to design, build and manage enterprise-strength data solutions. I really enjoyed the satisfaction of seeing the light go on in my students' eyes when they "got it". Currently, I don't perform such a role externally (and truthfully, I really miss it) but it's a conscious decision on my part not to at this time. Which makes the internal skills transfer element of my role particularly satisfying and important to me. As far as I'm concerned, if I'm the only person who knows how to do something, or am the only one with the skills / experience / confidence to tackle a particular issue, then I've failed a significant part of my responsibilities.

How does one measure "success" in a role like this? Well, quantitively, success for a software development company like Exony is indicated by sales. We need to constantly bear in mind that we don't design software for the sake of it, or as an academic or artistic exercise; we need to sell product and associated services. If using a particular technology like OLAP didn't translate into sales (both incremental sales to existing customers, and sales to new customers which previous versions would not have secured) then the exercise would be a failure. On that basis, I feel we're successful. Qualitatively, I knew I'd cracked it when all the jargon of OLAP was being used by one of my sales colleagues in his sales pitches, AND he was using it correctly! ;-)

This blog has been migrated to new software on a different server (http://www.multidimensional.me.uk)
and comments on this post on *this* blog are now closed. All existing comments have been copied to the equivalent post on the new blog. If you still wish to comment on this post, please use the equivalent post at: http://www.multidimensional.me.uk/


Read more!

Wednesday, October 06, 2004

"Non-Genetic Woman"?

So, what exactly *is* a "non-genetic woman"? It's the best way I can describe myself; emotionally a woman, but stuck (for now, but not forever) in a male body. Someone for whom the terms "Gender Dysphoria", "Gender Identity Dysphoria" or "Gender Identity Disorder" aren't just subjects dealt with on TV in shows like Jerry Springer's.

I wasn't going to write about all this; no, seriously, I wasn't! I told myself that no-one else would be interested in my feelings and experiences as I progress towards the goal of womanhood which is so important to me; that I was too private a person to commit those same feelings and experiences in a medium which others might read; and that I didn't need to have a record for my own purposes of what has happened (and will happen) on this journey.

However, I now realise that each of those objections is shaky, at best. Firstly, I know that others are interested, because of the surprising number of friends, colleagues and acquaintances who ask me "Are you keeping a diary of all this?" And some of those people have persuaded me that even people I don't know might welcome a record such as this; particularly, people who are directly experiencing the effects of Gender Identity Dysphoria (whether as someone who has it, or as someone close to someone who has it). To those who are interested, I say welcome, stay and read for as long as you like. I make no claims that anything I write here will be useful (or even interesting) to anyone else, but... you never know.

As for being too private to commit my experiences to the public domain, well, I may live to regret writing this! But the fact is, I'm no longer ashamed or afraid; either of what I am, or of what I am doing to deal with what I am. So it's hard to see why I should fear to write down what I have undoubtedly said to more than person on more than one occasion. I'm way past the point of fearing that other people might use some of this information against me or those who matter to me. Besides, I'm hopeless at keeping in touch with people; if someone wants a quick update on what's been going on since last we met or talked, I guess I can always point them here!

On the off-chance that some of what I write here maybe useful to someone else travelling a similar path, I may occasionally give some details that are pretty explicit (although never pornographic) about the medical aspects. I'm going to adopt the practise found in Usenet support groups of prefacing the title of posts containing such information with [SP], standing for "Spoiler"; if you read something you find distasteful in such a post, well, don't read this blog.

As for using these ramblings as a personal record; I believe that nobody's memory is perfect, and I know that mine isn't! (Especially at the moment, but more about that another time.) And such memories as we do have tend to alter, merge or fade over time; and our recollections can be coloured by how we felt at that time, or how we feel now. So, if I record what happens and how I feel about it, then the words stand as a record of how I felt in the moment. When I look back over them after the event, I hope it will be harder for the mischievous side of my personality to deny, downplay (or exaggerate) anything that actually happened on the way.

I'm making a couple of rules for myself, though. What happens to me isn't just about me; other people are a key part, for good or ill, of what has happened and will happen. So part of these writings has to be about them. And since I want to be able to recall, long after, exactly who said or did precisely what, I'm going to refer to them by partial name (normally, first name). I hope none of them will object; I can't imagine why they would. But if anyone does object to being identifiable (even if only to themselves) in here, I will either anonymise or remove the references to them. And that is the only act of editing I will allow myself. As my work colleagues know, I am vehemently opposed to "rewriting history", so I don't propose to rewrite my own.

So, I'm going to write about what happens to me on my journey. But that journey has already started, so along the way I'll probably fill in some of the back-story to give the innocent reader a framework to build on. To draw a line in the sand, in a couple of weeks I'll have been living and working full-time as a woman for a year; I've been taking hormones for about three months now (and I'll have plenty to say on *that* subject in other posts!) and, all things being equal, will be having gender reassignment surgery (colloquially, a "sex change") in about a year.

This blog has been migrated to new software on a different server (http://www.multidimensional.me.uk) and comments on this post on *this* blog are now closed. All existing comments have been copied to the equivalent post on the new blog. If you still wish to comment on this post, please use the equivalent post at: http://www.multidimensional.me.uk/

Read more!

The nice thing about standards...

... is that you have so many to choose from.

The annoying thing about standards is when the one you would like to use is not supported when you would like it to be... blogger.com produces Atom news feeds, but not RSS; my reader (at least, the version of it I used when I originally wrote this post) doesn't support Atom. So, in order to check that this feed works in my own reader, I have to either a) change my reader; b) upgrade my current reader (a chargeable upgrade, and my budget is tight this month); c) use a different site; or d) use a service to translate the Atom feed into other formats (including RSS).

So, option d) it is. A multi-format feed (courtesy of FeedBurner) is here. I've put a link to it in the sidebar. Even if you're familiar with blogger.com (and can guess what the Atom feed is called) if you want to link to a feed for this blog, I recommend you use the FeedBurner feed, because if or when I move this blog, that feed will remain valid.

(For those of my potential audience for whom this post is so much gibberish, a feed reader allows you to be notified when new posts have been made to blogs such as this, without having to manually check the web page. For a selection of readers, take your pick from any of these. Personally, I'm now using RSS Bandit.)

This blog has been migrated to new software on a different server (http://www.multidimensional.me.uk) and comments on this post on *this* blog are now closed. All existing comments have been copied to the equivalent post on the new blog. If you still wish to comment on this post, please use the equivalent post.

Read more!

Tuesday, October 05, 2004

Welcome

Actually, this is my third attempt at a blog; the first one was little more than a clipboard of interesting (to me, that is) stuff that I'd stumbled over on the web, while the second was designed for in-house consumption by my colleagues at my employer. However, spurred on by the sterling efforts of those same colleagues, maybe this blog will count as "third time lucky".

I'm going to write about what interests me; which is basically work-related stuff and, erm, "personal stuff". The former will reflect my interests in most things database, data warehouse and analytical, while the latter... well, you'll see!

So, as a public health warning, if you find the contents of one of those categories less appealing than the other, then all I can say is, don't read those posts. My colleague James Snape advised me to "blog as if no-one is reading", so that's what I intend to do.

Just at the moment, I'm waiting for new broadband access and a host which will allow me to use dasBlog software; for now, therefore, blogger.com will suffice. I guess it's better to get writing and sort out the furniture later, than wait forever for the optimum environment and never get anything done.

That'll do for now; but, as Arnie said, "I'll be back"...

This blog has been migrated to new software on a different server (http://www.multidimensional.me.uk) and comments on this post on *this* blog are now closed. All existing comments have been copied to the equivalent post on the new blog. If you still wish to comment on this post, please use the equivalent post.

Read more!