Twitter for the enterprise (part 1: the beginning)

Click here to read more in part 2 the re-design

We decided to create an enterprise twitter style application for one of our clients who has a very large employee base. I thought it would be good to write some posts about the development process and how we go with staff engagement at launch and afterwards. Also it would be the perfect opportunity to get some great feedback on what you think about the development and any improvements we could make. 

Why an enterprise twitter? There are two main reasons for why I wanted to make an enterprise version of twitter:

1. I've been using twitter for a while now and really like the architecture and simplicity, it's one if not the best application I have used for sharing information quickly

2. I believe that an enterprise twitter can actually reduce the gap between employees, teams and management and bring them closer together. An enterprise twitter would enable people to rapidly share information with each other to keep in touch and stay up to date.

The proposed solution is to create a twitter type of interface and lay this over the organisations existing human resource (HR) database (SAP). This will make the enterprise twitter application much more powerful as each employee already has a lot of rich meta data associated with them form the HR data. Meta data such as the business unit they work for, where they are located, who they report to and so on. Combining this meta data with the dynamic twitter interface should produce some outstanding results.

The first challenge is the tagging and labelling feature of twitter. I want users to be able to tag/label key words such as a project, product or whatever by simply adding the hash "#" symbol at the beginning of the word. For example "Does anyone know who is working on credit card payment method for #XYZproduct" where XYZproduct is the tag that can then be filtered on to find all other references in any existing post. I have overcome this little challenge by programmatically looping through each word in the post and checking to see if it begins with a hash "#". If a word is found that begins with the hash symbol then it can is wrapped with a kind of perma link url and also stored as a tag. For example "http://localhost/appname/default.aspx?Tag=#XYZproduct". This approach seems to be working well so far but we will need to do a bit more testing to check that it will hold up.

Here's a sneak peak at the first draft of the main screen

 

Click here to read more in part 2 the re-design

iTunes8 New Visualizer, Serious Eye Candy!

It's finally here! Not that I was counting down the days.

Here at KMSystems we like nothing better than firing up the latest tunes, what better way is there into get in dev mode?

After moving from Windows to Mac and the lack of a Winamp mac support, iTunes has become my default music player.

Did you know iTunes has a visualizer? I didn't, after checking out the new and improved version I'm impressed!

Check out some random grabs of the visualizer in action.

[gallery]

Personally I don't really care about the Genius option or the cover Grid View, just a heads up for the Aussies reading, we don't get HD TV Shows.

See what else is new http://www.apple.com/itunes/whatsnew/

Creating Drop Down List Boxes the Rails way

Call them what you want Drop down list boxes, list boxes, combo boxes the list goes on. You know the ones I'm talking about, the rectangle looking things on a web page when selected give you a list of items you must pick from.

Whatever language you use, if they are on a web page chances are they will consist of a <select> tag with a few more <option> tags (the actual items) nested within them.

Coming from a Java/J2EE background amongst others and moving to asp.net I've seen my fair share of such boxes, in the latter you don't really have to think about creating the controls yourself it was drag and drop then wiring it up in the code behind.

Recently I have been playing around with Ruby on Rails, if you are new to ROR good place to start is of course http://www.rubyonrails.org/ watch the screen cast by David Heinemeier (I can never spell his last name) highly recommended.

After going though some tutorials, I created my first app Woohoo!. You guessed it a task list/to do list you were thing Hello World right?, the thing was I didn't know how to create and bind it to a data source. I quickly searched for some code. It turned out I was looking for the wrong thing, I was looking for a Drop Down List Box or ComboBox when I should have been searching for a Select list box "select" being the keyword.

Anyway hopefully this will come up next time someone from the asp.net world looks for something that exist in both worlds but is referred to by different names.

I finally found something in the http://api.rubyonrails.org/ documentation, below is one of several ways to create a drop down list box or is it a select box?

<%= select("task", "team_member_id", TeamMember.find(:all).collect {|p| [ p.name, p.id ] }, {:prompt => 'Select'}) %>

Pretty simple, lets run though the code to better understand what is what


  • task, being the name of the model this select box is related to

  • team_member_id is the name of the id field in your object, I just think of it as the field name in my table

  • TeamMember being the object, what the find is doing is selection all the records from what some of you may refer to as a look up table

  • If there is no team_member_id then the :prompt => 'Select' sets this as the selected item with a text value of 'Select'

  • p.name, p.id is the name of your object attributes or field names of your look up table, for those asp.net guys text and value


Not that hard when you think about it.

Google is a good information resource, but if your don't ask the right questions then you won't get the right results!

Two sure fire ways to succeed in software development

This article by Jeff Patton explains two easy ways to successfully develop software. So simple you can't fail.

Two secrets to success in software development are:

1. Start sooner

2. Build less software

This is sadly simple advice.

Agile development does try to short-circuit elongated research and design phases in favor of beginning sooner and continuing active research and design throughout the development cycle.

12 Best Practices for UX in an Agile Environment - Part 2.

Unfortunately reality doesn't usually allow for this well maybe point number two.

How to launch software the agile way

We've rolled out a lot of enterprise applications to a lot of users with a big critical launch date that can't move due to all of the communications and build up thats been sent to all staff and management. We have found that this is not the most optimal way to launch any new software within the enterprise or out to the public. In more cases than not this approach is just setting your self up to fail. In Aaron Swartz's post "How to launch software" he explains all too well the reality of what actually happens when software is launched with a big bang out into the public space. It's not pretty, as the public hits the application all at once as soon as its live crashing the application and servers and sending developers in to a tail spin ducking for cover to avoid the complaints and then trying to hack and patch holes all over the place.

The same thing happens in the enterprise, were new software is rolled out to large audiences of say 2000 to 10,000 employees. One nasty bug, crash or even just slow performance due to the intial swell creating a very bad first impression. In an environment where majority of the software is stuff staff have to use not want to use and basically view the software as just additional work to their already hectic daily work load a big bang launch could do more harm than good.

Using agile development methodologies based on an iterative approach new software and even upgrades can be released in stages as certain sections are available. There are a lot of benefits to this approach some being:


    - Smaller releases mean less bugs

    - Users can start the reap the benefits of the new section earlier (as most the most beneficial components of the software are prioritised and built first)

    - With each next release there is a new opportunity to communicate with the user based and reengage them into the software creating lots of smaller swells as apposed to the one big one

    - User buy in can be achieved by allowing them to provide feedback and suggestions for improvement based on their experience with each release of the software

      Whos doin wot

      Here at kmsystems our focus is Microsoft web technologies like ASP.NET, SQL Server, AJAX and so on however I always encourage my team to check out the environment and other web platforms. I believe in always learning and continual improvement and by using other platforms we can learn new and better ways to build for the web.

      So to try and lead the way (also eat my own dog food) I have been using the Morfik rapid web development platform for a while now and one of my first projects using the  Morfik is called "Whos doin wot". We have been using this tool internally and now I wanted to write a few posts about it and share it with you.

      Basically we here at kmsystems are a remote team and needed a way to share with each other what we planned to do for any given day. At the beginning of each day we post what we plan to do and then at the end of the day (or periodically throughout the day) how well we went against our plan. Also we wanted a very simple and no intrusive way to track how much time we were spending on certain projects. The problem with our other existing time sheet tracking tool is that we didn't fill it in until the end of the week (or even later for some of us like me) when time sheets were due. This meant that it became a struggle for the team as they tried to remember what did I do last Monday? With Whos doin wot we update the application daily if not two, three or four times a day so entering how much time you had spent on a project becomes second nature and not a painful chore.

      I didn't want to waste a lot of time and money building the application  as I wasn't 100% sure it was a good idea yet. I could have quite easily built it in asp.net with a SQL server database but had been playing around with the Morfik rapid application development platform which is super quick and takes the least amount of effort. So I thought it would be the perfect project to put my Morfik skills to work on.

      I have set up a dedicated blog for Whos doin wot so please visit us if you are interested in using the application and red some more about the development.

      Become agile

      I read a great post recently "Creating an agile environment" by Gregory S. Smith based on the book "Becoming Agile". This is a great article and well worth the read, the most important point that I took away was:

      An Agile team is successful because it is honest and project status is transparent.

      This is simple and easy to follow, it's how I try run kmsystems no hidden items just upfront and open. I want my clients to be truly involved in the development process, providing feedback, direction, ideas so that the solution we deliver far exceeds their original expectations. Most times getting clients engaged and involved is not as easy as you think. Not from any fault of their own they already have a million things on their plate and just want you to go away and come back with a solution. Unfortunately the hit rate of mind reading and interpretation isn't that high so more likely than not if the client doesn't get involved the outcome will not be what they are after and definitely wont exceed any expectations.

      Another interesting point the article raises is around change

      Many people still believe requirements change because they are poorly managed. They cannot comprehend a process that embraces change.

      It's time to face it and admit perfection does not come without evolution and never stops. Change is important in software development. I used to tell my guys that they had to write super flexible code because tomorrow I'm going to ask them to change it.

      I've summarised what I thought were the important points Gregory's post

      Practices that foster an Agile culture. Practices such as high customer involvement, testing early, and collaborative decision making

      An Agile manager will never write a line of code, never document any requirements, or test a feature. What an Agile manager will do is:

      * Help the development team track true status
      * Encourage the automation of redundant, repeatable tests
      * Mentor the team on Agile processes and demonstrate the value.
      * Help the team break the work into small chunks that can be delivered quickly.
      * Ensure the work being delivered is in tune with the customers need.

      Attributes of an agile environment:

      * behave in a way to enhance human relations.
      * “Just enough” planning
      * Always ready to stop, drop, and deliver
      * Unrelenting pursuit of customer value
      * Ensuring technical excellence
      * A great collaborator, communicator, and relationship builder
      * Leading the team to ownership
      * “The Scrummaster”
      * An Agile team member does not fear uncertainty. They look forward to the challenge and they know they will succeed.

      Web development made easy

      Developing applications for the web is becoming easier and easier and in the near future I believe developing web applications will be as easy if not easier as it currently is for desktop application development. A lot of the hard work that goes into creating data access, business logic and presentation layers that initially started out with developers having to code 1000s of lines of code by hand is becoming automated allowing developers to focus on more important logic and getting applications completed faster and cheaper.

      I've spent a fair bit of time using the Morfik web development platform a rapid application development platform. I must say I have found it to be amazing and the quickest development platform I have used so far. Stay tuned as I will do some more specific posts about my Morfik experience soon.

      Even though I think Morfik is great I am still drawn back to my favorite ASP.NET mainly for the reason that I have been using it for around 5 years now and it has without a doubt the biggest developer community. I just stumbled upon a new web service called Iceberg which makes developing web apps in ASP.NET super easy. So easy that anyone can do it, they claim you can build a web app in 5 minutes. From what I have seen Iceberg is similar to Ironspeed and an internal application we have built that helps us build around 60%-70% of the application framework in a few minutes. Then the real work is building in the business logic.

      As you would know ASP.NET is our primary development here at kmsystems and we have built over 60 enterprise ASP.NET web applications. My team and I will give Iceberg a run and will let you know how it goes. Heres a quick demo of Iceberg

      [viddler id=eb002671&w=437&h=370]

      Agile development - with flash

      I wrote this post on my personal blog about how cool I thought the Xero accounting application is. With the number one thing being collaboration, being able to provide your accountant, book keeper, ad visor, coach whoever real time access to your financial info changes the way small to medium enterprise currently do business.

      Philip Fierlinger from Xero posted some excellent slides about agile development and getting real. I don't know if you really needed to use flash, I'd prefer to just go straight to HTML but whatever works for you as long as it quick and easy.

      [slideshare id=103337&doc=xero-better-by-design84&w=425]

      If you are interested you can see Phil in Sydney at the Oz-IA conference

      Incremental changes and inconsistent design

      Just read a very interesting article "The Quiet Death of the Major Re-Launch" on UIE about applying small incremental changes to your web site instead of the old method of redesign the entire thing with a massive roll out often sending your visitors it a tail spin of confusion. Even though we don't build web sites as such we build web applications this is the same approach we apply. This way we can actually get changes and improvements out to your customers much quicker and faster. Also testing and bug fixing is quicker and simpler as we can focus on smaller sections not the entire platform.

      This paragraph

      Our findings show that consistency in the design plays second fiddle to completing the task. When users are complaining about the consistency of a site, we've found that it is often because they are having trouble completing their tasks. On sites where users easily complete their tasks, the users seem to pay little attention to glaring inconsistencies, often telling us in their ratings that the site was indeed very consistent.

      This sings loud and true to me as we have found the same. Some of our applications are lets say design challenged with different fonts, poor colour combinations, buttons that don't look like buttons, etc. Users don't raise design as an issue as application allows them to get what they want done and gets out of their way. Other applications we have built have not been as easy for the user to get what they want done and makes them think "where's that button for xyz". With these applications the issue of design consistency is a concern.

      Obviously design is a very important element of any application or site but being super critical of the layout can sometimes just get in the way or your users. The application is great to look at but to actually get the task done maybe compromised.

      What has your experience been?

      SQL Trigger: Enabling/disabling

      You may come across a time when you want to INSERT additional records into a table. But the INSERT statement may have been using a TRIGGER, which may affect other tables. In this scenario, you can use enable/disable properties of the trigger rather than deleting and re-creating it again. Just use the following:

      ALTER TABLE yourtablename DISABLE TRIGGER ALL

      --Here write your additional script

      ALTER TABLE yourtablename ENABLE TRIGGER ALL

      Django Subversion Installation on Mac OS X

      I recently installed Django on my MacBook Pro and thought I would share my experience. This is what worked for me. I'll keep it brief, you just want to get developing right?

      What you will need:

      Nothing! Python and Subversion are installed by default.

      Start the Terminal session:

      This will take you to your user directory (not the root).

      You will see something like this.

      CPE-58-168-138-49:~ Dien$

      Checkout/Grab the Framework Code:

      Enter this at the prompt (you may need to prefix with 'sudo' if you get permission problems). I created a directory at the user level named 'Frameworks' to house it.

      svn co http://code.djangoproject.com/svn/django/trunk/ /Users/[user]/Frameworks/svn_django/

      Note: [User] being the current logged in user.

      Linking it up:

      This lets Python know where Django is.

      ln -s /Users/[user]/Frameworks/svn_django/django /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django

      Note: Depending on what version of Python is installed you will need to substitute the version no. e.g. '2.5'. You can see the version no. by simply entering 'Python -V' at the prompt.

      Test it:

      Start the Python interpreter, just type in 'Python' from the terminal.

      You should see something like this.

      Python 2.5 (r25:51918, Sep 19 2006, 08:49:13)
      [GCC 4.0.1 (Apple Computer, Inc. build 5341)] on darwin
      Type "help", "copyright", "credits" or "license" for more information.
      >>>

      Enter 'import django' if you get no errors then Django has been installed correctly.

      Linking django-admin.py:

      ln -s /Users/[user]/Frameworks/svn_django/django/bin/django-admin.py /usr/local/bin

      This allows you to run the 'django-admin.py' from anywhere instead of qualifying it each time.

      Testing django-admin.py:

      You know it works when you enter it from the command prompt and get no errors.

      CPE-58-168-138-49:~ Dien$ django-admin.py
      Type 'django-admin.py help' for usage.

      This just means that you need to specify a switch for it e.g. 'startproject [project name]'.

      All you need to do now is follow the tutorials located in found in the Django Documentation.

      Which back button?

      There are two types of people in this camp, those that think web applications should be able to work in a browser-less environment (All toolbars, address bar, etc turned off) where the visitor has no access to the browser back button and therefore the application must compensate for this. Then there are those (like me) that feel the browser back button is already there and works fine and users know how to use it so let them use it. It seems to me that by building navigation so that the visitor can go back in the application is just re-inventing the wheel which is not really needed. Also research has shown that the browser back button is the most commonly used button on the web (around 30%).

      Google provide users with a Previous button to allow users to navigate to search results on previous pages, I just wonder how many people actually use this Previous button. I must admit I would normally just hit the browser back button.

      The main negative that springs to mind if you run an application in a browser-less environment then the application navigation needs to be absolutely perfect otherwise users will end up at a dead end with no way to get back.