5 Factors that Lead to Successful Custom Software Development
April 21, 2020
Looking for success? Come and get it.
Below you can find 5 factors that will provide you with what you want. The following knowledge and experience were harvested through vigorous execution and daily practising. I welcome you to take a cup of your favourite drink and relax comfortably in your seat. The comfort will be brought to you by the knowledge of these factors if you are already enjoying their results.
Key Aspects: Sustainably delivering measurable, specific and high-quality results
The purpose of a process is to transform an input to an output. In software development, the input generally could be considered to be the specifications. Detailed, specific and adequate requirements, specifications and acceptance criteria will provide for the specificity of the result and how well it will fit the business needs that previously have gone through proper business analysis.
In order for the process to do all this sustainably, it needs to be generating frequent constructive feedback and allowing iterative improvements (instead of incremental) or said in a more fancy way – it should be agile. And in each iteration, there should be specific goals. This is the way you will be able to measure your progress. Combined, through delivering sustainable and measurable results, the process will allow us to have control over the scope of the product that we are developing, allowing us to further have also the desperately craved by many predictability.
The process should be set up in the very beginning in such a way that it encourages all of the best practices and makes them easy to follow and their benefits easy to be seen and felt by all stakeholders. And please do not skip steps -you need to be in control of the software development process and the product itself, not the other way around. Do not lose control over the very thing you have created. In order for the process to guarantee the desired quality, you would want to have additionally thorough (automated) testing and validation.
And meetings. Oh, you will need them. As stated in the good old agile manifesto principles – ”The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.” Or as close as you can get to that, considering the COVID-19 circumstances currently – but please do not just have conversations, see each other when possible!
A process should be well-defined and suitable for the current needs and size of the team that people will follow with desire.
A good way to go about it is to rely on agile software development in all our projects, thus allowing us and our partners to be adaptive and maximize the generated value during our collaboration.
You can download some of our best development practices here.
2 Dev Team
Key Aspects: Productivity and expertise
Still here? Now we are up for a challenge. While processes are easily understood and predictable, people are not. And you know that. So what in the world is the recipe for a successful team?
But what if you embrace what you perceive as a weakness to become your biggest strength? What if you empower your team to take action, to reach for the opportunities? In agile software development, this is called a self-organizing team. And a key to unleashing people’s potential and making them thrive and flourish is by nurturing their proactiveness and creativity. And this will make people happy, and satisfied, and fulfilled. They will enjoy and have fun in what they do.
Such a proactive and fulfilled team will definitely be taking the best care possible of the partner that the software is developed with, as well as all of his needs. They will be thrilled to understand – the users’ needs, the business domain, to elicit specifications better, to ask more, to know more, to do more. They will be doing extra each and every day. They will feel important because they know what significant impact they have. They will take pride and ownership in everything they do. They will believe in the product.
This already sounds like a pretty good recipe for productivity, doesn’t it? No? Oh, wait – here come the interactions. In order for the different personalities in the team to match each other, the team needs to be balanced and stronger when together – they need to have different backgrounds and experience levels and they need to be respecting and appreciating each other’s differences.
Because only in cherishing what we are different about, we are able to reach and enjoy our fullest potential. In order to achieve that we need communication… communication… and more communication. And trust – between the team members as well as with the product owner and our partners.
The communication needs to be regular, clear, timely, with an understanding of the needs of the partner.
It is also really important for everybody in the team to know and understand what is the purpose and the value of each part of the process, each meeting and why the team is doing something.
Reaching a common understanding of such topics may take some time but will eventually improve the expertise of the whole team. A really crucial indicator of the success of the team is how much experience they have and if they are applying the best development practices. The team needs to know how to make reliable tasks estimations.
Believe in your team. Trust your team. They will eventually live up to your expectations, whatever they are.
Putting together a team of experienced and certified java experts, thus providing all of the assistance necessary and talent that you are looking for. We are proactive and we deeply and emotionally care about our partners and what we are building together.
You can read more about the culture of the people in our company.
3 Product Owner (PO)
Key aspects: Business experience, engagement and prioritized product vision
A good product owner is a person who is closely involved and deeply understanding the business and the domain. Preferably he has previously participated in other software development projects. It is highly beneficial if the PO has a basic understanding of software development principles and disciplines, the workflow, the nature of this creative work and the need for iterative improvements through refactoring all the time.
He should clearly know his responsibilities and be living up to them on a daily basis. He should be highly engaged in the development process and responsive to the dev team. A really important quality of a good product owner is his ability to prioritize, communicate clearly his goals and vision about the product. He should be able to provide for correct and sufficient specifications and be willing to participate in the refinement of design and functionality.
Often developers are being demotivated by sudden changes in requirements and specifications. This is something to be avoided and addressed when possible. This makes minimizing the change in priorities and increase in the scope after estimations are finalized an important (but not ultimate) goal for the PO. As stated in the agile manifesto – we value more “responding to change over following a plan”.
The PO should be a Visionaire. He should be able to inspire people, make decisions, lead and show the way to others. Combined with a suitable process, the PO should be enabled to create good and appropriate planning together with the dev team, that will be then executed.
Being a visionaire and setting clear goals, the PO should be inspiring the team in such a way that empowers and makes everybody believe in the product in the way that the PO does.
From experience, the product owner is usually someone on the side of the partner, thus providing all the business insight that is necessary.
You can read more about the different types of configurations of PO and development team here.
4 Partnership Management
Key aspects: Maximizing delivered value, care and clear communication
No successful custom software development could be possible without taking care of building the relationships between people and thus creating a real feeling of partnership, unity and harmony, a feeling of a greater purpose, that we are all in this together, unconditionally supporting and protecting each other on every step we take. In people we trust. It is people who create the software. And it is people who use it.
Partnership management is the secret ingredient that makes it all click together. It is about deep understanding, real connection, education of people and nurturing them. It is about maximizing the delivered value and empowering everybody to become one step closer to his best version of himself. It is the catalyst that makes the dreams become reality.
The partnership manager’s most powerful force is the communication, on all levels – business, technology and personal. He is the one ensuring the elevation of trust between the people. And he really needs to be very skilled in that area. He is the one ultimately responsible for properly managing expectations, ensuring that there are correctly prioritized features and specifications, reliable estimations, planning, scope management, ensuring a conducted proper business needs analysis, ensuring shared understanding of all development-related topics between people. He is the one responsible to ensure that everybody knows their specific responsibilities and understands them.
The partnership manager is the one responsible for choosing the right team and making sure that the right process is established for them as well as making sure everybody understands the purpose of everything in the process. He is the one responsible for developing and stimulating the necessary culture in the team.
Part of the responsibilities of the partnership manager includes motivating the people and establishing processes that motivate them. The cause and effect relationship of the results of his efforts go usually in the following direction: happy dev team (contribute for) -> happy product owner (contribute for) -> happy partners (contribute for) -> happy users.
The partnership manager is the most influential and powerful person and at the same time the diligent servant of each and every person in all of the people involved in the specific project. He is THE LEADER.
Partnership management is the process of governing the relationship with our partners or customers. Each partnership is run by a partnership manager (PM) whose main goal is to maximize the long-term value produced as a result.
You can read more on how to build partnerships instead of transactions here.
Key aspects: Suitable and enabling
I can feel the urge of all the tech people in the audience already. I’ve got something for you too. There are a few different types of tools that you need to think about. This is not an exhaustive list, rather a subset that can give you a guide about what you will need. It is important for the tools to be the right ones, they need to be suitable for the team, expertise, process and purpose of use as well as enabling and empowering the people using them.
You will need more or less of the following types of tools:
- Development languages, frameworks, libraries and application servers
Java, Jakarta EE, Spring
Angular, React, Vue.js
- Code generation tool
- Data storage
SQL (e.g. PostgreSQL) + DB version control: Liquibase, Flyway
NoSQL (e.g. MongoDB)
- Automation testing tools
Unit testing (e.g. JUnit), integration testing (e.g. Selenium)
- Backup mechanisms
Cloud (e.g. Amazon Web Services), on-premise
- Source control
git – GitHub, Bitbucket, GitLab
- Continuous integration and continuous deployment
- Requirements and specification management and task prioritization
- Documentation management
Confluence, Word / Google Docs, Excel / Google Sheets
- Communication – (video) calls, chat, official communication
Zoom, Hangouts (Meet), Skype, Slack
- Integrated development environments, editors
IntelliJ IDEA, Eclipse, Visual Studio Code, Sublime, Notepad++
- Design(er) tools – wireframes, mockups
Balsamiq, Adobe XD, Pencil, Paint, GIMP, Excel / Google Sheets
- Operating systems
Windows, Linux, Mac
In Dreamix, we are using java for most of our projects. Most of the projects also use either Angular, React or Vue.js on the frontend and relational or NoSQL database for storage. Apart from this core expertise of ours, all other tools can be selected based on what is needed and suitable.
You can read more on the top 10 Java libraries for saving time or the 5 java testing libraries every developer should know.
There were many experienced developers and business people that were interviewed for this article. It was interesting and at the same time comforting to observe that there were 2 factors that lead to successful custom software development that clearly and very strongly stood out – it was the people and their business domain understanding in terms of clear specifications, prioritization and product vision.
Let’s finish with something about end-users. Please, don’t overestimate the user’s ability to use the system without training. Your software should be guiding them as much as possible through the happy path of the particular business process, relying as less as possible on previous knowledge/experience of the end-user.
Looking for a partner or a caring consultation? Contact us.