Must-have Application Development Skills for 2014


Following are some of the key must-have skills, every developer would want to acquire in order to create applications which align well with the technology trends of the coming year, 2014:

  1. Cloud readiness: As many applications have started moving into cloud, you never know when the application you have been working on, would also need to be moved to cloud. However, could any application be moved to cloud just like that? Not really. Following are some of the key characteristics that application would need to have in order to be ready to be moved to cloud:
    • High Performance: An under-performing application could end up utilizing lot of resources in the cloud and could prove to be very expensive. Given the fact that in the cloud model, where you pay by usage, performance flaws will have a more direct, measurable impact on costs by causing you to consume more cloud resources than you might otherwise require, it is of utmost importance to pay attention to overall performance of the application.  Some of the most common performance flaws that need attention are inefficient database queries, IO bottlenecks ( such as that caused by frequent logging), memory leaks, inefficient search algorithms etc. Thus, the developers would require to be very cautious about some of these performance flaws when they are writing the code. To summarize, developers need to be aware of performance engineering concepts including common code related inefficiencies that they could avoid while writing their code.
    • Design re-usable, easily distributed modules: As elasticity is one of key characteristic of cloud, it may be good idea to consider designing and creating independent and easily distributed modules which can be scaled up or down based on the needs. This would require one to write cohesive modules and components which could be done by following Robert Martin’s single responsibility principle. These kind of atomic, cohesive modules & components are highly suitable to run on distributed environments such as that of cloud.
    • Design for Statelessness: Generally speaking, in distributed computing like environments such as cloud, it is good to design for statelessness. The primary advantage is related with resource optimization for cloud. In case of stateful objects, one may need to maintain many instances of stateful object thus leading to resource crunch and prove expensive. This is because a stateful object holds onto data, information, or context that is important across the conversation of multiple calls on a given instance of that object. If an object is stateless, the cloud or the multi-core environment is free to use any instance of that object to get its work done. The statelessness characteristic can also help scale an application and also be available, in a distributed computing environment like the cloud because work can be load balanced onto whatever machine is most suited to do it.
    • Design for Resilience: Design in such a way that system should be able to recover from the failure. Some of the things to keep in mind are following:
      • Make sure data is written to database from in-memory on regular basis, if data is stored in-memory
      • Design durable message queues which can reload the state of the system
      • Design for asynchronous message processing appropriately
      • Design for graceful timeouts in case one or more part of application may hang.
    • Parallel programming: Developers may need to learn coding skills to write code that can run parallel across multiple cores in cloud environment. Mind you that parallel programming is not same as multi-threading.
    • Secured application development practices: Days are gone when the perimeter level security (firewalls etc) could have made your applications secured. Now, making sure that appropriate hooks have been put in the code is of utmost important and should be addressed in a holistic manner. For this to happen, developer needs to understand and acquire skills in some of the following areas:
      • Threat modeling techniques (STRIDE, CIA, DREAD, Data flow diagrams, Threat tree analysis etc)
      • Security coding practices to avoid some of the most common security vulnerabilities such as SQL injection, cross-site scripting (XSS), authentication & authorization, indirect object reference, function-level access control etc.
      • Security code review
  2. Mobile readiness: In 2014, many business would go mobile if they have not yet been, primarily because, consumers have all of a sudden started using their mobile devices to do their day-to-day business activities. Following is the key characteristic for a mobile-ready application:
    • API-enabled: A common strategy that many IT organizations are following is to identify and create APIs on top of existing modules and expose these APIs to mobile apps or mobile enabled websites. For this to happen, developers need to understand the nuances of what does it take to create APIs on top of existing applications. Many articles have been floating around on the web in relation with API-First strategy for application development. In this relation, you may want to check out a great video by Joshua Bloc on “How to design a good API and why it matters?“. Other great starting point can be another article such as Creating an API-centric web application.
  3. Solution readiness: The businesses are soon realizing that they need to have their business tightly aligned with IT such that they should be able to innovate much quicker than ever before. And, this is very difficult with the existence of large monolithic applications. The need of the time is to develop solutions (business-process based) that could cut across multiple applications belonging to different line of businesses (LOBs). This can be made possible by having service-enabled applications. Or, in other words, it is important to expose service on top of existing applications which can be orchestrated uniquely to deliver innovative business offerings in quick time frame. This would require developers to have a good understanding of nuances of service-oriented architecture (SOA) and also API-driven development. They may need to understand SOA design patterns to do a good job.
Ajitesh Kumar

Leave A Reply

Time limit is exhausted. Please reload the CAPTCHA.