Knowing when to read the signature from an Ingenico iSC480

I’ve been working on a project to integrate my team’s POS (point of sale) software with an Ingenico iSC480. The device is pretty nice looking and some of the API stuff is pretty easy, especially since you can get an example app from Ingenico, and it shows how to do nearly anything.

However, the example apps don’t seem to show how to detect when the user is done signing. I had to figure it out from the examples.

So, I would like to share two ways of doing this. I call them “the not-so-obvious way of detecting when to get the signature” and “the not-obvious-in-any-way method of detecting when to get the signature”. Catchy names, eh?

1. The not-so-obvious way of detecting when to get the signature
Even though this way is “not-so-obvious”, I still figured it out. The API contains a command “M29”. This asks the device if any recent signatures have shown up. This command always gets a reply. You can set up a timer loop to keep asking the device the same question. When the user is done signing, the reply (from the M29 command) will have a status greater-than zero. This indicates the number of chunks that the signature has been broken-into. Zero chunks, means no signature.

2. The not-obvious-in-any-way method of detecting when to get the signature
I discovered this approach after reading-through a bunch of config files. I do stuff like that, just because I’m curious and I like to see what is in them. Sometimes you find the coolest stuff. Well, surprise, surprise! In one of the config files I found that it is possible to set the device to send a message when the user is done signing. You would think that would be “on” all of the time. Nope. To turn it on, you have to send a M60 command. Set option “0009” with a value of “0002”. From now on, the device will send a “20” message, when the user is done signing.

There you go. I hope that made your job a little easier.

Posted in Programming | Tagged , | Leave a comment

Letting go, delegating, managing

Let’s just say that you are a programmer, or server admin or just about anything, and you are really good at what you do. Usually, this means that you are a person “who gets things done”. This also usually means that people know this about you and so you get a lot of work assigned to you.

Eventually, people will want to test your capacity, and then determine if you can be pressed to exceed your capacity. In other words, you are given more work than you could possibly complete. Way more.  Some of it is just not going to be done, unless something changes.  At this point, management can decide to press you down one of two paths:

  1. Give you less work, so you are at (or slightly below) your capacity – or –
  2. Press you to learn a little trick called “delegating”

As you can imagine, option 1 only happens if you just start dropping work, refuse to do more work, and refuse to delegate. Basically you declare that you are a bottleneck which is “this big” and you will never be more than that.  So be it.  You are now labeled.

Option 2 is a little more interesting, but it requires growth, and growth is often painful. If you go down this path, the first time will be the most difficult.  Here is what will go through your mind:

  • It would probably be quicker if I just did it myself, instead of taking the time to explain it to someone else, who will take just as much time as me, or maybe longer.
  • If you want it done right, do it yourself. I know I will do it right.
  • If it is not done right, I will have to redo it, or train my delegate how to do it right. *sigh*
  • I will only know if it was done right by reviewing it. That just adds more time too.
  • Gosh, this is a lot of work to delegate things. I need to pick which tasks to delegate and think about all of this stuff. It is a lot to think about. It will certainly drain a lot of time out of my schedule and the schedule of others
  • I just can’t see how this is efficient. I keep going back to my first statement, that it would be quicker if I did it myself.
  • Seriously, I just am having trouble getting over it. The inefficiency if it all is causing a burning sensation inside.
  • Maybe I can sneak in there and do most of it myself and only make it seem on the outside, like I’m delegating stuff. That way, I avoid all of this inefficiency.
  • Dang it! When I try to sneak like that, I just end up with even more work, but with no ROI. Plus, my delegate is getting mad that I’m giving him “busy work”, which is way below his actual skill level.
  • If I was already done, then I wouldn’t have to go through this big transition.
  • I wish I was done, but I’m not, so I need to let go and honestly delegate.
  • I sort-of feel like a failure, because I was always the guy who got stuff done, but from now-on, that will be someone else. Buh-bye hero badges. It was nice knowing you.

It is a little like the psychological stages of grief. With steps like resistance, denial, negotiating, acceptance, um and the other steps.  Delegating does not sound like much fun.  Why is somebody putting you through this pain?

Then you get a grip and remember that you are *one* person.  Last year, you were not as good as you are today.  Somebody invested some trust in you and allowed you to achieve the great things that you have achieved today.  You can’t be the only person in the world who has this potential.  There must be others.  Your subordinate, could possibly be the next “you”.  He just needs to be led to the same place that you are.

And then, what about you? When you have led others to be as good as (or better than) you, then what about you?  Will you still be needed?  The answer is emphatically “yes”.  Because you are a person who makes more “you”s. Who else does that?  You do.  Your next move, might be to make more “you”s who make more “you”s. Dang!

Let’s not get ahead of ourselves. Shall we. Let’s just start by delegating.  It is hard enough, for now.

Posted in Career, Professionalism | Tagged , , | Leave a comment

Wheels that need to squeak

I’m sure you have heard the phrase “the squeaky wheel gets the grease”. Basically, if you need something done and it is not just getting itself done, you should speak-up and complain, maybe even make a bit of a ruckus, and be persistent.  If you become enough of an annoyance, someone will put in the effort to satisfy you, just so everyone can get some peace.

In fact, this can be a pretty good indicator of how some places are functioning (or not).

I think back to a place where I was hired to “fix everything, because everything was broken”. During the interview, the HR folks seemed unusually honest about their dire situation.  It was a bit unnerving, but I appreciated the honesty, and I took the job.  Honestly, I love challenges, and this just seemed like too much fun to pass-up.

It took a few days for me to plug-in and start fixing things. As I did, I also surveyed the landscape and determined how vast and pervasive, was the “brokenness”.  I started putting numbers on things and assembled a priority list and a timeline.  When I passed this recommendation up to my boss, I became aware of a barrier which was a nice contributing factor in the current situation.

Each day, I was visited by several people, and received several phone calls. Each of these people would talk about an IT problem that they were dealing-with and then they campaigned for me to fix these problems.  It was probably the only place where I have seen such a consistent and organized process where each person had to be the PM for his/her fix.  As soon as I started working on each problem, another person would interrupt me and try to persuade me to work on his/her problem instead.  Needless to say, it was hard to make any progress on any of the issues, with the constant interruptions.  However, each day, it was the same thing.

Somehow, the system at this place was set up to reward the “squeaky wheels”. If you didn’t squeak often enough, you didn’t get any grease.  So, the whole building was a disorganized orchestra of squeaking.  It desperately needed to change.

My boss had taken-over the department a few months before I arrived. She already seemed to have a feeling about how normal/healthy the current process was.  When I went to her office to discuss it, I didn’t even have to finish my sentence.  She was waiting for this conversation.  It was time to enact some changes.

Making a Change

The new process went like this:

  1. If someone came to me, I sent them to my boss
  2. My boss put the work/request into a work queue (initially, a SharePoint “to do” list).
  3. Once it was on the list, I determined a duration of each task
  4. Once I set a duration, my boss would set the priority
  5. Each day, I would work on the highest priority items
  6. At the end of the day, I would review and score any new items
  7. Once per week, my boss would evaluate and re-shuffle the list

Short-term Results

I’d like to tell you that everyone thought “the new process” was the right answer, but ehem, that is not even close.

The old process had rewarded people who were squeaky wheels, and who were resourceful and persuasive. Everyone at that company had been conditioned to follow the old process. Nearly everyone had developed their persuasion skills very well and applied those skills with diligence.   The natural response to our new process, was to squeak louder, and use more persuasion.  Repeat, until you got some grease.

To make our changes stick, we had to stand our ground. We would listen to reason, but any campaigning would be dismissed, because it was only a tactic and not business-driven.  No amount of song-and-dance would sway us.  Pretty quickly we were labeled as heartless monsters. Clearly, it had to be because we hated nice people.  Every ounce of it obviously was personal.  The terrorists have won, etc.

Weathering The Storm

As we focused on the most pervasive and widespread problems, the problems seemed to get resolved at an increasingly rapid rate. Fewer interruptions meant more time focusing on fixes, rather than negotiating and tap-dancing.  Pretty soon, we had cut the list in half, and then half again.  Unfortunately, some of the bugs did not rate high enough to get serviced.  In fact, some of the apps were cancelled, removed or shut-down.  You can imagine the waves of emotion that roared when we did this.

In the end, we built a better IT department with systems based-on business-need rather than emotion. There were still a few people who tested the waters occasionally and tried being squeaky wheels.  My boss and I actually turned that into a metric.  We expected a specific level of squeakiness within the organization.  It needed to be “not too low and not too high”.  When it was “just right”, we knew we were operating at a high level of efficiency and professionalism.

The net take-away from the experience is that there should be some wheels squeaking, occasionally.  You cannot please everyone.  Therefore, if there is no squeaking, you might not be making all of the right decisions and moving your timelines and projects with enough aggression.  Move closer to the edge. Squeeze some of your timelines a little.  Push a feature or two, out-of-scope.  This is how you tune your team for higher efficiency and better ROI.  Of course, “less-is-more”, but likewise, “none” is too little.

Posted in IT Horror Stories, IT Psychology, Lessons Learned, Methodology, Professionalism | Tagged , , , , | Leave a comment

Both sides of craftsmanship

I recently read a good article titled “The Dark Side of Craftsmanship“. In the article Ted Neward tells a story about a well-meaning developer who posts some sloppy code to a public forum and is criticized harshly. Mr. Neward correctly points-out that the criticism was over-the-top and downright rude and un-classy. You had to feel bad for the victim because she was trying to be nice and participate in a public forum. The criticism was not constructive or helpful. Mr. Neward continued by pointing-out that not everybody needs to be a ninja and it is okay to be a code slinger because the world needs some of them too.

I must confess that I wholeheartedly agreed with his article until I started thinking about the other end of the spectrum. Then I wholeheartedly disagreed at the same time. Oh, such inner conflict! I nearly became emotional.

The point Mr. Neward was trying to make is that some people get carried away with elitism and forget their original purpose. Bottom line: programmers just produce programs that provide a service to people and you don’t need to be a fancy-pants to accomplish that goal. Elitists sometimes get caught up in their own glory and tend to look down on others who are not on a quest for self-perfection.

To that end, I say bravo. One of my favorite battle cries is: “First, get it done. Then make it better.” Overcomplicating any project is a mistake clothed in artificial brilliance. An over-complicated program will get rewritten every time (that is, if it is ever completed in the first place).

The only problem is that some people misuse this rationale as an excuse for carelessness and for delivering poor quality. I have been criticized that “First get it done. Then make it better.” Often gets truncated after the first sentence. People try to “first get it done” and then move-on and never make it better. They leave you with a stinking mess and say it was Tim’s idea. So be careful with that.

Every project that you do, should be written rapidly and reliably to meet the needs of the project with regard to usability and maintainability, without overdoing it. For example: If I am making a data-loading app that only needs to run once and never run again, then I really don’t need a fancy UI, or TDD, etc. I know it is a disposable program and it won’t be anything else. I provide the best value to my employer by keeping the cost down and the timeline short by getting it to work as soon as I can. However, if I am whipping up a quick prototype that I suspect is somehow going to get deployed as a production app and won’t be replaced for 5 years, then I really should feel obliged to put a little more quality behind it. This is even more critical if I suspect that somebody else may have to maintain any of it. The solution should fit the problem.

Bottom line: provide a good value to your employer.  Find the balance between hack and perfectionist.

Posted in IT Psychology, Lessons Learned, Professionalism | Tagged | Leave a comment

Why it is so hard to produce excellence

Every IT manager, CIO, HR person or recruiter will tell you that it is hard to find good programmers.  This seems a little strange to me, because programming is really not that hard, once you catch-on.  Of course, there are several pieces of advice that I could give you, that will make you a much better programmer.  (look at my blog history for some examples)

Finding good programmers is about more than just finding good programmers.  Ultimately, the reason that you are looking for a programmer, in the first place is because you really just want successful work and good return on investment.  You think that a good programmer is the key.  However, there is more to it than that.

Ingredient 1 – Engineer(s)

Before I get too far, let me clarify that there are some people who can program very well, but they are not necessarily good programmers.  To be a “good programmer”, you have to make good programs.  Not just programs that seem to run well, but rather, programs that are satisfying to the users.

I’d have to say, that there are a few characteristics that make somebody “the right kind of person” for programming.  The most obvious would be: intelligence, desire and training.  More important than those, I’d say that [having an analytical mind] is the key to making a good program (or any other engineering stuff).  Yes, that is certainly the magic sauce.  You see, being analytical can be pretty hard, even exhausting sometimes.  Unfortunately, people who are great at analyzing stuff, tend to be incredibly boring and a lot of people hate to listen to them.  It hurts to say it, but I think it is mostly true.

This has to be one of the hardest things for some people to do:  Analyze something until every detail has been covered.  It is exhausting and boring.  It puts most people’s brains into naptime mode.  Even smart, disciplined people struggle with it.  If you aren’t both smart and disciplined, then fugeddaboudit.

Ingredient 2 – Visionary

Now, when you want someone who is fun to listen-to, how about entertaining comedic types like Jim Carey or Will Farrell?  Oh yeah! They are pretty-much the opposite of most engineers.  People like Jim Carey and Will Farrell are pretty ADHD and don’t typically have the discipline to focus and analyze something to death.  Their creative energy is through the roof.  But their ideas are bananas (which is fun).  If you put them in charge of designing or planning something, they will make a flying motorcycle that shoots flaming monkeys out of the headlights.  Fun, but totally impractical and even dangerous (probably illegal).

Engineers may seem boring, but they will make you something that is very safe and practical.  Of course, it will be black & white or two shades of gray.  Maybe, if you really push them, they will concede and cover 2/3 of it with red, flashing text, but only because you convinced them that it was super-duper important and you won’t be satisfied otherwise.

Getting creative types and engineering types to work together effectively, seems to take some kind of miracle.  Both of these people grate on each other’s nerves and both types think they are superior, infallible and always correct.  Neither of them does a great job of being in charge but you can’t tell them about it.  They are too close to the problem and easily become emotionally invested. This makes it difficult to make good decisions.

Ingredient 3 – Manager

The guy who does a great job of being in charge is the Manager.  Of course, most managers seem to be people who might come across as being not-too-bright.  They might be brilliant, but they keep their cards pretty close.  You might have known a few people like this from your high-school football or basketball team.  The thing that makes these guys work so well, is the fact that they don’t seem to focus on thinking and problem solving.  It just isn’t their thing.  They follow orders, make plans and concentrate on sticking to the plans.  If your creative people and engineering people cannot agree, the manager will intervene and break the log jam.  If this results in a compromise that irritates everyone involved, then it is a win.  The reason is because later, this irritation will be an incentive to resolve things peacefully next time, so the manager doesn’t have to broker an unpleasant compromise again.

It is hard for the manager to get drawn into a conversation and to become emotional, because he isn’t paying attention to the conversation.  He just watches your physical cues, and tone-of-voice.  When somebody starts giving indications that things are going badly, he intervenes and gets things back-on-track.  Maybe he will write stuff down, but only if it pertains to a timeline, commitment or action-item on the part of somebody.  Otherwise, his engine is in neutral, saving gas, like it is supposed to do.

Mix and Serve

So, what I have just described is the perfect harmony, to produce excellence.  If you don’t have all 3 personality types, then your program/product is going to be missing a major ingredient.  It will be a three wheeled car that can usually turn right, but sends showers of sparks if you turn left.  Something is missing and your performance will suffer.  You don’t really even need 3 different people to get this right.  You can have two people (one of them, supplying two of these roles).  Very rarely, you might find someone with all three traits (Bill Gates, Mark Zuckerberg, folks like that).

The reason that a team rarely has these three personalities is because of the natural conflict and discord that seems to be a regular occurrence. As you might imagine, it is much easier (and less stressful) to keep things happy and friendly.  Do not mix these personalities, there is no conflict, and everything is peaceful and quiet, but there is also no combustion.  It is also possible to find people who have these personalities, but those people often lack passion and intensity.  So, they always yield, when the pressure goes up.

Excellence comes when you find the balance between these three.  When you get that harmony, and you increase the volume, then the concert will begin.

Posted in IT Psychology | Leave a comment

The bus stop, by your desk

Software development projects often seem to get lead by non-developers. It is not a big surprise, considering the fact that developers really just love to develop.  Anything else (like timelines, budgets, and resources) are just distractions. VPs really care about some boring stuff, don’t they?

Although many senior developers would rather not deal with the pencil pushing and bean counting, they usually find out that they must learn this, as a survival skill.

For instance, let’s just imagine that you are not a developer, but you are a very ambitious person. You are successful at nearly everything that you put-your-mind-to. So, leading a software team should be no different, right?

How hard can it be?

It doesn’t seem like there are that many mistakes to make, but it is very similar to assembling a working cow, from parts that you buy at a deli. It seems like it shouldn’t be a big deal, right? Just hire some surgeons, and in a few hours, “moo”. What is the big deal?

Unfortunately, you can read lots of books and show a lot of enthusiasm, but in all honesty, you will have to learn from your mistakes, as you go. You could try to learn from others, but that is more of what an organizer does and not a leader. New leaders usually don’t have the confidence to defer to people who know what they are doing. So if you are a new leader, you will feel compelled to lead and control things, and make your own mistakes.  Trusting folks just seems too risky.

It takes a while to learn that [software development projects] are much harder than they should be. So, a new leader, who is learning from his mistakes, will burn-through a lot of clout and will even begin to accumulate a fair amount of debt. It is hard to truly express how much there actually is to learn. I’m not exaggerating when I say that it seems to take FOR-EV-ER to get good at it. Meanwhile, somebody is going to notice that things are not going well. They will look at the person who is leading the debacle (and amassing all of the reputational debt). That is when things start to get ugly.

Owning-up, or not

When you make a mistake, the right-thing-to-do is to accept the blame for your own mistakes. It is right and it is honorable. However, it is exhausting. If you are a new leader, and you are owning up to all of your mistakes, the exhaustion will eventually break you. When it does, you will always pick the next most responsible person.  You will point the finger at the senior developer.

Leader: “Good morning Tim, I’ve moved your desk, to get you some fresh-air and sunshine”.
Me: “Um, you moved my desk under a bus. I know what this is. Just because you didn’t physically [throw me under it] does not mean much”.

Yes, I’ve been under the bus before, and it is survivable. Some would say that it goes with the territory, for a senior developer. However, I would prefer to spend as little time under the bus, as necessary.

The first time someone throws me under a bus, I don’t complain. I guess maybe I’m not so afraid of it any more. However, I have found that if I let it happen a few times, without speaking-up, then it seems to happen more often. Believe it or not, I’ve nearly been fired before, because someone else was making big mistakes and I wasn’t pointing fingers at them. Playing the blame-game is a disgusting practice. I hate it and I avoid it above anything. It is better to privately offer to help the new leader and appeal to his sense of dignity and honor. Hopefully, he isn’t so exhausted that he is running low on both of those.

In the end, it all seems to work out.  It just takes a lot of patience.  When the new manager is panicky, he won’t have patience.  He needs to rely on you.  Be strong.  There is often a sign above my desk that reads “bus stop”. I guess I am okay with that, as long as the bus doesn’t visit me too often.

Posted in IT Psychology | Tagged | Leave a comment

People who hate you for doing a good job

I, and many of my peers have experienced the phenomenon, when you have a colleague that seems to “have it in for you”. Everything you do, just seems to grind their corn. This person isn’t your boss. So the person has no control over what you do and you have little or no effect on this person either. It would be one thing if you were a screw-up, but you are doing a good job. Still, that person just seems to pick-apart anything you do. The person just can’t get off your back. What is that all about?

First a little background:

As a programmer, I don’t see this nearly as often as most people do. Part of it is because programmers have very little contact with other co-workers. A programmer keeps his head down and jams away until all of the programs are done. Then, once the programs are done, there is very little left to do. When there is nothing left to do, there is, um, well, nothing to do. Your job is pretty-much over. So, you usually have to go somewhere else. Therefore, it is hard for programmers to stay-put at one place, for very long. When you don’t stay-put for very long and you don’t interact with people very much, people don’t get to know you and vice-versa.

Every now-and-then, a programmer will land at a company that wants to retain you. As the programs get completed, you get signs. Such as, “the talk” about “moving up” and “taking more responsibility”. Gradually, you are even introduced to people around the company and get invited to meetings and stuff. People talk about what else you can do, other-than programming. This usually means that you are encouraged to stick-around.

Moving up

Usually, most companies prefer to promote from within. Most employees start out low on the totem pole and work their way up. If you have the right personality, and the higher-ups seem to respect and trust you, then the path is paved for you to move up. You might also get some help from your boss. That is, unless your boss is worried about losing you, or if the boss sees you as competition for some reason. Most of the time, your boss is encouraged to groom “the right people” to move up. If that is you, then the process is really cool and works great.

There are some talented people who get overlooked, or passed-over. With a little encouragement, these people could be very successful, but things just don’t work out that way. Likewise, the flip of that happens too. Some people who are terrible, but they move up anyway. That person should be punished instead of promoted. Is the world just hopeless? No. There is some inner game that you cannot see. This is why this sort of thing happens.

Getting the right label

Oddly, the way that a lot of people “get somewhere” in their careers, is by campaigning. Like a politician, you need to get your name out there. People see your face and hear you say nice things. You kiss a few babies and smile and wave at people. Folks see that you are a nice person and they like you. They hope good things happen for you.

In contrast, most geeks are not good at campaigning for themselves. They don’t say hi in a friendly manner. They don’t shake hands or hug people nicely and when they do hug someone, it feels awkward. Instead, geeks tend to hunker-down at their desks and get mountains of stuff done and make everyone else’s lives easier. Unfortunately, this often gains them zero recognition. As a geek, you seem to be doing what you do best. People know it, on some level but that is not at “eye-level”. In fact, if you do your job well, and it makes other people’s jobs easier, they will secretly hope that you never-ever get promoted. Because, if you get promoted, then you won’t be able to do that anymore. Plus, who sees you? Who knows how much work you are really doing. Maybe just you. You can’t promote yourself. Do you see the problem?

Your best foes

The people who are most likely to be your foes are the ones who have it in their heads that they must move up and be in charge of stuff, but do not want to be responsible for much. If they become responsible for stuff, then they can be held accountable, and that is a liability. Those people love TV shows like “survivor”, where the winners succeed by spotting other people who are their competition and work hard to subvert those people. If you are doing a good job and receiving recognition and one of those people identifies you as “competition”, then that person will feel compelled to campaign against you. That person will exert unusual amounts of energy to neutralize your accomplishments. If they can’t win, then they will make sure everyone else loses.

Meanwhile, you are working your butt-off trying to get stuff done and getting criticism from several directions. Where is this coming from? You try to regroup to fix these problems that pop up everywhere. You were doing a good job, but somehow people seem to think that you always make the wrong decision. Your feedback is largely negative. All of your accomplishments are disappearing underneath a growing cloud of complaints. You spend large amounts of time trying to fix the problems. Eventually, you realize that you need to head-off these problems. Otherwise, you can’t make any good progress, to redeem your reputation.

How foes learn this

This is a clever trick that some people were able to master in High School. They were usually known as “the cool kids”. They identified the dorks/nerds/geeks, and campaigned against them in High School and it worked. They got dates and went to prom and were voted “most popular”. Meanwhile, you were studying to get good grades to get into a good university.

In the end, it still comes down to this: some people still get-by on hard-work and smarts, but don’t get rewarded much for doing it. Meanwhile, others prosper by campaigning and self-advertising. They work the system by seeming likeable and trustworthy and it pays-off big-time. It also makes you seem less-likeable, and underlines how much less-warm and friendly, you seem to be.

The wrong solution

It might sound like I am suggesting that you can prosper by turning the tables on these people, but be warned: they have way more experience at this sort of thing than you do. If you aren’t used to that sort of thing, then you have a lot of catching-up to do. Before you try it, I strongly suggest that you should also do some soul-searching and decide if that is the road that you really want to go down. If it is, then start studying how to interact with others better and how to “seem likeable”. You must convince yourself that this is an honorable goal, otherwise, your fakeness will shine through. It must be authentic. You must believe it yourself. You must genuinely develop likeable traits. It sounds weird, but it is actually very normal, and perhaps, you have neglected it and that is the crux of the problem.

Finally, don’t bother picking a fight with your #1 critic. People are not as dumb as you think. They can see when somebody has a grudge on you and they will not buy into it. People hate a villain and they hate rotten people and negativity.  They also don’t like to be told what to think. Just do the right thing, be positive, honest and hard-working. Your critic will eventually shine enough light on you to actually gain you some recognition, but only if you stay on the high road and don’t waiver.

The high-road is a painful path to travel, but frequently tread by the true elite.

Posted in Career, IT Psychology, Professionalism | Tagged , , | Leave a comment