Wednesday, October 2, 2013

WebSockets is the way forward

One of the great frustrations of developing any Web based software system is the request driven paradigm that the HTTP protocol demands. The user sends a request and the server responds, based on some further user interaction further requests are sent and responded to.  There are clever ways of circumventing this behaviour, but they have all been rather messy.

One big problem is that a request is generated on the client side either in HTML code or in some Javascript and then handed off to a handler on the server, there maybe many such handlers for different types of request. The response is then handled on the client side somewhere. It all get`s rather messy keeping track of where the request responses are handled and maintaining state. It reminds me of the bad old days of BASIC, where the GOTO command caused execution of the program to jump around. As code grew in complexity it became very difficult to track or debug. Developers were always discouraged from using GOTO unless absolutely necessary. The current web architecture is effectively a mesh of such GOTO statements.

WebSockets re-introduce a much more logical networking paradigm. A connection is opened, where two-way communication can take place. It is much easier to maintain state between the client and server and the resulting code is much more logical in it`s flow. Effectively a client browser session becomes a two-way messaging session, where either side can request and respond. Not only does it open up new possibilities, in terms of functionality but it also makes the resulting code much more intuitive and maintainable. A standard client-server architecture can now be applied to Web applications.

I have recently started learning Node.js and Socket.io which has the added advantage of being almost entirely Javascript based. This has the added advantage of not having to switch between client and server side languages. Whilst Javascript is no doubt "quirky" (Closures, Callbacks and Functions passed around like potato's)  , the consistency gained from sticking to one language is in itself very valuable. For one thing developers don`t have to master two or more languages. Furthermore patterns used on the server side can be reused on the client side which creates a far more homogeneous code base.

Another interesting effect, is in the design phase. Whereas previously web application design involved a seemingly complex set of interactions (depending on your design methodology), it now boils down to designing a messaging protocol. For example a standard POST (sending back form data) would involve creating an HTML form with some action (a URL) and on the server side a handler to process the data and send back a response (which may have been a new HTML page or something simpler). Over a WebSocket the same form data can just be sent as a message to the server and the server can respond (or not) as defined. The actual coding although arguably slightly neater, is not the main consideration here, rather the concept, which becomes much simpler to understand and hence design.

I am very excited to see where we can take WebSockets and the effect that it will have on development time, functionality and maintainability of Web applications.

Wednesday, August 14, 2013

Client responsive design

We are no longer in control of the devices on which our media and services are being consumed. They are becoming more varied and numerous in their differences. This is not a new problem, we have been faced with this issue for some time. Previous best solutions revolved around detecting the device capabilities at the server side and making intelligent choices to render the appropriate, fit-for-purpose content on the user device.

This solution requires constant updating of the server side logic to account for all the new devices, this is a complex activity, prone to error and cannot possibly account for all the possible variations. Most recently there have been changes in the capabilities of most modern devices. (1) They have sufficient computing power to work out how to render their own content (ignoring legacy devices for now) (2) Most modern devices can run client side scripts to interpret data and render this data appropriately (3) We can define all web applications as services that create update or delete data based on some user action.

As computing power increases, the solution to the problem of an eco-system of differently capable devices is to develop the rendering technology that allows the device to render the multi-media content based on it`s capabilities. This removes the complexity of having to make smart choices on the server-side and having to maintain such heuristic information.  We are certainly not there yet. Many, many companies face the burdon of having to develop their Internet/Mobile offering a number of times to meet the demands of the current devices on the market. Often they can only target those devices that are most popular and have to ignore those that have less market share. This has the unintended consequence of further marginalizing the small players in the market, since their users cannot consume the media that users of the more popular devices can.

Although it is not in the best interest of the major players to do so, I believe that we will move to a more "open" system where media will be delivered and interpreted and finally rendered by the device. This requires some significant work in defining standards and frameworks that will allow this to happen.

Friday, August 9, 2013

Coming Soon ....

It's all about data ! Bandwidth will become more freely available at lower cost. Mobile Bandwidth will increase also with cost reduction as technology scales (4G, WiMax etc).

As this is all happening the Mobile device, Tablet, Laptop, PC and TV are converging. They are currently different devices, however the operating systems (e.g Android) and the user interfaces are going to continue to converge. Cloud (or remote) storage and services will mean that devices are less dependent on physical hardware on-site and almost entirely dependent on the Internet connection and local processor (see for example Dell's USB stick PC, Rasberry Pi or BeagleBone Black)

As the operating systems converge and thus the user experiences, developers will have more incentive to develop frameworks that work across all devices. Already technologies like WebRTC are being developed to allow complete media transfer between browsers on any device. This means file sharing, video, photo's without any special plugin software or application. Furthermore the possibility of phone calls direct from the browser (goodbye Skype ?) with technologies like SipML and Phono, built on WebRTC. So we are not far off making voice and video calls direct from our Internet enabled TV's.

The standard house or office phone is not going to be with us for much longer and the trend for telecommunications companies to handle more data rather than voice is going to accelerate. There will be a tipping point when the browser and device support is good enough to mean most households and businesses will be changing their telecommunication systems to be purely Internet (VoIP) based. How long after will most mobile calls also be delivered over IP ? Eventually new mobile specifications will be purely data based, i.e there will be no signalling and protocol for standard voice calls as there is today.

Touchscreens, gesture sensitive devices, voice recognition will integrate these new user experiences further into our daily lives, less typing and more speaking, moving ? Nod to call mother, cough to see webcam of the garden etc ...

Tuesday, October 2, 2012

Things Entrepeneurs should not pay for ...

Following my previous post, here are a few things that I don't think entrepreneurs should pay for.

  • Networking
I do not believe that paid networking events are necessary. There are many very good, free networking opportunities, especially in big cities. There are meetups, forums and many avenues to try before one needs to pay for a networking event. It might be worthwhile joining a long term group, but my experience of one-off paid events has always been a poor one.
  
  • Pitching
You should never pay to learn how to pitch, there is a world of information, examples and resources for free out there. You should use your family and friends as soundboards for your pitches. There is absolutely no reason to pay to learn how to pitch.   For that matter, I don't believe you should have to pay to pitch to investors (for example). Investors struggle more to find good opportunties than entrepreneurs struggle to find investment. As an entrepreneur you need to target the right person or people to pitch too and not have someone else organize this for you. 
 
  • Business Plan Writing
You should never pay anyone to write a business plan for you. It is the process of writting a business plan that is important and not the plan. Most sensible people soon realize that the business plan is mostly conjecture and not really a plan at all, at least not one that conforms to reality. Wirte the plan yourself, in so doing you will be learning. Don't pay someone to write it for you. It simply does not make sense to do so ! By the way the endless and boring debate over what should go into a business plan is a waste of time. Depending on the context of who the business plan is going to, it needs to be good enough to get their interest. Don't waste valuable time fretting over what should and should not go into the plan. Should it be a pitch deck, should it be 50 pages, should it be double spaced. Who cares ! There are great books that are short, others that are long, so what ? Great is great ...

  • Simple Websites
Don't pay anyone to develop a simple website, there are many ways of doing this for little or no money. Don't waste your money. You are going to pay way more than you need to and not get what you want. At first use the free stuff out there, does your blog work for purpose, can you use Facebook or similar, is there some free template you can use, is there some cheap template off-the-shelf. Far too many people waste time and money worrying about their initial website. More important is to prove the concept and get the business model behind it solid (ignoring the cases where your entire business is hinged on the web technology in question).

  • Search Engine Optimization (SEO)
Don't pay anyone to do SEO, it's a buzz word and very simple to learn the principles yourself. In fact it is so important that you might as well learn something about it on the job, without relying on someone else. Also, it is not a science, so don't be fooled. Certainly early on, you want to be innovative in promoting your online existence, assuming you are interested in that. Learn how to be creative here and use the tools out that are out there, will put you in a good/better position going forward. 

  • Analytics
Another buzz word. All someone can do with software is interact by clicking or entering data etc. This can easily be measured and the data anayzed. Don't be fooled into paying large sums for something that you can easliy do. Secondly, if you are not careful you land up with stats that you cannot process or make meaning of. 

Friday, September 28, 2012

Selling the Entrepreneurial Dream is not productive

There is a growing industry of consultants, incubators, accelerators, books and courses centered around the "dream" of being a successful entrepreneur. The reality is that most of the individuals or organizations making money in this space are useless. This is a sector of the economy that is unproductive and for the most part does not add economic value. 

The resources that any country has can be put to use in a number of ways. If these resources are applied in a productive manner, economic growth will ensue. However, misapplying these resources can generate no growth or contraction for the economy.

In a situation where young graduates are encouraged to innovate, to become entrepreneurs without the proper support, this is an un-productive use of resources.  These graduates might be better used in an existing organization (be it at a reduced rate of pay). Fueling this misappropriation of resources are a host of organizations, who make their livelihood by selling a dream, appealing to emotion rather than economic sense.  All too often I hear of events entitled "Master Class" or "Pitching superclass" etc. There is no quick fix to innovation or entrepreneurship and I shudder even at the names of these events. The participants in this industry are focused on "quick" courses, quick fixes with unrealistic claims. Education and support is not a quick fix and there are no quick solutions or methodologies that will make it work. If there were, we soon would reach a saturation point, where everyone would be successful and innovating quickly (unlikely to be sustainable). However, with proper and well considered education there would be some success and at least a number of well or more educated individuals and organizations.

Today, the focus is often on raising funds, pitching creating business plans. These things, however, are secondary to developing an idea into a business. Funding, pitching and planning comes after the development of the idea which is aided by some fundamental business and economic skills.  Resources would far better be utilized investigating market opportunities, teaching individuals how to validate a market and helping with process development (how to develop business, software and other processes).


Monday, September 10, 2012

The road not taken and the death of traditional retail

Fuel prices are increasing and they are unlikely to decrease in the near future. Time is valuable, in our fast paced lives it is a valuable commodity. Moreover, the amount of specialized products is also increasing and this trend is likely to continue.


The true experience below illustrates why traditional retail is dying and why data overload and inaccuracy is also going to become ever more costly. We will all need to use technology in more productive ways and once implemented to maintain the data which is an integral part of digital technology.

My grape vine arrived overnight in the post, ordered online and delivered by a courier company. The online instruction video insisted on planting quickly and using a "friendly" fungi applied to the roots, called "Mycorrhizal Fungi". I hopped into the car and headed down to the huge home superstore 7km from my house.

Once there I headed for the gardening section and scoured the huge isle for the Fungi. There are hundreds of fertilizer and other products in this section and despite taking my time, I was unable to locate the product. I was also unable to locate a staff member sufficiently experienced to know what this product was. The first few sent me on a wild goose chase around the building. Finally, I went to information and we were able to ascertain that the product does exist, but was out of stock.

I then did a search on Google for a nearby garden center and headed to the car. I followed directions, through heavy traffic, only to discover that the Garden center had become a garden training center and did not sell products to the general public. The data online was out-of-date and inaccurate. This episode took me 3-4 hours and I was unable to locate the product.

I arrived home, went online, found more than 5 suppliers of the product, purchased it and it arrived the next morning.

There is nothing very profound about this experience, however, it highlights the deficiencies of traditional retail. It also highlights the fact that generalist data sources will be hard to maintain and always develop inaccuracies. There will always be opportunity for niche databases that are limited in scope, but well maintained and accurate.

Traditional business will certainly continue to need to update their information infra-structure and online presence, meaning they will undoubtedly need to contract-in or develop competence in new technology areas. The ability to do effectively do so relies on human resources who are well versed in the application of this technology. This is an area which I feel has lagged behind the technology itself. There is little information, on how to evolve a business in this way and put more simply there are not very many good resources which deal with the process of software creation, whether it be a database, website or system of bespoke software ( this is the reason we created OpenCTO , in an attempt to improve the quality and dissemination of this information )

If, as trends suggest, we are heading to an ever more technology orientated economy, we should logically apply significant effort to ensure that this technology is produced and maintained efficiently and effectively. This would suggest that we invest significant effort in the processes needed to apply and later maintain this technology. Is this the case at present ?

I have spoken to hundreds of entrepreneurs who still struggle with relatively simple issues, getting online, developing websites and e-commerce solutions. Ensuring that what is purchased is delivered and correctly hosted. I have heard of numerous situation in large multi-nationals of the incorrect specification and application of technology, lack of redundancy, back-up, data integrity etc. The ability to deliver this aspect of business is only going to become more essential in the coming years.

PLEASE VISIT AND REGISTER AT OPENCTO - To create, focused on start-up ideas, a standardized lean methodology and process for the conception, design and development of Internet and mobile technologies.

Wednesday, May 30, 2012

Define, Design, Develop, Operate

Over the last five years I have met, talked too and worked with hundreds of technology entrepreneurs. Looking back I am horrified at the number of failed software projects I have encountered. From the now ex-wife, I heard about an entrepreneur who sank the family fortune into an ill-fated software project, outsourced to India. I met with the entrepreneur who had developed a web application without ever specifying it, naturally it never worked. I consulted with the astute businessman who after eight years was still nowhere near developing his software idea, due to a lack to sound technical knowledge, a lack of specification and software developers with no methodology. Moreover, I have received more calls than I can remember from disillusioned entrepreneurs who have fallen out with software developers, have systems that they want fixed or simply cannot get their vision implemented (in software).

In my view, these failed software projects are a very unproductive use of valuable resources, which, could be used for far more productive activities. Why do so many technology entrepreneurs fail ? Most of the cases above might very well have failed from a business perspective, however, most of them will never get to test their business models, as they will have failed way before they get to that stage. Why is this ?

If I were having a house built for my family, would I do so without specifying what it is I wanted ? Would I do so without sitting down with a professional and writing or drawing a specification, architecting my home ? Would I commit my money and time without seeing a viable plan and understanding the method by which the construction of my home would be created ? Would I not have a budget ? And finally, once my home is built, would I move in without making sure it is as I wanted and safe for me and my family to habitate ?

Why then do entrepreneurs, software engineers, project managers and technology developers undertake projects without following common sense practises that we see all around us in other disciplines ? This is a rhetorical question, but I would like to put down some of my thoughts on this :


  • Although software is used, it is not physical. Being an abstract thing, it is often treated that way. Abstract things are harder to imagine, harder to measure and generally harder to deal with.
  • Unlike hardware, the physical constraints imposed on software are very weak. This is especially true as speed and space become much less of an issue. 
  • The seemingly endless availability of software frameworks, libraries and technologies makes the software development eco-system a very confusing place. There is too much choice ! This choice is hard to manage. 
  • Hardware design does not change significantly as compared to software, over time. The software eco-system is moving very quickly and this adds confusion. 
In order to ground software engineering, we need to impose self-constraint. The more self-constraint we impose the easier the problem space. Contrary to what is practised in the world at the moment, we need more design discipline than for physical design, not less. If we stick to the fundamental basics of specifying what we want, designing the system, implementing the system with a consistent method and then testing and measuring what we have built, surely we can increase the rate of successful software projects ?

Please visit the OpenCTO project where we are trying to create better software development processes and methodology.