6/26/2014

Importance of prototyping

During my last project it started to be obvious that the current technology stack in use will not make it into another year of existence.

Reasons: mostly because built with Java technologies that its commercial vendor stopped to improve. Usually this is what you would expect from open source maybe - it might seem that community can come and community can go and leave the project for good. But surprisingly for many this move was made by one of the biggest software vendor who also developed its own Java platform.

So the motivation was to made a big leap and to overcome the gap that was between this rather old Java EE5 platform with many vendor extensions and vendor's custom UI framework to a native vendor-agnostic Java EE7 with pure HTML5/Javascript frontend, clean JPA 2.0 persistence while keeping the highly modular SOA nature of the existing application.

I was tasked with the assignment to prepare such a technology prototype that could be easily presented to the end customer and the other important people.

The weight of technology decision stood on me. After some evaluation I have chosen AngularJS as a framework of my choice for building UI. I am not going to write here why I have not chosen this and that technology i.e. GWT, JSF or Vaadin framework and why AJAX in its original intention of exchanging HTML fragments over the wire is no longer big hit. I rather spread some word about the process of creating such a prototype.

  1. It's normal to start with some research - depending on how much time you get for building something presentable (in my case it was 3 weeks) you should spend like 1-2 days on this task. I think it's fine to devote your time in initial phase to watching some podcasts from the conferences to grasp the latest trends in the industry. It is also good to know whom to follow - what are the sound names in the industry - but basically this usually matches with the set of presenters in the technical conferences.
  2. Then you probably will need to learn one or two new technologies. It is inevitable if your technical prototype should bring some innovation. Maybe you were always the hard opponent of let's say Javascript - that does not matter. If all the sound indicators show you that a particular technology is trend then you must learn at least basics of it and give it a try. This phase should last around 3 days. You will not learn much in 3 days - but those 3 days will give you an impression whether your assumptions about the technology were right or wrong.
  3. After spending this time you probably already have some code snippets working. Now it's time to start planning. You should plan what kind of functionality your prototype should include. And make a priority list. No matter how good you are - you will never have enough time to include all of your desired features. So take some quiet time and make your priority list for desired features.
  4. I think now it is a good time to do a first clean up. You should spend some time on your project layout, do refactoring of the code snippets you have - prune not working samples etc. This should take like 1 day.
  5. Next thing to do is the major part of your work - building features to your prototype. Now it will be riskiest - because you may encounter many pitfalls and you might be diving into too much detail and try to resolve every single problem easily forgetting your plan. That's why it is so important to come back to your plan and revise it often. This last phase may last around 5-10 days and actually this phase never ends. As you add new features to the prototype - you also encounter new and new aspects of what could be done better because you learn as you go. Either you just leave a TODO in your code or it's also not bad to rework your code on a chance as a mental exercise and cleanup activity - which should again not last more than 1 day.
  6. Another side activity which however takes a significant amount of time is considering execution environment. It means where your prototype will run and where the customer will see it. It is not a bad idea to consider separate execution environment for your prototype - some company server or even better a public accessible cloud service. Presenting something that is running only at your personal notebook is not very cool. Clients nowadays expect that also samples are accessible anytime and anywhere - it's internet era anyway. Publishing to public accessible infrastructure has also some security and legal implications however - so please be aware of those. At least a login page and working authentication should be part of your prototype as well as secure access to the execution environment (SSH). The activity of setup and configuration execution environment may take from 1-5 days depending on your experience no matter what cloud provider say in its marketing materials.With functioning separate public accessible execution environment you give to your client the possibility to do his own presentations i.e. to his colleagues and also to access the prototype from mobile phone or tablet or I don't know what - maybe microwave oven.

I am also providing example of such prototype - this is the technical prototype built in March 2014
user/password: durdina/demo2014

Please note few details about the execution environment used:
  • it is for free because I am using 1-year free trial from AWS
  • the image for application stack is again for free - contains Linux, Apache, JBoss and MySQL DB and is provided by Bitnami
  • pm20.no-ip.biz domain name is again for free - to hide the IP address of your AWS instance (btw: this costs money at AWS)
So after all of this you can now do the presentation of your prototype to the customer ideally face to face and listen to his/her impressions.

Next time - using virtual disk image for common development environment.

0 comments :

Post a Comment