7 Reasons for UX #FAIL in Enterprise Software

It is nearly impossible to have a good UX consistently in an enterprise software.

That is a strong statement and I’d love to be proved wrong. I come from a background where I developed applications within an enterprise with a defined target audience. I also did software that was available publicly on the Internet. For more than 15 years now, I’ve seen all sides of the table by being both a developer and end user.

First, What works well for Non-Enterprise Software

When you create a software for general public consumption, following is what aids you:

  1. Clarity of Thought. You and your team have planned it out and immersed yourself in it. You know what needs to be done and are focused towards the goal.
  2. Passion. Not only the design & development team, but even stakeholders or subject matter experts are passionate about the software and what’s being built.
  3. Authority. It is for the general public, and you have the authority to take decisions which you think are in the best interest of everyone.
  4. Innovation. That’s the buzzword. You want to innovate and so does everyone else in your team.
  5. Focus. Your focus is to create an Awesome User Experience, period.
  6. Analytics. You measure the usage, and you know what’s working and what isn’t. That impacts the further development, and the evolution continues.

And thus you have a software which you are proud of, and you don’t hesitate to modify it because you know that incremental innovations would always enhance the user experience. Take any top rated app on the App Store, and you would know that this method is what made them successful: Build-Measure-Learn—Repeat

Enterprises? What a #FAIL

The same gleamy eyed UX expert, who built software for the masses and totally, totally inspired from the UX revolution happening around the globe, stumbles, and more often than not fails badly in an enterprise setup. The leading 7 causes are:

  1. Target Audience. This is considered a blessing – you know your users in detail, which systems they have access to, and intelligently design your solution around them. Wrong. You have a fundamental flaw: The audience that you are looking at are deeply uninterested in what you are trying to build. You shouldn’t expect any excitement from them except the key people.
  2. Burden Factor. Unlike an app that the users download from App Store with free will & interest, an enterprise software is forced upon them. How many of you would like to fill in your time sheets, or apply for leaves through a portal – every day?
  3. Resistance. Legacy application being upgraded? There would be resistance, everywhere. Bad karma for you again.
  4. Bottom Line. A good UX process not only requires significant time investment, but good money too. Not many organisations would want to invest in it as the immediate results are always intangible.
  5. Authority & Stake Holders. If the stake holders do not believe in UX and its importance, then they’ll just sign it off. No approval, and no go-ahead. Also, despite a large user base, they are usually the ones who are the owners and speak for others – and thus it is imperative for them to believe in it.
  6. Features First, UX Second. All that matters are the Features – measurable, tangible and objective; the UX is always subjective, and often confused with design and visualisation. The Target Audience also have their wishlist and thus the features reign supreme. This may not be a cause of concern when the software is built the first time – but future updates and iterations can twist it in a way that the UX focus would go for a toss.
  7. Training Costs. Any new software deployment or a visual change is accompanied with a training across the organisation. It leads to reduced productivity, increase in complaints and overall costs – thus most prefer to avoid it.

It is often too late when the lack of good UX is realised. The people change, and their replacements want to maintain the status quo and thus nothing really changes. And eventually only features are added by the developers, and visual design done by the designers based on what seems appropriate to the stakeholders.

Tackling the UX in Enterprise Software

All is not lost, but I’d admit it is not easy. The Enterprise UX 2016 (http://enterpriseux.net/) aims to create a better and sustainable environment, and I wish them luck. However, following are my few cents.

  1. Right People. It can make all the difference. Someone who can develop AND understands design AND understand interacting with customers and gauging their needs might be able to get it right.
  2. Compromise for Flexibility. Assume that the UX might change in the future, and more features put in the system. Thus the UX shouldn’t always be the holy-grail, but rather flexible to incorporate future features.
  3. Transition Plan. Create something like a ‘beta’ preview so that the early adopters can experiment and rollback to the stable version if it doesn’t meet the needs. All new users should be on the new interface, and the older ones slowly transitioned.
  4. Luck. That you get the right Stakeholders who believe in UX. I’ve been lucky on many occasions, and that has helped significantly.
  5. Complete Package. Always demonstrate the solution rendered well – including UX and design (and not just wireframes), and preferably with the right content. That creates much more impact, and can help out with getting the Stakeholders on board for UX.

Apparently, there are more who share the same sentiments. Uday Gajendar in his post Why I design enterprise UX, and you should too! is quite optimistic, and I guess that’s the way to be.

What has been your experience in creating an Enterprise Focused Software, and how much of a role has UX played in it?

Asterisk VOIP and pfSense IPSec VPN Clients

I had setup a pfSense 2.1 based IPSec VPN following the instructions at https://doc.pfsense.org/index.php/Mobile_IPsec_on_2.0 which worked well for my mobile devices and machines.

However, using a SIP based softphone over VPN connecting to my workplace’s Asterisk based VOIP setup never really worked properly. I dabbled in changing the subnet masks, changing asterisk settings, phone settings, NAT and many other things – all of which didn’t really work. The maximum I was able to achieve was calling up *43 which is the echo number and hear my own voice.

The reason for it to not work was that my VPN setup was having a different IP Address range (e.g. 192.168.10.x/24), and my LAN network was different (say 192.168.5.x/24). This is how the VPN is setup, but this allows one way communication – my VPN clients can reach the LAN, but LAN cannot reach the VPN clients. So, Asterisk server, while signaling worked, the media didn’t. So the ring was there, but no voice, since it was trying to send it back to 192.168.10.x series and my pfSense box wasn’t passing it through.

The simple solution was adding a firewall rule in LAN settings, and allowing the LAN subnet to pass traffic to the 192.168.10.x/24 network (Protocol: any, Ports: any). By default it is blocked. And THEN I could ping my VPN clients from LAN too which was the ideal setup, even for remote troubleshooting.

Tracking your Route through GPS – Getting Started

It was 14th February 2013, Valentine’s Day. Inspired by one Motorola commercial, I set out to walk in a ‘heart shaped’ route, as a Valentine Gift for my beloved wife. The commercial is available at http://youtu.be/iG2DRiQt1b0 and the end result was tracked on Sports Tracker, with me walking in a heart shaped route near Lotus Temple, Delhi, India.

Image

I don’t have a good navigation sense, and rely mostly on GPS/Google Maps/Map My India for my everyday needs. Thus, to accomplish this task I’d specially bought a professional compass to track the directions, and had planned to cover at least 2 kilometers walking/running (though eventually it was restricted to 100 meters, reasons I’ll not delve into).

But, the biggest gain (apart from the delighted beloved, and learning how to use a compass) was that I came across various techniques that are used across the globe to track/plan a route. It’s more awesome than I ever imagined!

Continue reading

Quest for Ultimate 3G Wireless Internet setup at home – Delhi, India

I had a deep desire to have a network setup at home which was wireless and flexible. I used to have 2 Wimax connections (Tata Wimax & Reliance Wimax), and one ADSL (MTNL) running 24×7. Unfortunately Tata Wimax shut down its services, and I disconnected Reliance Wimax connection. With the start of 3G services, I really wanted more flexibility and expected better uptime, and was ready to live with the disadvantages such as lack of Static IP, and significantly higher cost.

So, I set out to perform the longest duration and most expensive test I’ve ever done – 3 months and approximately Rs. 35000/- on equipment and prepaid recharges cost. The location was East Delhi, and duration was October 2012 to December 2012. The performance may change in future, so YMMV. The ingredients were

Two 3G Routers

Two 3G USB Dongles & One 3G USB Supporting Router

The DLink 456U I bought off from Ebay, and Micromax MMX400R, ZTE K3770-z, Huawei E1731, and ASUS RT-N66U from Nehru Place, Delhi.

Four Service Providers

These 4 service providers have license to provide 3G services in Delhi. I bought 4 Prepaid SIM Cards of each and activated whatever 3G service was needed and their plans.

Additionally also bought one Nokia 101 Dual SIM phone (Rs. 1500) to easily check the balance, validity etc. and send/receive sms messages and USSD codes.

First, The Verdict

Vodafone as service provider, unlocked Huawei E1731 and Asus RT-N66U are awesome, and I assume I’d be staying with Vodafone for a long time to come.

This was my first Vodafone connection and I was delighted to see how Vodafone performed. It’s slightly on the higher side from the cost perspective, but if you want to have serious net connectivity, then Vodafone would suit you well considering the fact that it gets you

  • Excellent Download and Upload speeds (unlike Airtel)
  • The connection doesn’t disconnect every few hours and thus the IP remains the same (unlike Reliance)
  • Connects in the first go and you don’t really have to wait (unlike MTNL)

Vodafone does not allow connectivity from outside to your setup, so you as such cannot do port forwarding easily, unless it is initiated from the client end (such as by creating a tunnel using ssh -R on Linux).

Having the perfect connectivity between the ASUS router and 3G USB dongle was the most difficult part, and Huawei one performed satisfactorily.

3G ISP Performance Comparison, Delhi, India - December 2012

Continue reading

Wireless on Ubuntu 11.10 and Lenovo Thinkpad E420

Unlike 11.04 and earlier, Ubuntu 11.10 runs much better on Lenovo Thinkpad E420. The only glitch is the wifi drivers which don’t run by default, and it could be corrected easily

Using LiveCD or a running system

  • Press Super (Window) key, and open Terminal
  • Type sudo modprobe -r acer_wmi

That’s all. You should be able to connect to the wireless till next reboot.

Making the change permanent

Edit the file /etc/modprobe.d/blacklist.conf and in the end type

blacklist acer_wmi

Reboot and you’re done. If you’re doing it entirely from the GUI, then editing the file could be done by pressing ALT+F2 (this would open a “Run” window) and typing there gksu gedit /etc/modprobe.d/blacklist.conf

Please note: This applies to wireless card having rtl8188ce chipset. You can view that by typing lspci in a terminal and searching for the entries respective to Network Controller.

Nokia E6 Symbian Anna IMAP with push mail

Nokia Symbian based phones have a terrible IMAP support. If you have IMAP server of your own, you only have two options

  • Use “Nokia Messaging” which means you receive your emails via Nokia servers (similar to blackberry) and it’d not be your phone but nokia servers which would connect to your IMAP server and push mails to your phone. This works better, but then you’re giving your details to Nokia, and could be a privacy issue for some.
  • Use the in-built IMAP client. This would mean you don’t have a ‘push’ email, but a check interval of 5 minutes. Not awesome.

Following is one more way to set to use IMAP via the Nokia Mail for Exchange client, and you don’t need to have any Microsoft Exchange setup.

 

Concept

  1. You need to be running an IMAP server.
  2. There’s an open source PHP based software called “z-push” which allows activesync connectivity and has IMAP backend, which means you can use it to ‘sync’ your phones using the Nokia Mail for Exchange client.
  3. You need Apache web server with php5 and php5-imap support where z-push would be setup.
  4. You download and configure z-push.
  5. You configure your phone settings, and then use Nokia Mfe client to connect to your IMAP server and thus have “push” functionality.

 

Assumptions

  1. An IMAP server is running with SSL support with self-signed certificates (I used dovecot), which has usernames as ‘user@domain.com‘ format.
  2. You have Apache with PHP5 and php-imap support. On ubuntu/debian you can install it using apt-get install php5-imap.
  3. Nokia Mail For Exchange supports only a single account on a phone. So if you have multiple email accounts to be synced, bad luck.
  4. It was tested on a Nokia E6 running Symbian Anna. Your setup may vary or could be different.

 

Server side setup

  1. Download z-push from Source Forge http://z-push.sf.net ; I used version z-push-1.5.4RC-705.tar.gz.
  2. Extract it in a suitable location, for example, /var/www/z-push
  3. You can refer to the INSTALL document too for more information inside the z-push extracted files.
  4. Make the ‘state’ directory web server user writable. So do chown www-data.www-data state or chmod 777 state.
  5. Configure z-push. We will modify the following
    $BACKEND_PROVIDER = "BackendIMAP";
    
    // ************************
    //  BackendIMAP settings
    // ************************
    
    define('IMAP_SERVER', 'localhost');
    define('IMAP_PORT', 993);
    define('IMAP_OPTIONS', '/ssl/novalidate-cert');
    define('IMAP_DEFAULTFROM', 'domain');
    define('IMAP_SENTFOLDER', 'Sent');
    define('IMAP_USE_IMAPMAIL', false);
  6. So that the “Sender Name” when sending out email works well, there’s a IMAP_DEFAULTFROM setting, which didn’t work too well in my case, so I modified the backend file to display the “Sender’s Name” correctly in the format Firstname Lastname <user@domain.com>. The following changes were done in backend/imap.php
    # Added the following lines in the section below
    # $v = "$this->_domain <$this->_username>";
    # $envelopefrom = "-f$this->_username";
    
                if ($k == "from") {
                    if (trim($v)) {
                        $changedfrom = true;
                        $v = "$this->_domain <$this->_username>";
                        $envelopefrom = "-f$this->_username";
                    } elseif (! trim($v) && IMAP_DEFAULTFROM) {
  7. In Apache configuration, I have SSL setup. So in the configuration file for the SSL, I specified an alias as under
            Alias /Microsoft-Server-ActiveSync "/var/www/z-push/index.php"
  8. Restart Apache and your z-push is ready.

 

Client side/phone setup

  1. Now that the server side setup is ready, we’ll configure the phone.
  2. You can enter the settings as per the requirements while configuring the Mail For Exchange client.
  3. The “domain” would be your full name (as you wish to display when you send someone an email).
  4. That’s all. Sync it and you’re ready to go!

 

Troubleshooting

  1. To enable debug logs, create a file debug.txt in the z-push directory and assign it web server user writeable privileges. For example:
    cd /var/www/z-push
    touch debug.txt
    chown www-data.www-data debug.txt # or; chmod 777 debug.txt
  2. You may want to experiment with the IMAP_OPTIONS by referring to http://php.net/imap_open
  3. Your ‘Sent’ items folder could be different. You may want to keep it blank (the default).

Making a WiFi Hotspot / Access Point using Linux & wifi lan card/USB adapter

If you have a wifi LAN card / USB adapter, then you can use it as an access point so that other machines can connect to the internet via your machine using Wifi. The process is fairly simple, but requires you to have a compatible set of drivers which allow a wifi lan card to come into “Master” mode.

It didn’t work well for

  • Linksys WUSB54GC v3 USB adapter. Till Ubuntu 10.04, there were no good drivers for use with hostapd (supporting mac80211 / nl80211). In Ubuntu 10.10, though the drivers were working, but the connection was highly unstable – in fact unusable. The drivers that I tried were rt2800usb (which allowed the adapter to come into Master mode), and rt2870sta which didn’t allow the adapter to come into “Master” mode. It always remained “Auto” or “Managed” (checked via iwconfig). Need to test in 11.04 when it arrives.

What worked pretty well

  • 02:00.0 Ethernet controller: Atheros Communications Inc. AR5001 Wireless Network Adapter (rev 01), using ath5k drivers. hostapd didn’t complain at all and all was smooth. This was in Ubuntu 10.04.

Concept

  1. There’s an application called hostapd which allows converting a wifi adapter into an access point and provide privileges such as WPA authentication and ssid name definition etc. I used it and it worked well.
  2. When a client connects to the access point, apart from authentication it’ll require IP addresses to be assigned. For that a DHCP server is used.
  3. You need to have 2 interfaces, one which accesses the net (e.g. eth0), and other which provides the access point services (e.g. wlan0).
  4. You start the wlan interface, assign it an IP address, start the dhcp server, setup firewall/nat and start hostapd. That’s all to it. Your devices would be able to use the wifi adapter as the access point.

Procedure

apt-get install dhcp3-server hostapd

Modify /etc/hostapd/hostapd.conf and put the following

interface=wlan0
driver=nl80211
ssid=MyAP
hw_mode=g
channel=11
wpa=1
wpa_passphrase=MyPasswordHere
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP
wpa_ptk_rekey=600

The dhcpd.conf section in /etc/dhcp3/dhcpd.conf would have something like the following

subnet 10.10.0.0 netmask 255.255.255.0 {
        range 10.10.0.25 10.10.0.50;
        option domain-name-servers 8.8.4.4, 208.67.222.222;
        option routers 10.10.0.1;
}

Modify /etc/default/dhcp3-server

INTERFACES="wlan0"

Check what name your adapter got via iwconfig. You can change the name also and make it persistent via /etc/udev/rules.d/70-persistent-net.rules so that it always gets a single type of name. In our example we’re assuming wlan0, but it could be changed. Make necessary changes in your configuration too.

Configure the new interface

ifconfig wlan0 10.10.0.1

The above could also be done in a better way via the /etc/network/interfaces file, but didn’t try it out. In any case if you shutdown hostapd, the network interface (wlan0) loses its address, so need to put a script which assigns it again before hostapd is started. An example could be

iface wlan0 inet static
 address 10.10.0.1
 netmask 255.255.255.0

Restart the dhcp3-server. It should now be ready to serve addresses and is also bound to the network interface too.

Allow ip masquerading

echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Now start hostapd and see the messages that it shows

hostapd -dd /etc/hostapd/hostapd.conf

Wait for a few seconds, it should show some probes being done by other wifi devices. If it shows, then probably you’re in good luck.

Now try to connect via your device to this access point. It should work.

To make this work on boot, can put the relevant config in /etc/default/hostapd

RUN_DAEMON="yes"
DAEMON_CONF="/etc/hostapd/hostapd.conf"
DAEMON_OPTS="-dd"

and also put the firewall rules in /etc/rc.local (make sure its executable).

Remember – if you shutdown your hostapd, the network card would lose its address. So you have to assign that again before starting hostapd. The usual practice would be

  • Stop hostapd
  • Stop dhcp server
  • Restart network (or rather ifup wlan0 / ifconfig wlan0 10.10.0.1 would do)
  • Restart dhcp server
  • Start hostapd

Miscellaneous

  1. You can check the wifi interfaces via
    iwconfig
  2. To set a wifi adapter into master mode, try the following. If it doesn’t work and shows an error that it’s not possible or something, fret not – use hostapd as that’ll do that in any case.
    iwconfig wlan0 mode Master
  3. Network Manager could create issues, though in my test environment – instead of using an ethernet interface, I used two wlan interfaces, one being controlled by Network Manager for internet access, and other for making it an access point.
  4. modprobe -r ath5k / modprobe -r rt2800usb etc. is to be used for unloading the modules.
  5. If you wish to proceed without using authentication so that you can test it easy, then put the following in /etc/hostapd/hostapd.conf
    interface=wlan0
    driver=nl80211
    ssid=MyAP
    hw_mode=g
    channel=11