100 Hours In

So far I’ve got 100 hours in as an ED Tech. Actually it’s a bit more since I’ve had to work past the official end of my shift a few times. Now if anyone has done the math and read a previous post, they’re probably curious how I got to the number 100 and why it’s not 96 or some other multiple of 12. The truth is, my normal shift is 12 hours. However, during my most recent 12 hour shift a text went out to all techs asking if anyone was available to work a “Crisis Shift.” I volunteered. Now the down side is, as an orient I’m not eligible for the bonus differential for a crisis shift (which I’ve been told is fairly nice). But I wasn’t doing it for the money. I was doing it for the experience. Normally my shifts are 11:00-23:30 (that includes in theory 30 minutes for a meal). Since this 4 hour shift started at 23:00, it meant I worked 11:00-03:00. Yes, you’re reading it right: I worked a 16 hour shift. This allowed me to experience the ED at a different time of the day than I’m used it. And I will say it was worth it. The overall “mood” is a bit different. It’s definitely a bit quieter.

And best of all, I survived the shift. Granted the next day I resorted to a dose of caffeine between class and lab in order to stay awake, but overall, it wasn’t too bad. On the other hand, if I were 30 years younger, I think it would have been a bit easier to recover from also.

I’ll probably pick up more Crisis shifts in the future, especially once I’m eligible for the Crisis Pay differential since it gives me the experience and pays decently.

Footwear

For my original shifts I pulled out some old shoes to wear. I figured if they got covered in fluids or something I could toss them. Sure enough, on my second or third shift I stepped in something very sticky. I looked down with dread and was relieved to see it was only some apple sauce the patient had spilled.

However, fairly quickly I realized how uncomfortable they were. The one weekend I should have gone shopping for new shoes I didn’t. It took me a few shifts and some thought to realize what the real problem was: lack of arch support. Hence the photo above where I added some impromptu arch support. It was an amazing difference.

That said, this past weekend I picked up a pair of Skechers to wear at work. One big advantage of them too is they’re machine washable. I suspect at some point I may have to take advantage of that ability, but so far I’ve been, apple sauce aside, lucky.

And now off to another shift (and two more this coming weekend.)

And of course the disclaimer that I in no way speak for my employer Albany Medical Health Systems in this post. That said, I do hope not to see anyone of you in the ED any time soon. Drive safe over this break and please do not drink and drive.

Production Code for your SQL database

I realized after writing my earlier post that today was T-SQL Tuesday. I wasn’t going to contribute, but after seeing some posts, I thought I’d give a very quick shot at it. This month, Tom Zika (t | b) asks us to talk about what makes code “production grade”. You can find his full invitation here.

There’s some great columns there, but I’ve noticed something that many developers assume (and honestly, it’s a good thing) and that’s that they work in a company with good source control and a decent release procedure. Sadly, with my clients, it’s rarely the case. Often I’m inheriting code that’s only available on the production server itself, or there’s 20 different contributors (ok I’m exaggerating, but not by much) and each has their own stash of code.

Ultimately this means the production server really the only single source of truth. So that leads me to my first item.

Select * and other shortcuts

It should be obvious, but while I may often use Select * while developing code, I’d never put it into production. Even if it works, it’s messy. But I’d go a step further. I prefer to fully qualify all my columns. For example

select Emp_Num, First_Name, Last_Name, City from Employee_Table

vs

select E.Emp_Num, E.First_Name, E.Last_Name, E.City from Employee_Table E

Now the above is an extremely artificial example. But now imagine I want to join it to say a table of phone numbers (because the original developer was smart enough to realize an employee could have multiple phone numbers and didn’t simply add columns to the Employee_Table.)

So now someone comes along and rewrites the first as:

select Emp_Num, First_Name, Last_Name, City, Phone_Num from Employee_Table E
inner join Employee_Phones EP on EP.Emp_Num = E.Emp_Num

Now, they’re of course deploying to production as they go and suddenly the above code breaks. Fortunately, they’re fairly smart and realize the fix and go in and edit it to

select E.Emp_Num, E.First_Name, E.Last_Name, E.City, EP.Phone_Num  
from Employee_Table E  
inner join Employee_Phones EP on EP.Emp_Num = E.Emp_Num 

So it’s a simple thing, but by making a habit of fully qualifying your column names, you can avoid future errors.

Failing Gracefully

When I’m writing quick and dirty code, while I try to avoid errors of course, I’m not overly worried about leaving the system in unstable state. By this I mean, if I’m debugging code with a cursor in it and it breaks and I have to manually drop the cursor that’s fine. Same thing with transactions. Yeah, I might block someone else’s work, but I’ll pretty quickly realize what I’ve done and be able to commit or rollback my transaction.

In production code, without going into details on TRY/FAIL blocks and all that, I would argue that any code that contains a cursor, a transaction or anything else that could potentially block processing absolutely needs to have robust error handling. I’ll ignore the debate about what the best way to handle it is, in part because sometimes rolling back is the right answer, trying again might be the right answer, or even finishing the transaction and then cleaning up data later. The point is, you can’t afford to fail in an ungraceful way and leave your system in an unknown state.

Alerting

I didn’t have this on my mind when I started out with this post, but the last bit reminded me of it. It’s not code per se, but more jobs and the like. Generally, I’m a huge fan of alerts. If something has failed, I want an alert! But, I realized a long time ago, that alerts have to be actionable. This means the person receiving it has to both be able to act on it and that it actually needs to be acted upon. If something fails and it needs no action (and the action can be as simple as simply noting it for future reference) then don’t bother alerting. Log it or at the very least, retry before you send an alert. Years ago at one client they had a job that would fail once about every 100 days. It ran once in the morning. It had an alert that met the above criteria, I or another DBA could react to it and in this case the reaction was simply “retry the job”. I finally analyzed it and realized that given the failure mode, simply waiting a minute and retrying was a far better solution than alerting us. I did some math on the failure mode and realized that this new setup should cause failure on the second attempt (and then send us an alert) once every 10,000 days. So the initial alert was sort of pointless when there was a better way of handling it.

Conclusion

So, to sum things up: avoid errors, if you do have errors, handle them gracefully, and if you have to alert, ma

“Help me put out the drunk cat”

Just a short post today. The title comes from the little bit of a dream that I recall from last night. It was something my father said in my dream. There’s really no meaning to it more than what it seems. In the dream he needed help catching and putting the very overweight and drunk cat outside. Don’t ask me why the cat was drunk or why it had to go outside (though I suspect that’s a better place for a drunk cat).

Why do I mention this seemingly random line? It’s because it’s an insight into how my dreams of my father have progressed. In my dream I heard my father’s voice. This is very bittersweet for me. Of all the tangible things I miss the most since he’s gone it is his voice I miss the most. For awhile I didn’t dream of him at all. After a while I’d start to have dreams with him in them. They were often variations on discovering that he was actually alive and we had to figure out how to undo selling his estate and all that paperwork. Then my dreams changed a bit and within a dream I’d remind myself that it was only a dream. Then they changed again. This time it was an inner voice telling me, that at least this time it wasn’t a dream. Those were hard to wake up from. But they also all had one other thing in common. He was always silent in them.

That was the hardest, I was forgetting his voice.

That too has changed over time. More often now when I dream of him, I hear his voice in my dreams. I couldn’t tell you what it sounds like and honestly, I’m not sure it’s really HIS voice, but in the dream it seems to be and that’s good enough.

I miss him every day, but some days, it’s his voice I miss the most.

I am in the Right Place

A couple of weeks ago I asked “Am I in the Right Place?” The question will always be in the back of my mind and I think that’s a bit healthy. I think any time anyone gets too sure of themselves, especially when lives are involved, it’s a bad idea. That said, I’ve now done 3 shifts in the Emergency Department (ED) and the answer to my question is “yes.”

In 36 hours I’ve learned a lot. I’ve done at least 2 dozen EKGs and only had to repeat one of them at doctor’s request. I’ve done more than my share of Covid Swabs. I’ve done a psych sit. And one of my fellow techs let me practice a straight stick blood draw on her. According to her I did well (she commented on her lack of bruise the next day). I’ve also done chest compressions. I’ve also sat around with nothing to do. That’s rare and one savors those moments.

I’ve had sore feet and one night as I got into my car my lower back froze and I couldn’t move for a few seconds. I’ve gotten dehydrated because I had forgotten my water bottle one day and it was too long between getting some water. I’ve snacked on the run (fortunately however, as an orient, I’m in theory guaranteed an actual food break which I’ve taken advantage of so far, but once I’m beyond orient status that may no longer be available).

I’ve worked to 2 12-hour shifts back to back and then gotten up on the 3rd day to make it to A&P Lab after only 6 hours of sleep.

But, though I’m only 3 shifts in (and about to run my 4th) after the first night I was confident I’m in the right place. I’m gaining confidence in my skills and abilities and I’m earning the trust of my colleagues. And at the end of the day, I’m enjoying what I’m doing. At least so far. We’ll see what I’m saying in 6 months or 12 months.

But at the end of the day, so far, yes, I think I’m in the right place.

And now the obligatory disclaimer that I do not speak for my employer Albany Medical Health Systems and my views are entirely my own.