I managed to “ambush” our CTO and collected his thoughts on some of the most pressing issues in software development. There’s a lot going on beneath and between the lines of codes you see on screen. As someone with a non-tech background, I got to hear stories from the other side, which is important for anyone wishing to boost collaboration.
Before we dive in, here’s some background information about Dylan. Overseeing our projects, he acts as a bridge between the technical and business side of things. And have I mentioned that he started learning about programming at the age of eight?
1. Bridging the Gap Between Software Developers and Project Managers
Why is this topic interesting to you?
Software developers need to understand the business context of the software they are building to produce the best solution to a problem.
There are many constraints on enterprise software: human, technology, business factors. Sometimes the best technical solution is warranted, but other times a less technically correct, but still functional solution produces the best outcome.
Alternatively, from a Manager’s perspective, it is good to understand exactly what you are asking of your developers to be able to get the best out of them, but still fulfill the demands of the business.
Check out our blog post on how to choose good software developers for long-term partnership here
What are some challenges that exist between software developers and project managers?
Software developers tend to focus on building the best technical solutions and minimising technical debt in the systems they develop and maintain. This ensures that the future risk to the project is minimised and gives them a sense of pride over what they have accomplished.
Managers on the other hand, generally have to ensure that the needs of the business are being met in an effective and efficient way.
How would these challenges impact an organisation?
The difference in focus between developers and managers can cause friction and an overall loss of morale among software developers or distrust from managers. As soon as there’s a communication breakdown, micromanagement would kick in.
Ultimately, productivity is affected and the outcomes decline in quality, leading to an environment of increased process and the driving away of talented developers.
What advice do you have for simple changes that engineers can make in their communication/collaboration styles? What about Project Managers?
Engineers and Developers should be aware that sometimes technical debt is a good thing - just like financial debt, which can be leveraged.
Creating software quickly with a little bit of likely debt means you test the waters and find areas where the business can succeed. Just like the financial kind, technical debt needs to be paid off over time. Otherwise, it can compound and take the whole software solution (and business in many cases) down.
Talking about it, and making sure that everyone is aware of the debt being taken on - is a great way for people to understand that sometimes a lower quality solution that gets to market on time is better than one that is perfect but late.
Sometimes the best technical solution is warranted, but other times a less technically correct, but still functional solution produces the best outcome.
Managers can help this process by giving the software developers information about:
- Context of the business including the opportunities and limits
- What the problems they are trying to solve for their clients or customers
By bringing them into the decision making process, managers can help developers internalise the need for compromise when required. Ultimately, trusting your team is a major component of creating a productive environment for developers.
When failures of communication occur, managers should ask themselves: “What context or information could I have provided that would have made it obvious to the developers that they were not going in the right direction from the outset?”
What tips do you have for bridging gaps, and how have they helped collaboration at our company?
Daily standup meetings in the morning with the manager present will let developers understand the direction the project is going in, and be involved in the short-term decisions which ultimately affect the project outcomes.
To create bottom up innovation, provide your team with all the of facts of the business and work with them to create solutions. It’s counter-productive to assume that upper management have all the answers to business problems.
Personally, I think that if you want to attract talented individuals, having a lot of restrictive processes won’t help. One thing that’s easier said than done is: cut the bureaucratic red tape and trust your developers.
2.The Biggest Software Development Trends in 2017 and Beyond
What will be the biggest software development trends in 2017? Why are they important?
The containerization of web services and the continuing move to microservices.
Docker, one such option for containerization, has grown exponentially in popularity.
Moreover, Windows Server now supports it, and all cloud services (including Amazon’s AWS, Microsoft Azure) have hosted Docker solutions. This signals much more software development will be deployed through Docker.
Enabled builds all of its web software on Docker, which has greatly improved the quality and time to market of products for our clients.
Also interesting is the move to microservices - “an approach to building software that shifts away from large monolithic applications toward small, loosely coupled and composable autonomous pieces.”
Think of microservices like specialised building blocks which can be assembled to do a great number of things.
Essentially, this technology helps increase the productivity of software developers, while decreasing the time-to-market for clients. With container technologies (like Docker) becoming more prominent, microservices have started to make practical sense for more companies.
Tools to ease transition towards microservices. Source: TechCrunch
How will these impact product development best practices at our company?
Containerization will allow us to create reproducible environments that can be installed on any hosting. This allows us to be more agile and produce a quality product within desired time frames.
Docker also lets us use the same productive toolchain on small single hosting solutions right through to large scaleable cloud services like AWS and Azure.
Microservices present appealing benefits when contrasted with legacy monolithic software packages. The latter generally claim to do all things but in reality, don’t excel in any. These monolithic packages also amass control, making it difficult to extend functions or integrate with other software.
Contrasting traditional approach with microservice. Source: TechCrunch
In contrast, microservices do one thing very well, and start with the assertion that they need to work well with other services to be useful at all.
Also, if a better microservice becomes available, it is simpler to swap the older one out. The same updating task would take much longer with a package like Magento, as you “couldn’t update anything without updating everything.”
As an example, Amazon, Netflix and Dropbox, to name a few, all claim to have cut development lead times by as much as 75% through a microservice approach.
We surely are going to watch the space and work with our clients to help the transition to microservices.
*This article has been edited based on the insights from our CTO Dylan Sale. Follow him on Twitter