Software engineering has always been a fast changing industry, with the pace of change only accelerating. This is evident in every aspect of the industry: tools, methodologies, platforms, architectural approaches, languages evolution in organizations recognizing their value and shaping up what it means for them.
Looking ahead to 2020, we anticipate the end of two antipatterns we have observed during this past year.
The term “rockstar developer’’ is as old as the engineering practice and this year we saw a rise of a new myth of “10x engineers.” For those who didn’t follow the story, some people are suggesting that companies should, by any means necessary, retain individuals with damaging antisocial behaviors for the sake of their perceived individual output.
This thinking has been criticized by many and for a good reason. Building a software product is a team sport where people with different backgrounds and skills working together produce the best outcomes. We’ve always believed that collaboration brings out the best in individuals, making them even greater. Great teams achieve great results. Building and retaining rockstar teams (or 10x teams if you like) is what we’re focused on.
Almost every project we worked on that required reengineering of an existing system started out with the same request - “I want it just like it was new.” We did our best to get a fresh perspective in and to restart the [product engineering](/blog/2019/11/26/product-engineering-is-what-you-have-been-looking-for/ target="_blank") process by focusing on actual business needs and customer wants. The idea is to avoid being blindly guided by what has already been built into the product.
By digging deeper into a project like this, it quickly becomes evident that customers are not using at least 50% of the existing functionalities and that there are so many pain points to work on to satisfy the end users and make their lives easier.
OK, let’s say goodbye to antipatterns and move on to good practices that will emerge as the key 2020 software development trends.
Even though many large organizations are still keeping their apps on their own infrastructure, the cloud is winning over due to the ease of use, services provided, and maintenance-free environments. In 2020, we are going to see more cloud usage than ever.
Cloud providers are locked in a heated battle to signup and retain users. They achieved parity on the core functionality and now they’re trying to beat each other by introducing additional services and improving on developer experience.
Word of caution - due to rapid release cycles, many new cloud services are not production ready and may lack the needed documentation. Before you commit, make sure to asses the solution and see if it works for your needs. The alternative is to use some of the available open-source technologies or treat the app architecture as a multi-cloud one i.e. combining services from different cloud vendors.
The number of connected devices is growing each day and making our lives a lot easier: smart sensors, smart homes, utility robots, self-driving vehicles, and smart connected cities. This, however, means that engineers now need to process huge amounts of data at scale with zero downtime. The connected devices are becoming more complex as well as the models they need to execute.
Thanks to the great open-source tools for stream processing like Kafka and PyTorch for ML that allows you to run ML models on the edge devices, you can now run this on your own infrastructure, vendor-free.
However, maintaining the infrastructure can be cumbersome and there are some really good cloud services that can make your life a whole lot easier. Check out Google IoT core or AWS IoT Core, both great options to help you build your next IoT project.
With the increasing number of services and microservices that your app uses, it becomes difficult to ensure that security rules are enforced properly across the stack. Security by design, promoted by AWS, is a pattern to follow when designing your next architecture. Some of the principles to follow: design for failures, plan for breach, think what is possible and not what is now, and treat infrastructure as code - modular, constrained, and versioned.
In recent years, there has been a lot of development on this subject and there are some great tools like Open Policy Agent that can help you specify policy as code and offload policy decisions from the software. This works across the cloud stack and services, too.
Functional programming paradigm is gaining popularity and we will see more languages and extensions improving on this field. This is a great development as it allows software engineers to make better decisions and write more resilient apps leading to better quality.
We have been using Scala for years and still stand by it, but we recently noticed a huge increase in use of Kotlin. With the release of Arrow, its functional companion, Kotlin becomes a very attractive programming language and its popularity will only grow in 2020. Another thing to adopt in the JVM ecosystem is Reactive Streams approach - e.g. checkout Akka Streams - implementation in Scala/Java.
More on the JVM side - if you didn’t check GraalVM, now is the time. It is a universal virtual machine to write languages in JVM languages or other LLVM based languages. It removes the isolation between programming languages and enables interoperability in a shared runtime.
Cross-platform mobile development is getting better. React Native is what we have been using for years as it provides a way to create native-like apps. It is easy to step into the native code when needed and use React Native for the UI. One other contender in this field is getting our attention and we will be assessing it for future projects - Flutter.
React continues to be our choice when it comes to web development. Tooling is becoming better and better and with the release of react-hooks, it provided a way to create cleaner components and easily share state across the app. React Styleguidist will help you in designing effective and reusable components but don’t forget to test the ui code you produce.
If you’ve been following our work you noticed that we’ve done a lot of work with NLP and delivered many conversational AI products. We’ve also been utilizing OpenCV to automatically recognize objects. All of this falls under narrow artificial intelligence (ANI) which focuses on a single subset of cognitive abilities and outperforms humans in some very narrowly defined task.
What we expect to see more is R&D towards AGI - artificial general intelligence which is the work towards allowing computers to apply knowledge and skills for autonomous learning and problem-solving. Think Jarvis or R2-D2.
Here is what we’ve seen as interesting milestones for R&D towards AGI in 2020:
- Microsoft invested $1 billion in OpenAI - the company founded by Elon Musk and Sam Altman focused on AGI research
- John Carmack (author of Doom and Quake) announced moving into AGI research
There are a lot of debates around the ethics of AI and heated discussions about whether or not it will end humanity in the future. We believe that AI is a human augmenter, extending our possibilities and allowing us to be more creative and better interconnected between physical and virtual worlds.
At SpiceFactory, we’re using and enhancing ANI to create personalized experiences in the products we create. Additionally, AI helps us make apps more secure through anomaly detection and usage predictions.
By the looks of it, 2020 will definitely be a year for developing best apps yet!