Playing a board game with my wife while at the hospital

Posted by steve | Board Games | Sunday 26 January 2014 5:59 pm

I had to take Melissa to the ER Thursday evening and she was admitted to the hospital later that same evening. She’s having pretty severe GI problems and we’ve been here since then and it’s currently Sunday evening.

However we had a pleasant break and managed to play a board game while here. Even though she’s heavily medicated she still won. I blogged about it on my board games blog site.


An iOS tutorial on writing unit tests with Xcode 5

Posted by steve | Apple Software and Hardware | Friday 24 January 2014 2:59 pm

I recently took a few moments and cobbled together a “workflow” tutorial that shows how to use Xcode 5 to write Unit Tests. Apple has done an excellent job in integrating Unit Testing into their iOS and Mac developer IDE. I wanted to write an introductory tutorial that walks through how you write these kinds of tests with this environment.

Here is the new tutorial.

I’ll probably push out updates with typo corrections and maybe some added goodies over the next few days.


Pair Programming Anecdote

Posted by steve | Management & Leadership | Wednesday 22 January 2014 8:41 am

Update: I just realized that Martin didn’t write the original Blog post I reference here. I found it because of tweet he posted. Sorry about that Martin.

This morning I read a Blog post from Martin Fowler, an individual I admire very much professionally. I don’t know much else about his non-professional life except that I know he also loves modern board game designs too. Anywhere here is a link to his post where he contrasts his experiences with Pair Programming teams and Code Review oriented teams.

As many who know me professionally, I’m also an advocate for what Pair Programming can do when it’s done well — having worked in a Pair Programming environment for a 10+ year stretch recently. Because of that experience I have also seen where it brought no value. Like anything else, there’s no simple pill or solution to what is required to be successful, and often you need to by dynamic about your processes because things change. And also vigilant. I’m reminded of Rebecca Wirfs-Brock‘s presentation at OOPSLA years ago where she posted a bumper sticker “Shift Happens”.

My reason for my own post this morning, after reading what Martin wrote, is that I was reminded of an anecdote from back when I used to manage a Frameworks Development team. The company was a substantial software development shop with maybe 500+ developers on site. This was back in the late ’90s. I was introducing the team to the concepts of eXtreme Programming and Agile development concepts such as code refactoring. In fact I purchased copies of Martin’s book on refactoring and had passed them out to all of my team members. We went through the book, reviewing a chapter per week. We also talked about Pair Programming. At the time the overall development shop was anything but agile. There were senior managers so focused on the tactical, seemingly “by-the-minute” costs, that discussion about putting two very expensive ($100K+) programmers together on a single development workstation was a daunting prospect. But I discussed it openly with my team and wanted us to try it out in small “doses” to see how it would work.

One of the senior developers, having been there for easily more than 20 years, totally surprised me by saying “Oh, we do Pair Programming here already sometimes. When the code HAS TO BE RIGHT.” He described a familiar scenario of a team finding a serious defect in the eleventh hour before a software freeze. It was not uncommon that two, often very senior, developers would look over each other’s shoulders as a code fix was made to ensure there was no risk of introducing other problems. When it had to be right, they paired on the code.

I get it. It addressed the problem by providing one of the benefits of Pair Programming: on-the-spot code review by a capable peer. And for that brief period of time no one questioned the cost because everyone implicitly understood the cost of failure was higher.

There’s a lot to think about from that experience.

I want to provide another reference link. This is to a Blog Post from another old friend and code-warrior, Blaine Buxton. He and I worked together several times in our careers, over a span of easily 15 years, and I’m sure the respect is mutual. He wrote an insightful post about the things that can go wrong when Pair Programming is not the answer. I know exactly what he’s talking about, having worked with him on the same team where he experienced the challenges described. Here’s Blaine’s post.


Gave up one of my registered domains recently…

Posted by steve | General Commentary | Monday 30 September 2013 1:34 pm

Recently I decided not to renew one of my domains:

I initially used it as a testing ground for learning about server-side-includes and CSS. The site was merely operating as a “placeholder” for future work. It was full of interesting quotes I’d collected over the years. I should probably resurrect that page just because it’s still interesting.

Who knows, watch this space and I may do that.

You may be curious about the name “Befuddled Minds”. It was a name my wife shared with me when she tells a story about a university professor offering commentary on what a bunch of young people were doing. I think, if I get the story right, there were a bunch of folks all gathering in some public place to celebrate the “Harmonic Convergence” of the planets. Or something like that. Anyway the professor referred to them as a bunch of befuddled minds.

The web site was created to be a place to share stories of some of the really dumb things we see companies / management do sometimes. The problem is, even if you post a story that’s not about the place you work, people will think it is. I’m not Scott Adams posting Dilbert. So the idea was interesting but required more courage than I was willing to invest, even if the stories were about places from my past or places where people I know have worked. So it ended up being a placeholder.


Leadership is Giving Up Control

Posted by steve | Management & Leadership | Monday 30 September 2013 1:24 pm

I realize that posting on a personal blog with an opinion about management always includes with it the risk that the management team you work with in the real world may read it. And they may get the wrong idea. So let me just get this out-of-the-way first. The management team I work with, regardless of the fact that they may read this or not, is outstanding and teaches and instructs good values of leadership. No kidding. In fact, who’s kidding who? That’s why I choose to work for them.

This leads me to the reason for this post. It occurs to me that an outstanding manager will delegate responsibility to employees as far as possible. Let me explain what I mean by that. Encouraging the employees to take responsibility, make decisions, and overall demonstrate responsibility is a great thing. And the right thing to do is to mentor the employees to be better at handling and understanding those responsibilities. A great manager finds ways to make other great managers. A poor manager tries to keep everything under control tightly. Fear vs trust.

With the right kind of shepherding as an example of leadership, the employee will know precisely what to do. And the discipline must also exist to recognize where our own responsibility as management lies as we deal with delegating to others. If they make a mistake, it’s not our place to give them a lot of crap about it. Rather to recognize if our own instruction was inadequate or if it just couldn’t be helped with the existing knowledge. A team I once worked with had a saying that “the person working against you may just not have enough information.”

I’m quite fortunate to work as part of the management team that expects that kind of responsibility from all of us. And we get feedback if we need help. Rather than try to control what everyone does — and you know you’ve met those managers before — they mentor you and give you the authority to do what is needed. It is a marvel to experience if you’ve never been expected to act like a stake-holder before.


Part of my Squeak Tutorial was translated to Serbo-Croatian

Posted by steve | Smalltalk | Wednesday 15 May 2013 8:58 pm

Here’s the link to the translated page: Squeak Tutorial page translated to Serbo-Croatian.

I added a note to the page explaining what happened and why. Pretty neat.


What Tech Jobs Are We Creating?

Posted by steve | Blogging | Wednesday 15 May 2013 6:59 am

When I read that US companies are complaining that they cannot find qualified technical people I wonder about a few things.

What are the jobs? Did the implied part get left off of the statement? See, when I hear the words “We cannot find qualified applicants”, I translate that to “We cannot find qualified applicants willing to work for the pay we offer.”

Search on the popular tech job sites and many of the jobs available right now have significant problems, in my opinion. A part-time job or contracting position is not a commitment by the company to hire and has many costs and hazards for the contractor. The job will end. And more than likely the job is out of town, away from home. Contract work usually means you have to pay for your own healthcare. What about the risks of purchasing a home with a part-time or contracting job? Yes, risks of layoffs are real in full time work too, and with the IT sector that brings up the next point.

What do these jobs pay? Many companies are outsourcing tech work offshore. This is done for a number of reasons. Pay is lower with offshore labor. Also there is less commitment. Again, the employer often believes that low-cost technical workers are easy to find offshore so contracts can be changed for the better deal. This works the other way too in these emerging offshore markets. So many corporations are working with offshore IT labor that, for these workers, the market is so hot that they change jobs frequently. The tech worker who truly understands the complex software being enhanced, modified, or fixed, are becoming a thing of the past. Do not make the make the mistake thinking that analysis and design is working code. Computer systems do not run documentation. They run programs. You need people that know the code intimately. They know where the real fragile bits are found.

We cannot blame the companies for this way of thinking. Well, yes we can, but it makes sense how we got here. In today’s world of high pressure for return on investment and quick payoff the incentives are incredibly high to reduce the labor costs. If you must answer to impatient stockholders and investors when it is pointed out that you could cut your IT hourly rates by 35 percent going offshore, do you reply that it is not good for America to outsource to fill the demand for Tech jobs? Is it sound business that your knowledge about the IT-side of the business is controlled by non-employees? How do you capture the metrics that show your total cost of ownership? This stuff can take years before it gets noticed. Often, the very senior managers that set the strategic agenda move on before the real long term impact of decisions are seen.

Short term investing also leads us to this situation. We are happy to make low payments, even though they may go on for twice as many years, than recognize the true cost of ownership of IT staff. Efficiencies in turn-around and responsiveness are much harder to sustain when your IT staff is not your own. Are we willing to finance a car over 7 years just so the monthly payments are $300? Never mind that the car may not be worth much after 7 years of daily use.

There are exceptions of course. But generally speaking, what incentive are we creating for young people to want to enter the IT Tech Sector in the US?


Apple’s 50 Billion App Downloads Counter

Posted by steve | Apple Software and Hardware | Sunday 5 May 2013 1:50 pm

Apple has a promotion going on to celebrate the on-going success of the iOS App Store. They are approaching 50 billion downloads and intend to give a pretty substantial award to the person purchasing the 50 billionth app.

By itself, that’s pretty remarkable how well this new digital distribution of software is working. Here’s the countdown counter: 50 Billion Downloads Counter

But what just amazes me is the sheer scale of what we are seeing. That counter seems to be indicating that they are distributing about 1000 Apps per second.

As an iOS developer that’s pretty amazing to see and exciting to be a part of. I realize that “downloads” does not equal “sales” since quite a few Apps in the App Store are free, but still, that’s a lot of people using their iPhones and iPads accessing the Store for something to download.


A more recent example of clever marketing at Target

Posted by steve | General Commentary | Friday 12 April 2013 7:58 pm

We have a local Super Target store very close to where we live and because of the convenience I visit the store probably two or three times in a week. It’s commonplace for me to receive a message on my iPhone from my wife, by the time I’ve left the office and begun my trip home, to pickup milk, butter, soda pop, that sort of thing, on the way home. Since I have to drive past the store to get home, and since they always have good prices and selection, I shop there.

To be perfectly clear, I really like Target stores. They are attractive, have good products, competitive prices and often carry exactly what I’m seeking.

Thursday evening this week I had an interesting experience at my local Super Target store. In case you do not know, a Super Target is a regular Target department store with a groceries section added on. The groceries section is about a third the size of the overall store and always appears to be busy with customers. As described above, I got a request to stop in and pick up butter and some soda pop for the family on the way home Thursday. I remembered I needed cereal and mentally added that to the list of what I was going to purchase. When I purchase soda pop for the family I usually get 3 or more cartons at a time, especially if they are on sale, so I grabbed a shopping cart when entering the store. Since I go to this particular store quite frequently I knew exactly which aisles and locations to head towards to pick up the needed items.

Quite impulsively, after picking up the groceries, I decided it might be nice to purchase a new dress shirt. So I pushed the cart over to the other end of the store, towards the back, where the Men’s Clothing section can be found. And I picked up a few shirts, looked them over, put them back on the racks or hangers. After browsing shirts for around 10 minutes I decided there really was not anything that particularly interested me, and decided to abandon the idea of purchasing a new men’s shirt. In the past I’d only ever purchased socks, underwear, and that sort of thing; I had yet to purchase an actual shirt at Target.

When I arrived back at the front of the store with my shopping cart I could see that since I was shopping at a time when most people were likely home preparing or having dinner, the store was not very busy. There were a few open cashier checkout lines available to choose from and I grabbed the nearest one.

In the past I’ve written about the checkout process at Target and how they do a very good job at selective marketing with on-demand coupons during the checkout. So after I loaded the few groceries on the conveyor belt and swiped my debit card across the electronic reader (and at that point identifying myself to the computers belonging to the store), sure enough some coupons immediately printed out.

And one of them was a 15% off coupon on Men’s Shirts.

The coincidence really surprised me.

Okay, what the heck was that all about? I figure there are several possible explanations and it made for entertaining discussion amongst my friends as we thought about what may have happened. Here are the possibilities, no matter how creepy they may seem.

  1. Just a coincidence? This would be the simplest.
  2. My purchasing habits are really predictable by some clever shopping algorithm that Target has developed?
  3. It’s the season when people in my demographics evidently think about buying a shirt?
  4. Subliminal messages inside the store triggered an interest in buying a new shirt?
  5. Some well-meaning employee watching security cameras watched me browsing and decided to send me a coupon when they saw which checkout line I picked?
  6. Facial recognition software monitoring the security cameras (not too far-fetched since that’s how shoplifters get “black-listed” in some department stores) had advanced software that noticed I was shopping in the Men’s Clothing department and triggered the automatic on-demand coupon when it detected my face in a checkout line?

Stop me before I get too carried away with this…


The Häagen-Dazs / Target Conspiracy

Posted by steve | General Commentary | Monday 24 September 2012 10:03 pm

I’m good with targeted marketing in practice. It is much better to get coupons or notices of sales for items you regularly buy. The Target stores do a pretty good job at this. Invariably, when I buy groceries at my friendly local Super Target store, during the checkout process, their computer system prints out coupons just for me to be used next time shopping. Targeted marketing done right. They track me by the credit/debit card I use and on-the-spot create coupons for things I have either just purchased or have purchased in the past. As a Systems Architect, I admire how the design is working and respect it.

There is a clever little marketing game I’ve noticed however. This has to do with those smaller 14 Oz. containers of ice cream made by Häagen-Dazs and others. It’s great ice cream and I quite enjoy the quality and the size of the container. It’s not meant to be a “single serving” container. But it often is.

Now here’s the pattern, no, conspiracy I’ve picked up on. Months ago I purchased one container of
Häagen-Dazs ice cream. Just one. During the checkout Target prints out a little coupon for me to use on a future shopping trip. I’m sure I’ve forgotten the exact coupon discount, but it said something like “Buy two Häagen-Dazs next time and get $1.00 off”.

The next time I go shopping I remember the coupon and purchase two. Targeted marketing worked. And when I got to the checkout a new coupon prints out. It says something like “Buy three and get $1.00 off”. I probably have the amount remembered incorrectly, but I’m certain the count on the coupon was three.

You can see where this is heading. Sure enough, next time I buy three little cups, remembering the coupon, and at checkout time I get an automated coupon printed out that says something like “Buy four and get $1.50 off”.

Next trip I buy four, using my coupon, and I’m not kidding, I get a coupon that says “Buy five for $2.00 off”.

They’re on to me.

So I wait a while. I didn’t buy five. It takes a while to consume four! A few weeks pass and I decide to do a little experiment. I buy just one.

At checkout I get a coupon that says “Buy two and get $1.00 off”. They got me figured out. It’s an ice cream conspiracy between Häagen-Dazs and Target.

« Previous PageNext Page »