Programming

Company hopping - the new work culture

Well, we are busy building our latest web app project, and this particular one is interesting in that it has clearly demonstrated how this niche target industry has changed in the last decade.

Backstory: We design an HR management app call HR Partner a long time ago in 2004.  Back then, it was a Windows based app, and was tied in very specifically to a particular legacy payroll system.  We did very well out of that application, but lack of support from the legacy payroll vendor and other reasons meant that we let that project slowly die on the vine.

However, we have had a solid core of users still using that system to this day, and who keep asking us when we are going to update it and add more to it.

Well, that lead me to decide to take up the mantle again, but this time, we are doing it differently.  While the core of the product will be similar, we will now be (a) building it as a purely web based application, rather than Windows, and (b) we will not be locking it into one vendor, but instead be able to integrate with several other more modern payroll systems out there.

In talking to existing users though, one point that I had never considered became more apparent.

Back in 2004, it was quite normal for most medium to large companies to have an internal HR manager on the staff.  Quite frequently, the Payroll manager also acted as the HR manager, instead of having a complete separation of duties.  In any case, it was really easy to just have internal team members working on their own isolated HR system, and everyone seemed happy.

However, the current batch of users that we have been talking to are painting a completely different picture.  Nowadays, it seems that more and more of the HR work is being outsourced to external consultants who are not attached directly to the company.

When we spoke to some of these consultants, they in turn gave us a look at their typical work patterns; which was to provide services to multiple companies, either in the same or totally different fields.  They explained that a lot of the times, internal staff and managers wanted to have complete control of the data, but they would look to external agencies to analyse that data and tell them how they could actually make better use of it.

This threw our design specs off kilter a bit.  In all our other web apps, building the sign on and authentication systems was easy.  You had one company, that all the data belonged to.  And within that company, you have one or more users who could create accounts directly attached to that company so they could work on the data.  If a user wanted to do work on another company, they would have to create a new sign on account for the other company to do work there.

We looked at our audience, and figured that this old method would not work.  The considerations we had were:

  • We would have users that would still want to only work on their own company, and are not interested in working in others, and
  • We would have users who would not 'belong' to any one specific company, but instead would be working on several and jumping back and forth on a regular basis.

Trying to cover all these bases proved to be quite tricky.  There were a lot of edge cases where we were not sure that things would flow well.  Maintaining security and privacy in this industry is quite critical, but at the same time, we didn't want that to put up too many roadblocks to people onboarding and using the system.

What we decided to do was to divorce the user authentication system from the company database system.  

How it works is - Users could still sign on and create a new company.  They would then become the 'owners' of that company.

Other users could then apply to be invited to a company.  The company owners would have to approve them joining up.  Other users could apply to join multiple companies if they liked, and use a single sign on to interact with all the companies they belong to.

I know this is not new ground, and that plenty of other systems utilise this methodology, but it was a new thing for us to tackle in our own design and development work.

Technologically, it was quite simple to manage.  What really had us stuck was the UX factors.  We wanted to make the process as easy and seamless as possible.  As I mentioned, I was surprised at the number of edge cases we came across with this new paradigm.  Problems that we had to think through were:

1. The new user conundrum

What happens when a completely new user wants to join a company?  Should we make them go through the whole process to set up their account details first, verify their account, then shoot a request to the company to see if they will be allowed to join?  

Our answer to this one was NO.  We would simply collect their name and email address on the request form and send it to the company admin.  IF the company admin approved them joining, then we would quietly create their account in our system using this information, and send the invitee an email asking them to click a link to set a password on their newly created account and log in straight away.

BONUS - As part of the '2 click' approval steps the company admin has to do, they are presented with a screen where they can customise the security parameters for the applicant.  They can, for instance, opt to lock the new applicant out of certain sensitive screens or prevent them from editing employee information etc.  That way, when the applicant first logs in, they are already preconfigured for what they are allowed/not allowed to see.

2. The old user failing to remember

To enable quicker sign ons, we give every company on HR Partner their own custom sign on URL link.  The problem with a consultant who signs on to a dozen companies is remembering these links.

To solve this, we make it easy from the sign on screen for the user to get an email from us listing all the companies that they have been approved to work with, and a 'one click' sign on link for each company.  No need for them to write it down or save it.  If they move to another machine (or mobile device) without the bookmarks, they can easily get another list sent to them within seconds.

BONUS - The user does not have to remember different passwords.  Just the URL, which is actually just the subdomain of the company, in the form of [company id].hrpartner.io/user/login

3. Dealing with bad users

One problem we are still working on is - what do we do with users who are removed from a company because of bad behaviour?  Say someone did something naughty in Company A, and were booted out by the admin.  Do we then have an obligation to tell Company B and C (if the user is authorised to use those companies as well)?

At this stage, we don't collect any information as to WHY the user was dissociated from a company.  We simply let the admin 'deauthorise' them.  Perhaps later we can collect reasons, and look at a process for vetting out problematic users to protect all our customers.

4. Handing over admin control

At present, we allocate the first company who created a company as the site administrator, who is responsible for approving new users who want to join.  We have not yet built in a mechanism for handing over control of a company to another user, but given the transient nature of so many people's jobs these days, I am thinking this is something we will have to do.

Once again, this will have to be carefully managed, as the company admin is essentially 'god', with many powers over the data and privacy of information.  We will have to build in safety checks with respect to the handover, but once again without affecting the UX negatively.

 

I would appreciate some feedback from anyone else out there who has tackled these sorts of issues in the past, or who could offer some tips and suggestions as to how we handle further development.  I intend to post a few more posts like this as we come across design issues on HR Partner.  Hopefully it will prove useful to the design and development community.

 

 

Logo designs - are crowdsourced sites better than boutique designers?

Last month I began designing my latest project - a web application that is targeted at the guitar world - specifically at teachers who post guitar lessons via video.

Normally when I design a site, I will either create the graphics myself, or go to one of the many pre-made graphic resource sites around the web such as graphicriver.net or creativemarket.com.  But THIS time, I decided that I wanted something custom made, so I would try out fiverr.com to see how that panned out.

Expectation were not high - after all, the site says that each job will cost only $5.  I soon discovered that this was not strictly true, as the initial price of each job is $5, but there are all sorts of additions (some non optional, such as high res copies of the logo etc.) that add on the to the costs.

In the end, the job was going to cost me $10, so I entered my brief, including a description of the site, and sent the job off to one contractor on that site who specialised in logo design.

A few days later, I got a reply from him with a suggested logo.  It was a nice logo BUT... All he had done was to google my site name, grab the first image result on there and flip it right to left.

I was amazed at his audacity, and emailed him back immediately to inform him that I thought this was a rather lazy effort, even for $10.  He emailed back his apologies, and told me he would rework the logo.  True to his word, he got back to me a few days later with another logo.  This time I did a quick Google Image Search but it didn't come up with a match online, so it appears that he DID design this one from scratch.

End of the day, I think it still looks a little amateurish so I probably won't use it and will probably approach another site to help me design one.

By now, most professional graphic designers reading this will be having an apoplectic fit.  "This is EXACTLY what is wrong with using crowd sourced design sites!", you will shout.  Along with "Well, you get what you pay for - pay peanuts, get monkeys!".  And you would be right.

Sort of.

As a 'boutique' software designer myself, I can relate.  I hate those sites that promise coders who can code up an entire web site for $100, when my normal quote for a similar job is $2000.  I have had clients reject my quote so they can go down that path.

When I started my business back in the mid 1990's, I needed a logo for my company, so I approached several local design firms to come up with an idea.  My experience was actually quite wonderful.  All of them took time to talk to me and get an idea of what my business was about, and all of them prepared some beautiful presentations and concepts for me to look over.

One designer in particular, was very effervescent in his enthusiasm, and went to the trouble of printing out mock business cards with my name on it and some glorified title that I cannot remember now, but he was trying hard to 'paint the whole picture' for me.  We didn't go with his firm, but instead chose another one that was more conservative.  I remember this guy as being the only one to call me back after I sent him a "Thanks, but no thanks" letter.  He got quite agitated that I didn't go with his design, but I explained that I thought it was great, but a little over the top.  It didn't seem to sooth his feathers.

I just put it down to him being a little too personally attached to the results of his work, and just left it at that.  Heck, I am the same with MY work most of the time.

But a couple of months later, I was driving down the industrial district of our town, and I noticed that a new dry cleaning business had opened up with a brightly painted warehouse.  The huge sign out the front screamed their company name and motto, and... the EXACT same logo that was designed 'just for me' by the abovementioned designer.

I just laughed it off and carried on.  After all, it makes perfect sense to recycle your hard work and not waste your creative energy each time you pitch to a new client.  I just wondered if he told these new clients that this logo was design 'specifically for them based on the dynamic nature of their business', like he told me.  Actually, I wonder if even *I* was the first one he designed that logo for?  I could have been just one of a long line of business he had brought that one out for.

Fast forward to a few months after that, and I saw the same designer one the front page of our local newspaper, and not in a good way.  You see, around the same time we were getting our logo design done with him, he was designing a new logo for our local electricity company.  They had spent millions on their rebranding and associated collateral, and then.... they discovered that their logo was the exact same rip off of a European Union association.  Not even slightly altered, but a direct copy.

I reflected on this.  Sure, recycling your design work is perfectly acceptable, but plagiarising work from other is definitely overstepping the mark.  

So nowadays, when professional designers call out the cheap design sweat shops online, I have to stop and wonder about the fact that the two seem to have more similarities among them, than major differences.

After all, does the amateur designer hunched over a laptop in a small flat in Karachi care LESS about her work than the experienced guy working in a 10th floor award winning design firm in London?

I would think that the drive to create something new and wonderful is the same in everyone, across the board.  However, the ethics involved in the process of creation seems to be rather more flexible than I would have thought, regardless of the respective hourly rate.

Lets stop the abstraction!

There is an old saying - "Give a programmer 5 hours to write a particular program, and they will spend 4 hours writing another program that can write the original program in one hour!".

Increasingly these days, it is hitting me just how true that old adage is.  I have been cutting code for over 30 years now, and more than ever I am of the opinion that the world of programming is just drowning in a sea of constantly evolving tools.

It is no longer enough to just pick a language and become proficient in that, and just plain write code using that language.  Nowadays, it is a constant dance of selecting frameworks, database layers, deployment layers, and even additional languages that simplify the writing of the base language of your choice!

We all know that at the core, all computers just function on a series of 1's and 0's - the turning on and off of electrical impulses.  The closest we can get to that is to write in assembler code - manipulating the registers and directly accessing blocks of memory in the hardware.  But that, as we know, is fraught with danger.

So we rely on higher level languages, which are then compiled or interpreted down to machine language so we can run our apps using code that is easier for us to understand as humans.  For years, we simply picked a high level language, then let the compiler or interpreter get on with converting that language into machine language.

But lets look at an ubiquitous language of today - Javascript.  Now Javascript in itself is a fairly simple language, bearing close resemblance to C and other languages, so that programmers can usually pick up the nuances and write decent code in short order.  It is also an interpreted language, usually being converted into machine instructions at run time within a browser.  Not the most efficient language, but still serviceable and functional.

But somewhere along the line, someone decided that Javascript was still a little too hard, so they invented a simplified version called CoffeeScript.  Lets paint the picture here - we now have a specialised language which is then converted into another language which is then interpreted within an environment written in another language which then converts everything into machine language.

But it didn't just stop there.  CoffeeScript itself became bastardised over time, and now exists in about a dozen different flavours.  As of writing this post, there are around 40 different languages that 'compile' down to Javascript.  This is not counting the hundreds or so other extensions that generate javascript code based on a whole other language.

It is no longer enough to say that you know CoffeeScript.  You have to now define the flavour of CoffeeScript that you are familiar with.  You have to remember a whole new syntax to compensate for the fact that you could not remember another syntax in the first place.

I just can't wait to see the next iteration of languages that compile down to CoffeeScript, which then compiles down to Javascript, which then compiles down to.....  You get the picture.

I am theorising here that there is a glut of excess programmers out there who are not actively engaged in solving real world problems, so they take out their energy and time by writing yet another interpreter/compiler for a perfectly valid working language.

To put it in a more primal context, the village is thirsty, but rather than locating water or digging a well, the villagers are busy improving each other's shovels.  We will all be dehydrated soon, but man will we have some great shovels...

 

 

 

Cloud Overload

About 5 years ago, my PC desktop screen was starting to look a lot like the image here on the left.  Cluttered with a myriad of windows, it was getting so that I couldn't even bring a background window to the foreground because (a) I couldn't identify it any longer and (b) no matter where I clicked on a background window, it was a 'hot spot' that caused something to happen when I didn't want it to.  I just wanted to bring the window to the front but ended up executing a macro or changing the view etc because modern applications have pretty much < 1% of the active window that is not a clickable area for executing something !

So in 2012, we successfully converted ALL of our usual desktop apps over to cloud, or web based services.  This was wonderful.  It gave me bragging rights at parties and a feeling of smug accomplishment.

But just today, I realised that I have created a monster in another form.  You see, I just realised that my normal working day now requires me to open up at least 25 tabs on my browser.  Just to get my day to day work done.  For some specialist tasks, I am looking at around 40 browser windows.

This is NOT counting the other tabs I will need to open up for research or fact finding.

I am beginning to loath it when Chrome crashes, and when I click 'Restore Tabs', I have to wait about 10 minutes whilst it reloads content in 50+ tabs.

I used to get upset when the number of tabs negated the titles of the web sites, so I began to rely on the little favicons to identify which tabs did what.  Now even the favicons are being obscured by a veritable tsunami of grey tabs, and it is common for me to accidentally hit the 'x' close button instead of the actual tab when switching with a mouse.  Alas I lack the pin point mouse accuracy of an SAS sniper.

I need to consider shutting down some of our web based services.  Either that, or get a browser that is more command driven.  I have been intrigued by the Vivaldi browser project, started by the guys who made Opera, but that is still in early days.

How ironic.  Though I am developing apps for modern web and touch based devices, I seem to be craving my tools be command driven, just like when I started on DOS based terminals back in 1985...