New Course: Building Software That Lasts – A Guide to Maintainable Software

June 2nd, 2016

Will your software outlast the original developers? Almost certainly yes. But will you be able to maintain it?

That’s one thing about being in the software development business as long as I have – you gain a very healthy respect for the value of maintenance. Sure, the studies all show that maintenance costs 50%-80% of the total life-cycle cost of software, but there’s nothing like living through the entire life-cycle of multiple software projects to really understand that.

You spend a lot of time thinking about what you might have done earlier on to make life easier now.

Which is why my latest Pluralsight course, Building Software That Lasts – A Guide to Maintainable Software, is perhaps the most important course I’ve published. If not the most important, it’s certainly the one with the greatest potential to have a real impact on the cost of software.

This is not a theoretical course full of recommendations that sound great, but never put into practice. This course was born from pain – and the sure knowledge that in many cases, especially in today’s fast paced development world, maintenance and maintainability is the last thing on anyone’s mind, or in anyone’s budget. So while yes, I do discuss best practices, I spend a lot of time focused on processes and practices that are simple and cheap – and that might actually get done even when budgets are tight and speed is of the essence.

So I invite you to check it out and tell your friends. Even if you just pick up a few ideas, they’ll be worth it – that’s the thing about maintenance: a small investment now can save you a fortune in time and effort later on.

A Pluralsight Campfire Tale

July 27th, 2015

As one of the authors who has a course featured as one of the 36 Camp Pluralsight courses, I guess that makes me one of the camp counselors. And since it’s a camp, and this week’s challenge is sharing a story, it seems to me the perfect time for that age old camp tradition – telling stories by the campfire.

So gather up your blanket, grab your S’mores, and listen as I tell you about the terrible incident of the random cubicle, that happened RIGHT HERE AT CAMP.

It was shortly after he finished the course Careers in IT: How to Get Your First Job that he was assigned his first cubicle. He was thrilled to finally have his own stapler, and eagerly spent his first days connecting with his fellow employees using Practical Networking. He quickly became popular, well known for posting pictures of how his coworkers might look years from now using the skills he learned with Age Progression in Photoshop.

He may have lived out his career in happiness, had he not been injured one day during a Docker Deep Dive, shattering his little finger in the process. Swearing vengeance on the world for his painful Introduction to Virtualization, he became a developer.

It was then that workers became to quietly vanish, one by one. Developers who had built their skills taking C# Fundamentals with C# 5.0 were disposed of efficiently with IDisposable Best Practices for C# Developers. Even those who prepared to defend themselves with Tactical Design Patterns in .NET: Managing Responsibilities were quickly gulped into oblivion using JavaScript Build Automation with Gulp.js. Some tried to dodge his attacks using Agile Fundamentals, but they too fell parallel to the others into C# Concurrent Collections in the nearby graveyard.

Finally, nobody was left. Just an empty office, each cubicle silent, with dust building slowly on the desk and stapler within.

And you, here at camp, may think you’re safe sitting around the fire. But don’t be so sure. Not only is it dangerous to light a campfire in an office cubicle, but what you don’t know is that the killer, the one who caused everyone to vanish, started his path of mayhem in THIS VERY CUBICLE!

Hahahahaha!

Run! Run! Your knowledge won’t help you now – it’s already become obsolete. Your only hope is to quickly take Learning Technology in the Information Age and maybe you’ll be able to find a different job in a different office for more money. At least until he, or someone like him, strikes again!

New Course – The Future of Technology Careers

May 16th, 2015

What technologies will you be working on a decade from now? Will you even be working in tech? Do you even think that far ahead?

Most of us don’t. There’s this assumption that because technology changes so quickly, long range career planning in technology is futile. So our careers are driven by the opportunities of the moment and happenstance, rather than by any real long term thought.

But it turns out that long term career planning is possible, even as the pace of technology change increases. Not only is it possible, it’s a crucial part of any technology career, for all that it is neglected.

My new Pluralsight course, “The Future of Technology Careers” can help you to start applying long range planning to your career – to think about the future in new ways.

And if that doesn’t convince you to watch it, allow me to point out that it is the only Pluralsight course to seriously address the potential consequences of a Zombie apocalypse on software development. How can anyone say no to that? Remember – you can sign up for a free trial on their web site, so what are you waiting for?

A Different Kind of Programming Course for Kids: The Back-story

February 3rd, 2015

About a year and a half ago, Pluralsight put out a call for programming courses targeted for kids. I couldn’t resist the challenge, and the resulting course “Amazing Things You Can Do With a Web Browser (And a Bit of Code)” is now available for free viewing on Pluralsight.com.

It’s not your usual kid’s programming course.

I know what a beginner’s course is supposed to look like. You start by teaching the most basic concepts and then build on them step by step. You add interactivity – things they can try and experiment with along the way. And that is a good solid approach – especially for kids who want to learn programming.

There are lots of great courses like that already. I wanted to do something different. In particular, I wanted something that might appeal to kids who weren’t necessarily interested in learning programming.

Every educational expert will tell you that the way kids learn best is through play. Personally, I think that’s the way adults learn best too, but that’s another subject.

When kids play, they do not start from basic concepts and build on them step by step. They go straight for the goal and fill in the blanks, making them up as needed. They don’t lecture each other – they engage in conversation and argue with each other. They like to mess with each other, prank each other. And they are much more interested in listening to other kids than to adults.

So I thought to myself, how do we make a course playful – the way kids really play?

I knew I couldn’t do it myself. I can have all kinds of theories and opinions of what would appeal to kids, I could even do market research – but I can’t really know it personally. I may have had the vision, but the kind of course I had in mind could only be created by a kid. A really smart kid.

Now those of you who have read my book “Developing Teen Leadership” know that I’ve volunteered for many years as a youth group advisor. Over the years I’ve met a lot of smart kids who were into programming – and let me tell you, the list of companies they work for and titles that they now hold would blow your mind. So I looked at our current membership and who was into programming, and had a chat with a 14 year old named Tom. We chatted, brainstormed and pitched the idea to Pluralsight, and they bravely decided to give it a shot.

The (long awaited) result was “Amazing Things You Can Do With a Web Browser (And a Bit of Code)”. The format is a conversation between Tom and me. Tom is the teacher – I am the student. The examples are… well, playful. We have a talking pirate. A geek test. A cool way to prank your friends. We make mistakes along the way and fix bugs as they come up.

This course is not the final word on kids programming courses. It’s not better that what exists. It’s different. An experiment – hopefully one that will inspire other innovation in this space.

One final thing that I want to make clear. While the original vision for the approach may be mine, the content of the course is Tom’s. We brainstormed the project ideas, but he had the final say. He wrote all of the samples. I did not tell him what to say. He really is the teacher of the course, and I had a lot of fun being the student.

New Course: The Dark Side of Technology Careers

January 6th, 2015

Have you ever noticed that most discussions of technology careers are almost relentlessly positive? Studying technology is portrayed as a guaranteed path to a great high-paying job, sometimes at a workplace that offers all the luxuries of a high-end resort. Courses on tech careers, including my own, reflect this in a way – promising to teach skills that will let you take full advantage of the opportunities a tech career offers. When we talk about our careers we tend to focus on the cool projects we’re working on.

Most people in technology do have pretty good careers, but that’s a far cry from “happily ever after”. Bad things happen. People get laid off, projects get cancelled, and companies fold. There’s politics, interpersonal conflict and various forms of discrimination and unfairness.

Bad things can happen in any career. But we in technology often seem to be blindsided – caught by surprise when things go wrong. The focus on technology, and the positive outlook we find in schools and books and courses doesn’t prepare us for reality.

My latest Pluralsight Course “The Dark Side of Technology Careers” sets out to change that. It’s about the challenges, obstacles and traps that almost everyone faces sometime in their career – how to spot them, avoid them, overcome them, and if necessary survive them. It’s about the things that we, who have been in the industry for a while, learned the hard way – the things we wish we had known starting out.

Those early in their careers will find this course an invaluable map through previously hidden career minefields. Those well into their careers will discover that they are not alone in the challenges they face, and will likely discover some they had never considered.

I invite you to sign up for a free trial to watch it on Pluralsight if you aren’t already a subscriber.

New Course: Data Visualization for Developers

April 26th, 2014

I’m pleased to announce my latest Pluralsight course “Data Visualization for Developers”. In this course I cover the fundamentals of data visualization that every developer should know. The course goes beyond the basics of charting to cover data visualization architectures – an essential element on today’s world where data, analytics and rendering can be distributed across multiple servers and cloud services.

Check it out at pluralsight.com

So long, Windows XP

March 29th, 2014

Part of being in the software development business is that sometimes you have to support software for a long time. Longer even, than Microsoft does. So the fact that XP is about to become an unsupported unsecured target of every virus and botnet in the wild doesn’t change the fact that I need to keep it around as part of an old build system.

But, that doesn’t mean I need to keep it around as real hardware. So, it’s time to say farewell to that old Sony Vaio – one of the finest and quietest old Pentium machines I’ve owned. Its soul has been removed – virtualized – leaving behind an empty hulk of hardware with, get this, the last of the old tube monitors.

Its spirit will live on, joining a virtual community of old Windows 2000, Windows 98 and Windows NT build systems. Waiting in limbo for the possibility they’ll be called into action again to support a customer running some ancient legacy software.

The Most Common Question

January 2nd, 2014

I’ve been asked a fair number of questions of the years, but there is one in particular that I tend to hear over and over again, and ironically, it’s always been the most difficult one to answer.

The question, for any given topic, is a variation of  “Where do I start?” or “Can you recommend a good beginner’s book?”

Now, I’ve been writing books for many years, and publishing courses on Pluralsight for over a year – not to mention learning technologies on my own, so you can imagine that this is a question in one that I care about very much. Yet I’ve always found it difficult to answer – because by the time someone asks me the question on a given topic, I’m usually well past the beginner stage and don’t really know what the best beginner’s resources are at the moment.

It’s only recently that I realized that resources aren’t the problem. The problem is that people are asking the wrong question. Beginner’s don’t need learning resources – they need learning strategies. Advances in technology have radically changed the way we can and should learn technology, and I’m not talking here about online resources and courses. Technology is beginning to fundamentally disrupt education, and it’s time to look at education in a different way – one that understands and leverages resources in a way that varies by individual and by the technology being learned.

That is the subject of my new Pluralsight course “Learning Technology in the Information Age”. Its purpose is to change the way you look at learning a new technology in order to make that learning more efficient. To help you to think carefully about what you want to learn, why you want to learn it, and what types of resources to choose and where to find them. In short – to design your own learning path before you start diving into resources. It’s a lot like designing software before coding – and we all know to do that, right?

I encourage you to take a look – Learning new technologies is a challenge we all face every day, and the time you spend on this short course may pay off many times over in time you save learning technologies going forward.

Adventures with Motorola – The Sequel

December 16th, 2013

Last week I referenced Motorola in two posts, concluding with the observation that they, unlike Salesforce, are not a “customer company”. This after their complete fiasco on cyber-Monday with regards to their $150 off promotion for Moto X phones.

One person pointed out to me how their CEO apologized for the events of that day, and their decision to double the number of available phones and offer them on two other days as an example of how they really are a “customer company”.

In all fairness, I agreed that Mr. Woodside’s apology was the right thing to do, and it was appreciated. At first I was less than thrilled by the offer to double the number of devices, as it didn’t seem it would fundamentally change the lottery nature of the offer, and thus potentially offer nothing but more frustration to those who tried to take advantage of the offer on Monday. However, I was very pleased to see that they changed the mechanism of the offer so all you needed to do was sign up for the discount – meaning that those who were aware of the new dates and showed up on time were virtually certain to get a discount voucher – it took about 9 minutes for them to run out.

Did Motorola make that change to make things better or more fair for those who were frustrated Monday, or because it was a necessary technical solution to scaling up to handle the anticipated traffic? I suspect the latter, but I’m willing to offer the benefit of the doubt, as both goals were accomplished.

But, despite this, Motorola is still not a “customer company”. Let me tell you why.

I ordered a phone after receiving the voucher. The next morning I received an Email that my order had been cancelled, with no reason – just a number to call if I wanted to find out why.

I tried their online chat support, but the person there could not help – they had no access to the necessary information.

So I called – it took about 5 minutes to connect me to an agent. It then took the agent about 10 minutes to research the problem – it turned out that the address I specified as the shipping address did not match the billing address, so the order was automatically cancelled. I use one of those mailbox places to receive packages – it’s more secure. Now I’ve seen sites where there were warnings that choosing a different shipping address might delay delivery because it requires additional verification. I’ve seen sites that don’t allow different billing and shipping addresses in some cases. But this is the first time I’ve just seen an order cancelled. Why was there no warning during purchasing? Why was there no reason on the cancellation Email, forcing me to call in?

And what about the discount voucher code? Could it still be reused? It took the agent more time to research that, and then transfer me to the department that could issue me a new code. Except that they couldn’t – they had to open a case that required management approval to issue a new code – and they would call me back within 24 hours. That, of course, did not happen. They called back in 48 hours saying that a case had been escalated to management to request a new code. This did happen, several days later, leaving me just one day to use the code before its expiration date.

This is why Motorola is not a customer company. Their support staff are wonderful people – they were very nice and worked hard to solve my issues. But they clearly are not empowered to make things right, and they don’t have the tools to do so quickly – I was on the phone for over half an hour for what should have been a very simple process.

If they were a customer company, I would have received a call or Email before the order was cancelled explaining the issue and offering me options. If they were a customer company, they would have been able to reopen or replace the order to my home address, or even the mailbox place once I called. If they were a customer company they would have been able to reissue me a discount code on the spot.

You may wonder why I keep harping on this. It’s not because I hate Motorola. On the contrary – my current phone is a Motorola Droid Razr and it is a great phone, and I finally got my hands on a Moto X despite Motorola’s best efforts. And so far, it seems to be as amazing a phone as I was hoping it would be. Motorola is a technology company, and like many, I’m willing to put up with a lot of hassle to get great technology. But I shouldn’t have to. And I hope someone at Motorola will read this and realize that if they want to be competitive with the Apples and Samsungs in the world, they’re going to need more than great technology – they’re going to need to become a customer company as well.

So that’s what it means to be a customer company….

December 2nd, 2013

At Dreamforce there was quite a bit of talk about how the Salesforce platform can help any company to become a “customer company”. Frankly, I paid little attention – to me it sounded like typical marketing speak – a cliché intended to sell something.

Today Salesforce announced the results of their hackathon investigation, and while it’s interesting, what really struck me was the contrast in the process that took place there as compared to another experience I had today with Motorola as I tried to purchase a phone.

For those who aren’t aware, Motorola had announced a Cyber-Monday sale on their Moto X phone, discounting the non-contract phone by $150 starting at 8am CST. When morning came, their website did a complete melt-down. And while a site melt-down isn’t the same thing as a disputed hackathon, both represent a public facing crisis of confidence – raising the question: can you trust them?

When Salesforce faced this crisis, it took very little time to see a real response that basically promised an investigation. And that response didn’t come from an anonymous twitter account; it came directly from the VP of Developer Relations and the CEO.

Motorola’s response so far, to put it bluntly, has been awful. Even as hundreds or thousands of customers tried to purchase phones, there was virtually no communication other than to state the obvious – that the site was down. All day, potential customers asked on twitter, forums and Facebook for any information, and as they day went on, more and more of them announced their decision to switch to other phones, and promised never to buy from Motorola again. It was hours before there was even an apology. Only at the end of the day did Motorola announce that they will try again and increase the number of phones available, but even there – it meant nothing, as nobody knows how many phones they were going to make available in the first place.

I read the results of the Salesforce investigation. Personally, I accept it as accurate. This is partly because I know many of the people involved, but mostly because I believe in a variation of Occam’s razor – that one should never attribute to malice or conspiracy what can be explained by human error or exhaustion. The decision to award a second grand prize to the second place winner was an extraordinary step to avoid a potential injustice in a case where justice could not be determined.

What really struck me was the process. From the very beginning and throughout, Salesforce listened. They paid attention to the developer community and responded – and not just as a faceless corporation, but as individuals, and with reasonable transparency. Contrast this with Motorola, whose every action so far shows no concern for their customers at all – no understanding or acknowledgement of those who woke up early or spent hours trying to purchase a phone, believing that the site might be restored any minute. After, all, it’s tough to imagine or understand how a Google company can so completely fail with a web site over such a long period.

So I end this day with a better understanding of what it means to be a customer company. I think for Salesforce it is more than a cliché – their actions are giving the phrase meaning. Whereas Motorola, based on their responses today, seems to have no clue whatsoever.