Close
Written by
Konrad Łukasik

Konrad Łukasik

Technology Radar 2016

Developers, when a new projects starts and they want to choose a new framework
[Source: Andrzej Krzywda @ Twitter]

Young developers are keen on trying new technologies whenever they can 🙂 Those more mature know that not every shiny new thing will save us trouble and make us more efficient. They like known tools, languages, stable and predictable environment. This leads to a question: how to select the right framework, library or architecture for a new initiative? Obviously you can ask your peers, you can do a dedicated research or built a prototype, but you can also check our Technology Radar. I will not go into the details here, about what it is or how to interpret its rings, because I already covered that in previous post. Instead let’s see what have changed from Objectivity’s perspective as much water has run under the bridge since the last technical summary.

Technology Radar 2016

Techniques

[Adopt] Test Pyramid – in theory, it is a just simple concept that proportion between different kinds of tests (UI-, Integration- and Unit- Tests) should look like a pyramid. In practice, it starts with understanding (within teams) that cost of different types of tests is different. When automated tests are distributed incorrectly, their maintenance costs a lot of effort without the expected benefits (like: fast feedback or cheap regression). Overlapping tests are waste. Moreover, the whole situation manifests itself with large number of bugs or high tester-to-developer ratio within a team.

Understanding of costs leads to proper testing strategy when closer collaboration between team members can reduce drastically testing effort, especially in long-term projects. Finally, we can observe changes in team’s mind-set, when testing is not some task just for testers once the development has finished, but it is crucial part of development cycle. Ideally, developers and testers are jointly responsible for quality, testing and automation. They, all, choose the right testing pyramid for new features, so that:

  • Cheap and fast Unit Tests cover most test cases
  • Integration tests really cover integration scenarios
  • UI tests focus on key user journeys

[Adopt] SPA per feature – a way to introduce new front-end programming techniques into the application in maintenance or legacy phase. It is far easier to introduce SPA in a project for a module or flow rather than for whole application.

[Trial] Robotic Process Automation (RPA) – an approach usually applied to automate repetitive, high volume and rule-based activities by imitating pattern-based human interactions with software and hardware. RPA provides significant improvements in accuracy, cycle time and increased productivity of operations, producing more space for creative tasks.

So called “robots” can be created with different tools available on the market like Blue Prism or UI Path – usually without a single line of code developed. It can be used as an alternative or a complement for bespoke software solutions, wherever a business process performance boost is expected at a lower cost and with short time delivery.

[Trial] Code show & tell – a regular meeting, for about one hour, once per sprint, between teams working in the same programme to present and discuss:

  • Interesting pieces of code or solution to some tricky problem,
  • Generic project controls and patterns that everybody should use (like sliding panels or inter-component communication),
  • Suggested changes, no matter whether they touch code or process,
  • Results of refactoring,
  • Changes in deployment process.

The aim of the meeting is not to train people, but increase awareness of technical components and patterns, so that when the need arises team members know to whom talk to.

[Assess] DevSecOps – new move in software delivery minimizing friction between security practitioners and other involved parties; a marriage of SecOps and DevOps, popularising mind-set that “security is everyone’s responsibility”. It replaces security gate at the end of different stages of development with close collaboration between development and security and also brings in ‘security as a code’ to the table. Unquestionably a trend to monitor knowing an increased security interest after recent information leaks.

Tools

[Adopt] Visual Studio Code – lightweight, free and open-source code-optimized editor for modern web and cloud development (our clear winner in this area). It offers built-in support for multiple languages and being based on Electron and TypeScript, it is cross-platform (Windows, Linux, OS X). VS Code includes support for debugging, embedded Git control, syntax highlighting, intelligent code completion, snippets, and code refactoring. It is also customizable, so users can change the editor’s theme, keyboard shortcuts, and preferences.

[Trial] Chocolatey – a package manager for Windows based on NuGet and PowerShell allowing to automate software management. It installs, upgrades and uninstalls desktop applications without time consuming manual interaction. For developers it might help to minimize time spent on development machine setup.

Platforms

[Adopt] Apache Spark – leading, lightning fast & general purpose computing platform. In the same engine, it supports a wide range of different workloads like batch processing, interactive queries (SQL), streaming & iterative algorithms. Having unified stack, we can easily & seamlessly combine those different workloads in our data pipeline with minimal cost, while reducing the management burden of maintaining different tools. Under the hood all computations are run in the memory, in a distributed manner.

Even though it’s open sourced project and has number of contributors, including commercial ones like Facebook, it’s governed by its creators who work in DataBricks. Spark keeps evolving each day and recently 2.0 version has come out. It brings a lot of performance and memory usage improvements as well, which means it’s even faster than it used to be.

Recent highlights also show how well and fast Spark was adopted by many organizations all over the world. In other words, if you’re going to work on any distributed data processing project (Big Data), there’s really no better option than adopting Spark at the moment.

[Trial] PowerBI – a suite of business analytics tools with self-service BI capability allowing to:

  • Transform, analyse and visualize data (Power BI Desktop)
  • Share insights either via dashboard (Power BI on the web) or through interactive, embedded reports (Power BI Embedded), also from mobile devices (iPhone, iPad, Android)

It is cloud based BI service gaining huge interest in the industry and with the right investment from Microsoft it might successfully compete with BI products like: Tableau or Qlik, especially since software updates are released approximately every three weeks. At the moment this is a solution for small-medium system due to its low maturity:

  • Performance is questionable – report opens over 10 seconds even for small amount of data.
  • Still many chart types are missing – Bespoke development with using d3.js library and JavaScript needs to be done to get functionalities like: conditional formatting, display of raw data or deep navigation within charts.
  • Insufficient deployment automation (manual setting of parameters like: connection strings)
  • When used with Stream Analytics user can build report only on PowerBI web page. There is no possibility to use report built with PowerBI Desktop.
  • Visualisation limit set to 1000 data points on single chart.
  • Report template is a binary file, so there is no way to develop single report in parallel by two or more people as file merge is impossible

[Trial] Elasticsearch – is an open-source, distributed, scalable, and highly-available enterprise search engine. Main use cases are:

  • Elasticsearch as a search component
  • Elasticsearch as a log storage (Elastic Stack or the “old” ELK) – Logstash gathers logs from multiple sources and stores them in the Elasticsearch, while results are presentsed in Kibana.
  • Elasticsearch as a primary database – many popular and big companies (i.e. LiveChat, HipChat) started using Elasticsearch as a primary database, but such approach is difficult from the implementation side because it requires very well designed infrastructure and extra processes responsible for verifying whether data has been really stored within ElasticSearch.

Besides Elasticsearch there are more products belonging to an Elastic group. Among them you can find:

  • Beats, Logstash – used to load data into Elasticsearch
  • Watcher – alerting and notification product for Elasticsearch
  • Shield – used for secure Elasticsearch clusters
  • Kibana – analytics and visualization platform utilizing an Elasticsearch as a data source
  • The current version of Elasticsearch for production use is 2.x but it’s noticeable that elastic company promotes heavily version 5 (beta) and a list of improvements look very pretty.

[Assess] .NET Core – cross-platform, open source, and modular .NET platform for creating modern web apps, microservices, libraries and console applications. A promise of highly productive and efficient platform (8x better performance than Node.js and almost 3x better than Go) and the biggest transformation of .NET since its inception. Microsoft have rebuilt the foundation of .NET to be targeted at the needs of today’s world: highly distributed cloud applications, micro services and containers. Although in theory it looks fantastic, when we considered it for one of internal projects (July 2016), we found following gaps preventing from its use in commercial project:

  • Insufficient functionality of EF Core (group by executed in memory, no data seeds, no SP mappings, no lazy loading)
  • Only basic IoC container available (no version of Unity, Autofac in RC3 stage)
  • Unstable NuGet package for OData
  • Inadequate support for Unit Testing (no Resharper support, Mock in alpha version, no official support in AutoFixture, xUnit in beta)

[Trial] Salesforce – a platform (as a service – PaaS) for building business applications. It allows users to quickly create applications just by changing configuration. It is known as Point-and-click development as many elements can be quickly configured: objects, validation rules, workflows, layouts, reports, or mobile application.

More advanced scenarios can be developed by writing custom code in Apex (language similar to Java), HTML \ CSS \ JavaScript (also frameworks like Angular) and SOQL (similar to SQL). For custom code written in Apex, Salesforce requires at least 75% code coverage (by unit tests) before releasing code to sandbox and \ or production – this guarantees stability of application when platforms gets upgraded.

By default, Salesforce comes with preconfigured applications like CRM, Sales and Service.

Salesforce is best known as CRM system, but currently you can create almost any application with this platform – for example CMS, Call center, HR systems. Nice place to start learning Salesforce is Trailheads.

[Assess] Microsoft Bot Framework – “Bots are like new applications” Microsoft chief executive Satya Nadella said and they are becoming an integral part of one’s digital experience. Microsoft Bot Framework is a new tool (preview) to build own chat-bots. Using it, anyone can create a text program that they can chat with. Framework addresses generic needs of bot developers like: basic I/O, language and dialog skills, conversation state management or debugging tools and it integrates with multiple channels, among others: text / SMS, Skype, Slack, Facebook Messenger or Office 365 mail.

The Framework consists of:

  • Bot Builder SDK – an open-source SDK hosted on GitHub that allows to build great bots with Node.js, .NET or REST API
  • Bot Framework Developer Portal – where through registration you can connect your bot to desired channels
  • Bot Directory – a public registry of all reviewed bots enabling users to discover, try and add their favourite bots.

Built bots can be even more powerful when combined with LUIS, Language Understanding Intelligent Service, adding natural language understanding to your application. LUIS draws on technology for interactive machine learning and language understanding from Microsoft Research and Bing. With LUIS, you can quickly build custom language models with intents to handle users’ utterances.

[Assess] Alexa Voice Service – a cloud service which provides voice recognition, natural language understanding and speech synthesis. It allows to build custom skills (similar to chat bots) which are voice controlled. Voice-enabled devices can send audio data to the service (either via HTML5 webpage or via a custom native app) and receive audio response. The backend logic that handles user requests is a simple REST API which is triggered by Alexa Voice Service and provided with a JSON structure which fully describes the sentences spoken by the end user. The service comes to UK and Germany in 2017.

Languages & Frameworks

[Adopt] TypeScript – an extension of JavaScript syntax. A superset of JavaScript, so all JavaScript code is by default a TypeScript code – thanks to that it is easy to introduce it in existing project. It is definitely not a panacea for lack of JavaScript skills inside your team. Rather when you know JS, you can use TypeScript for higher productivity and to avoid typical JS bugs. Basic benefits include:

  • Type checking (JS is not strongly-typed language) – this leads to less errors and simplified refactorization
  • Ability to define classes, interfaces, modules plus simplified implementation of inheritance
  • compliance with ECMAScript6
  • support in IDE

More about the language is its specification.

[Adopt] Kendo UI – a very rich set of UI controls useful during development of web applications. Recent version comes with modern approach to visual components based on HTML5 and jQuery. OOTB we get ease of integration with AngularJS and Bootstrap. Kendo UI provides set of UI controls supporting also mobile devices and offline mode.

[Adopt] Jasmine – a testing framework for JavaScript. In natural way it forces BDD convention during process of writing tests. It is characterized by clear and intuitive syntax, which simplifies writing of tests. Independent from other JS frameworks and easy to enhance. Twhanks to big popularity it is easy to integrate it with other products (Node.js, Karma, Chutzpah, grunt, phantomJS) or embed it in automated CI process.

[Adopt] EF Code-First – widely-known modelling technique, not a novelty for sure, tried and proved in many projects and generally recommended. Works well in small projects, but may be problematic with multiple software suppliers working on the same system and all doing DB migrations. Should be used in early stages of development; later we usually need DB projects to handle more advanced situations in SQL or to align it with skills of dedicated team managing DB schema.

[Adopt] Scala – a JVM language that incorporates both object oriented and functional programming into concise and logical language. The main benefits are:

  • Support for immutable data structures by functional as well as object oriented paradigms,
  • Parallelism and concurrency out of the box, e.g. for Big Data applications,
  • Conciseness and less code than in OOP languages,
  • Statistically typed language that is safe and expressive.

Scala with its latest 2.11 version should be considered when it comes to scalable server software that makes use of concurrent and synchronous processing, parallel utilization of multiple cores, and distributed processing in the cloud.

Its functional nature makes it easier to write safe and performant multi-threaded code. It’s being used by some of the largest companies in the world (LinkedIn, Twitter, FourSquare, The Guardian, to name just a few).

[Trial] Aurelia – it’s a fully featured single page application framework implemented to support modern JavaScript code and leverage good practises. First stable framework version is publicly available, but some plugins are in development phase to be released soon such as validation or UI-virtualization. What is more, Aurelia supports writing code using ES5, ES 2015, ES 2016 or Typescript including integration with definitions, which is very helpful as well. In most cases, framework provides enough support to implement different application scenarios and promote clean code with very good website performance. For now, the biggest concern is growing community and low documentation available in the internet. If you come across issues during implementation, quite often you are on your own – you can play with the framework to find the proper solution, but (although growing) documentation and community support are still limited.

[Trial] ASP.NET Boilerplate (ABP) – a start-up template for ASP.NET web applications, either Single-Page or Multi-Page. With click of a button we get a project structure with bunch of preconfigured modules and libraries in a NLayer architecture (Domain, Application, Infrastructure and Presentation layers). What is different from “classic” Visual Studio template is the ABP framework that offers many features available “out of the box” to speed up your development. These are for example: multi-tenancy; validation and localization, background services (jobs), real-time services, and many more (listed here).

In our experience it’s best used for relatively small (targeting rather tens than thousands of users) and simple web sites (with no special constraints on Web API standards or authentication protocol) that needs to be delivered in short time-to-the-market with developers of mixed backgrounds / skills. Whenever you’d want 100% control of your code and the libraries you are using, then you should avoid ABP. In practice, we had to spent some time on “tweaking” generated code to adapt it to company standards (e.g. coding style for Angular views, controllers and services). We also had few bad experiences with debugging ABP in Azure environment (no PDB files in NuGet package).

There is also paid version of the framework, called ASP.NET Zero, coming with Material design UI (based on Metronic theme) and working pages (tenant maintenance, system settings, authentication, user & role management, chat system, etc.)

 

What do you think? Do you disagree with us? Did we miss something? Let us know in the comments!

Big thanks to: Kamil Buczek, Julian Ćmikiewicz, Tomasz Fajks, Mateusz Korżel, Andrzej Kowal, Adam Łepkowski, Bartosz Owczarek, Tomasz Saluszewski, Krzysztof Stanaszek, and Arkadiusz Starczewski for contributing to this post.

Share this post on

Tags

2 thoughts in Comments

  1. Konrad Lukasik

    Thanks 🙂

    Unfortunately full, interactive radar is not available externally as it stores sensitive information (e.g. people skills) and it is not possible to expose it securely w/o further development.

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *

Read next

Why training, wise books and podcasts are a waste of time, unless …

Judging by the number of articles that I see around me with titles like ‘10 habits that lead you to a great success’, and titles of books on the bestseller lists, the topic of how to improve your life is still relevant. I myself started fighting for the so-called self-development a few years ago. It all started innocently […]

Read more