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.
[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.
[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.
[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.
- 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.
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
- 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] 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] 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.