Category Archives: Career

Event Sourcing Or, How I Learned to Stop Layering And Love the Event Log

Earlier this week, I had my first opportunity to present at a local conference, Prairie Dev Con. D’Arcy puts on a fantastic event, well organized, and full of great speakers. The hardest part is realizing you missed out on a great talk, because you were in another great talk. I met a lot of great people, learned some new things, grew my reading list of blogs and books, and came away with another great experience. I’m looking forward to the next one already (I just need to figure out a presentation topic).

For those who attended my talk, thank you. I look forward to reading the feedback that was left after the session. And for those of you who missed out, here is a slightly older recording of my talk, as well as a link to my slide deck.

Yet another “Books you should read” list

These lists are everywhere, every blogger at some point puts up there list of “must read” because … because they’re important. Some of the best books I’ve read have been off people’s lists. When you look at a few dozen lists, you notice the same books over and over and over…and you realize, “I should read this book!”. If all these people I respect and follow are recommending it, it must be worth reading. So here’s my list, with commentary, hopefully containing some suggestions that you haven’t already read, and enjoy when you do.

  1. Pragmatic Thinking and Learning: Refactor Your Wetware

    This book literally changed the way I think about my day. Lots of examples about how your mind works, tricks to help you let your mind solve problems for you in the background, and why. It generated a lot of interesting discussion at during our companies book club meeting.

  2. The Phoenix Project: A Novel About IT, DevOps, and Helping Your Business Win
  3. This is probably my favourite book on the list, it describes a fictional company that has horrible internal practices, and one employees attempt to change that. It feels so real, and I can relate so much of the story to places I have worked. It offered some insights into how we can affect change for the better in the companies we work for.

  4. Clean Code: A Handbook of Agile Software Craftsmanship

    A great book that changed how I write software. It really brought refactoring, and proper program structure to the front of my mind. Before reading this book, I didn’t realize how bad a programmer I really was. I got things done…but not as well as I could have.

  5. The Clean Coder: A Code of Conduct for Professional Programmers

    Along the same lines as Clean Code, but this book isn’t about writing code, it’s about how to be a professional in the workplace. How and when to say no. How to estimate, and when not to. It confirmed many of my practices, and caused me to understand better some of the mistakes I’ve made in the past.

  6. Dreaming in Code: Two Dozen Programmers, Three Years, 4,732 Bugs, and One Quest for Transcendent Software

    This was another great story, the author’s original intent, was to follow this company as they created a piece of softare and document how great people can write revolutionary software…however, that’s not quite what happened.

  7. Leaders eat Last: Why Some Teams Pull Together and Others Don’t

    This book isn’t about tech at all, it’s about what makes a good leader, and why. It goes into a lot of detail about the chemicals in your brain, when they are released, their short and long term effects, and why we’ve evolved to have them. It generated a LOT of fantastic converstaion in our book club meetings.

  8. The Drunkard’s Walk: How Randomness Rules Our Lives

    If you’re interested in math, and statistics, you’ll enjoy this book. Great stories and examples helping to understand how randomness works. And some history about statistics, and how we generally misinterpret so much of what we see because we don’t understand how to properly calculate the probability of something happening. The math is also, very easy to follow, it’s not big complicated formulas.

Now for a couple books that have nothing to do with IT, they are just so great that you should read them. They should appeal to the same crowd as the above books, as everyone I know who has read them, has LOVED them.

  • The Martian: A Novel

    I read this book in the span of 24 hours, I started one evening, was done the next. It’s gripping. The first lines of the book are “I’m pretty much fucked. That’s my considered opinion. Fucked.” It’s written as a journal, as a person keeps a log about being stranded on Mars. It’s about the struggle to stay alive after being left for dead when a sandstorm forces the rest of the crew to evacuate.

  • Ready Player One: A Novel

    If you grew up in the 80’s this is a must read. It’s page after page of 80’s movie, video game, and television references. Every paragraph takes you back to your childhood (or whenever you were alive in the 80s). And it’s all wrapped in a great story set in the real world in 2044 after a global energy crisis; and in a virtual world, the OASIS. Once I picked up this book, I could barely put it down, I think I’ve only read The Martian faster.

I hope you read or have read these books and enjoy them as much as I have. Let me know in the comments, if you have recommendations for further reading, I’d love to hear them! There’s so much out there it’s hard to find quality.

Have a great day!

Attention Conference Organizers…we’re not all novices!

Over the past few years I’ve been focusing on my professional development (PD). I left a company where I was gaining nothing but stress, to a great company that actively promotes PD. They provide every employee with their own PD budget, they sponsor events, and some of their employees speak and organize conferences.

However, most conferences have one flaw. They focus on exposing people to new technologies, but most sessions stop there. Exposing me to something new is wonderful, it’s great… “but maybe” we can do better. I recently attended a conference in Las Vegas, it had an all star line up of speakers. But sessions were quite short, and the technical talks were so introductory that they were basically useless. They equated to ten minutes of tutorials on the web. If you had never seen or heard of the topic, they at least exposed you to it and gave you a new search term to learn more, but they were incapable of going further.

There was a lot of Twitter praise for the conference…but having been there, I know a large portion of the people there were novices or senior people who no longer actively develop and thus, were effectively novices. The few of us who are actively developing were underwhelmed and dissapointed, and while our company sent 6 people to this conference, I don’t see any planning to attend the next one.

I did however find a lot of value in the full day workshop before the conference. It was able to deliver an intermediate level of complexity. You learned a bit about what could and couldn’t be done with the tech. And had enough information to make a preliminary decision about using the tech in upcoming projects without a bunch more self learning.

I think conferences need longer sessions, and to try and provide more value to intermediate and expert skilled attendees. I have been talking with an organizer of an upcoming local conference. And the plan is longer sessions, more workshops, more value to the non-novice. That’s not to say intro level sessions won’t exist. They will, and they are needed, but they will happen prior to any advanced talks, and the session notes will point out the correlation between the talks. That attendance to the advanced talk should be proceeded by the intro if you have no prior exposure, etc.

Hopefully things go well for the organizer of this conference, as I’m excited for the new format. I’ve always found this conference worth attending, but one of the goals of it has been keeping it low cost. Had I spent the same money I did to travel across the continent, I don’t know that I would have felt the same way.

I’m hoping to find conferences that can truly provide some educational value beyond exposure. Maybe I’m just asking for too much.

Do your job…take my money!

So, my girlfriend is trying to buy a new car. Upgrade her aging civic for a small SUV. After a few test drives, a Honda CRV is top of her list.

So we head to the one dealer because she wants me to test drive one (she already has). What transpired was the single worst job of sales I have ever witnessed.

We enter and a few salesmen are chatting. One walks over. We get through the introductions, and he asks what we’re looking for. “I’m looking to upgrade to a CRV EX or EXL”. He leads us to his desk and looks to see what they have in stock. They have one, so far so good, and he heads off to find it.

Comes back, “sorry, it’s sold” … silence.

“Can you check the other dealers in your group? Do they have any”, my girlfriend asks.

“I don’t think so, they are pretty much all sold out, making room for the 2014s” he mumbles, but finally leaves to check after we insist he does.

While he’s gone we’re reading what they have in stock, since it’s up on the computer screen. They have a bunch of touring edition, one has been in stock for over 250 days. I think, perfect, if they are making room for the 2014s, maybe they’ll deal on one of these that’s just sitting there taking up space.

He comes back and tells us there are only two left in the province. Which I know is crap, we’ve called around, and we walked a bunch of lots on the long weekend when they were closed. But he tells us we could write up a deal on one…but he can’t guarantee it…because they have to do a dealer trade. It’s difficult, bla bla bla…

So, “What about the touring edition? What’s your best price on one of them?” He pulls out his calculator…basically adds the taxes and fees on. “$43000”

“Seriously? Sticker price, you can’t do better?”, “What’s the best you can do?”, etc, nothing, he finally comes down a grand. But won’t go to his manager and see if he can do better. Shit, pretend to talk to your manager. Anything. Make it look like you’re trying to make a sale. I’m frustrated and say “let’s go to a different dealer”. We leave, he still makes no effort to make a sale.

So we head to Ford to check out an Escape. I’m still annoyed, so call the Honda dealer and ask for the sales manager. I relay the story and explain it was the worst experience I have ever had buying a vehicle and if I was the manager, I’d want to know if my employees were that useless…you probably think you know what happens now, but you’re wrong.

The sales manager just says “That doesn’t sound like him, I’ll talk to him. Thanks.”

And that’s it…you’re the Sales Manager, a customer left, angry, with a horrible experience, you’re supposed to say “I’m sorry that happened, come back, asks for me, my name’s whatever, I’ll deal with you personally, and we’ll try and work something out”

So now I’m thinking of calling the General Manager, not because I think she should buy a car from there, but because two levels of your employees have made no effort whatsoever to make a sale. I’d want to know. Your salesman didn’t show us a vehicle, didn’t ask if we wanted to test drive one…seriously? That’s how you sell?

I’d prefer the in your face stereotypical salesperson, at least they are trying to do their job. That I could deal with.

/rant

Prairie Developer Conference – Review

Another PDC has come to an end. Too soon.

Aside from the knowledge, the number one thing I take away from conferences like PDC is a feeling of motivation. I have ideas popping into my head throughout the sessions. I’m adding project ideas to my already long list of ideas. I have a renewed passion for programming.

The second thing I take away, is what I missed. There are so many great speakers, and too little time. Every session is a choice. Do I go to the DDD talk by Belcham? Or Dave Mosher’s talk on AngularJS? And what happens when when the session finishes and you’re excited? You compare notes with a friend who went to another talk, and you BOTH wish you could also have seen the other talk…and sometimes the other two as well!

I went to a few mobile development sessions as well, and while I have always wanted to write an app, I was never motivated enough. I had some ideas, but for iOS, you need a Mac…and then there is that $99 fee. And I’d need to use Objective C…and manage memory? It’s 2013…why would I want to do that. But, tooling has come a long way. And after I click submit on this post, I’m going to start installing Xamarin and get started on my first mobile app. I’m going to write it for Android first and see how it goes. Probably then make a nice Responsive HTML5 app as well, so that iOS, BB, and Win users can still use it…and maybe then I’ll have the extra motivation to get a Mac, and write a native iOS app. And after that…who knows.

There was also a really interesting talk on Hacking Hardware by Donald Belcham…which, coincidentally, gave me a simple hardware idea that can work with the mobile app I’m about to write.

So if you went to PDC, and didn’t learn anything, I’ll be shocked. It’s hard to listen to such great speakers, talking about things they are passionate about and not get caught up in it.

…now I have some development to do.

ps. It’s finally spring in Manitoba, I’m on the back patio relaxing as I write this…I need to work outside more!

pps. Thanks to D’Arcy and his staff, and ALL the sponsors for such a great event.

20 GOTO 10

I was hooked.

10 PRINT "HELLO CAFFGEEK! "
20 GOTO 10

I don’t remember how young I was (under five), but the first time I saw that repeated over and over on the screen, with my name, and nobody repeatedly typing it, a seed was planted. I spent countless hours typing in programs from magazines, and computer books. And countless more hounding my parents to type it for me as they were faster. Games like Face Painter only watered that seed. But it was dormant for a while.

Atari 800XL
Atari 800XL

After the Atari 800XL was no longer a viable computer and had been packed away, I made do without a computer for many years. Unimaginable now. Pretty common in the 80’s. Then, when I was in junior high, fertilizer was added. My parents were able to afford a 286 computer. My dad liked to take things apart and see how they work. So learning hardware and how to upgrade them quickly followed. I built my own computer from spare parts. Shortly after a friend introduced me to Turbo Pascal.
Turbo Pascal
Turbo Pascal 5.0

I spent time writing all kinds of things, little paint programs. Terrain tile models for games that I never built. Small little games, reminiscent of those I played on the Atari as a kid. Even writing my own 3d routines to draw, rotate, and shade objects. Some of these I recently uncovered on some 3.5″ diskettes. Maybe I’ll find a drive and see if I can view my first forays into programming (scary they may be). From then on, there was little doubt about what I would eventually do for a living. And here I am today. Still playing. Still learning. Still amazed.

Where were you? What’s your story?

I’m an Ass because I give a Shit

Developers get a bad wrap for being difficult to work with. We are often percieved as assholes. We don’t mean it, it’s not our fault, it’s how we are wired. We spend our working lives looking for flaws. It’s the only way to build good software. We weren’t always this way. When we started, we were optimistic. We thought everyone was competent. Why would anyone put letters in a field meant to show the price of a product? Why would anyone enter a negative age? We didn’t check for these things. We got burned. There is always someone who enters a value, or uses a program in a way it wasn’t meant to. So, we spent a lot of time writing code that validated input. We thought it was bullet proof. We prevented the user from entering garbage data. We underestimated people’s stupidity. Which reminds of us the “God builds a better idiot” joke. Over time, our applications and programs became more complex. And with more complex programs, came more complex problems. Not only are we having to protect against bad input, but now we have to ensure the application works if someone unplugs the network cable, or the computer crashes, etc. The initial problem is a simple solution, but keeping that solution working in all the uncertainty is the new problem.

What this translates into, is a hyper-critical outlook on EVERYTHING. We choose our words carefully. We point out flaws not just in the systems we work on, but in everything we see. I do this way to much. I’m looking at a small 4″ fan on my desk. Now, first, I find it silly it even needs a sticker on it that shows you’re not to stick your finger into the blades. However, there are two major flaws with this sticker. First, the grate has openings approx 4 millimeters wide. The only people with fingers that tiny are newborns. Now, there are two more issues with that. First, they wouldn’t understand the picture showing the warning. And second, while their fingers would be small enough, they wouldn’t reach the blade. So the picture should really be showing you not shoving something else in, not showing a finger fitting through the grate. The second, and more important flaw to this warning is that the sticker is on the fan blade. The only time you can read it is when the blade poses no risk! When the fan is on, the sticker is spinning and impossible to discern as it rotates at several thousand rpm. It doesn’t bother me that someone did this. It bothers me that several people saw this after the fact, and didn’t see the issues…they left it. So many projects and products suffer from this.

My last job frustrated me to no end. There were literally hundreds of little things that on their own were absolutely insignificant on their own. But they added up. When I decided to leave it was very difficult to explain that there was no one cause, and thus, no way they could actually keep me there. I’d be told to relax, that those things weren’t important, but they were. We wasted so much time and money on these little things, that I could see the huge potential we had wasted because of all these little things that were out of my control. I was an Ass because I gave a Shit. Had I went numb, and not cared, those things wouldn’t bother me. But I cared about what I did. I wanted to do a good job. I strive for perfection and have high standards for myself.

I don’t expect perfection from everyone, but I do expect you to want to improve. I do expect you to care about what you do. It’s not coming from a place of negativity, which it’s often misinterpreted as. It’s coming from optimism. I see the potential, and I want to push people towards it. I want to realize the potential I see. Is that to much to ask? Does that make me an Ass? If so, I’ll wear the label with prid. I’m an Ass.

Change and working conditions.

It’s funny what can affect our ability to be productive. Well, actually it’s not funny. It’s serious. And it’s been studied to death. But it’s funny when you apply some of the changes and realize how drastically a simple change can affect your mood and productivity.

I, as has been mentioned before, recently changed jobs. My current employer is a consulting firm. The offices are nice. While it’s an open area, we’re rarely working at the offices. We’re typically on site. Each site has a different setup. Currently, I’m in a room, slightly smaller than it should be, but with four other devs, all working on the same things. At times it gets a little noisy, but for the most part, it’s quiet. There are no phones ringing. Rarely spontaneous meetings breaking everyones conversation. And we have a window.

That light does wonders for morale. At least for me, since I was so used to having no sunlight for 8 hours a day, and in the winter, when it’s only just starting to get light out when you walk into the building for your shift, and it’s starting to get dark when you leave, having no light during the day is an absolute energy suck. I feel so much better working in natural light.

This weekend I cleaned my home office. It was a mess. It was the room that everything was being dumped in. I should have taken a before picture. But now, after cleaning up and disposing of a lot of the clutter. As well as putting up shelves, and cleaning off the desk, I find I want to use my computer and work on projects at home again.

My last job was so negative that I didn’t even want to touch a computer when I got home. I had lost my drive to learn and try new things. It’s a great feeling when you once again love what you do, and where you work.

I have some big ideas for projects. And I can’t wait to turn them into reality.

The Real World

Typically that phrase is a negative thing. We use it when talking to high school students. How they need to prepare for the real world, where they won’t be coddled and protected by their parents.

However, sometimes we end up in a place that’s the opposite. And the “real world” is a good wonderful place.

I am now employed at a great company. It’s only been a week, but so far so good. It’s a strange feeling not worrying all day about every little thing you do.

Having blockages removed quickly and efficiently.

Being able to work.

I’m once again able to enjoy what I do, and have started a few side projects.

It’s great being in the Real World.

Change is good.

Gandhi said “Be the change that you wish to see in the world.”

It doesn’t just apply to the world, but to our current situations. Change yourself, change the situation. I spent the better part of the past five years at a company that had a toxic culture. Deadlines were arbitrary, and the only motivator was fear. Many of the people in the company however, were good people, hard working, and the archaic rules put in place, we all just dealt with. We’d suffer them, and work around them when possible. Hoping not to get caught, as that would hurt our “bonus”. And complaining when the rules hindered us.

It was like going to a restaurant and putting $10 on the table up front, and telling the waiter/waitress that for every mistake, the tip got smaller. Now, I’ve never worked as a waiter, but I know if someone did that to me, it would be the best $10 I ever never got. You can’t elicit good work through fear. It works for a short time, then people quit caring. We’re all going to make a mistake at some point, but that one mistake costs us…the other 99 times we were perfect got us nothing.

Back to the quote, I tried to change my situation by setting an example. Everything I did was better than the last. I strived for perfection, and set the bar higher each day. While I was busy spending my time, bettering myself by reading and learning all I could, I found it counter-productive to bettering my feelings about where I worked. Trying to use new tools and techniques was near impossible. It took eight months and a talk with the CIO to finally get that whiteboard. I saw the need, we were bad at tracking progress and outstanding work, it would get lost in the shuffle despite the software that was supposed to keep all that in order for us. The software didn’t work because it was to “high-tech”, and not visible enough. It was too rigid. We needed to go low-tech, something visible to everyone on the team, and off the team. Something that was easy to modify when necessary, and easy to keep us on track. It barely got used. The timing was poor. The project was nearly done, the team was smaller, and I was the only one vested in making it work. Had it been eight months sooner in coming, who knows…

That was just one area we fell short, there were so many others. The lack of trust, the constant feeling you were being watched, and the wasted time. It was ironic really, how many meetings I was in where we were told to eliminate waste in our processes. Where we were told to communicate more effectively. However, whenever a mistake was made, anywhere, our reaction wasn’t to teach, and prevent it from happening, it was to add more approvals and sign-offs to the process. Our communication had it’s own rules. We were to use special “abbrev-onyms”. I just made that up, basically we had a dictionary of approved, and very custom, acronyms and abbreviations that we were supposed to use. And when used, they had to be in all caps (abbreviation or acronym). The irony was, nothing was standard to the industry, and it made it more confusing. We had our own special date format…well, two of them since the official one wouldn’t work in file-names. And it was more confusing than a format, depending on how close to today the date was, the format changed. And punctuation, don’t need it apparently. We were to separate thoughts with a dash in our emails, not a comma… odd.

Ultimately, I decided it was time for a change. Despite trying to bring in “new” techniques like Kanban, and TDD, I couldn’t get buy in. Some of the developers wanted it, but ultimately, they didn’t have the time to learn it, and we didn’t spend money on training. So I’m moving on to the other side of the hill, where the grass is greener. Or even if there’s grass that isn’t poisoned it will be a step in the right direction.

My last day came as a shock to a few. Met with curses from those who realized the void my departure would leave. Funny, how they didn’t know I was leaving prior…it had been two weeks. But that was the atmosphere, don’t trust. Don’t communicate. The exact opposite of what was preached. Many meetings with the CIO about why I was going…he promised change. Wanted to keep me. I don’t blame him for trying…I just wish I could have gotten through that it wasn’t money (in fact on paper I’m leaving for less) It was all the little things that added up in a day. When I had a dozen frustrations, and only one or two small victories, the days balance sheet was in the negative. They were all in the negative. Even after I turned down the counter offer, nothing changed. I’d hoped the talks would have had some small effect to better my coworkers situations. I’d hoped that my leaving, despite the hassle it would cause them picking up the workload could have a positive effect on the atmosphere (and I don’t mean just because I’m not there!). I tried to lay my cards on the table. Explain all the reasons. But it’s hard to explain when all you have are a few trivial examples. It’s hard to get your point across when it’s not a single process, or person (there was one that should be fired, however…it would have helped) but when it’s everything, it’s the dozens of small annoyances and roadblocks throughout the day. When everyday feels like you’re in kindergarten.

I’m glad it’s over. Change is good. It’s exciting. And in IT, it’s essential. The new employer looks very promising. All my friends working there, people I trust, extol it’s virtues. Some came from where I’m coming, and can relate. The commitment to education is a big plus. And knowing that many of the employees I’ll be working with are the same people who present at conferences I’ve attended doesn’t hurt. It’s a place where people seem to walk the talk. I start in 11 days…I’m anxious. I needed the break in between to decompress. To get out of the negative head-space I’ve been in these past four and a half years. It was noticed in my interview…and I had to do a lot of convincing that I really wasn’t a negative person, that I wouldn’t bring the team down. I’m excited. I’m normally counting down the days until I have to go to work. I had lost my drive to work after hours, on my own projects. I no longer had fun doing what I loved.

Change is good.