We help you produce usable and solid software
Areas we specialize inTwo pillars: development of user interfaces and software engineering
USER INTERFACE DESIGN
But understanding the data and operations that a user interface supports is not enough: its behaviour needs to be defined. How tasks are structured and what data are to be operated upon at which stage of the interaction are two crucial decisions.
Therefore, appropriate investigation methods need to be applied to find out usability mishaps and fix them. The best method depends on the kind of user interface and the development circumstances. Methods include: informal user testing, heuristic evaluations, eye tracking usability testing and A/B testing.
By applying techniques such as structured interviews, task analysis, contextual design, card sorting, sketching, personas, and scenarios, several types of prototypes are developed and evaluated to understand if the project is in the right track. The outcomes are validated design choices for user interfaces and requirements.
Compared to other approaches, FDD can easily scale with the complexity of the project and size of the team.
In some cases it makes sense to adopt model-driven engineering approaches where UML models (classes and state machines) are used to represent specific aspects of a user interface and tools produce the source code of the user interface or of test cases.
In IDS we develop tools that take these models as input and produce the source code of the user interface, or the source code of functional test cases. The benefits are evident: reuse of the models for different platforms, quick redesign of the user interface, fast generation of the source code of the user interface or of test cases, coverage analysis of test cases, and in specific situations even automated analysis of usability.
The benefit is that when requirements change, the problem space is seldom affected; hence little refactoring is needed.
The benefit is a system that can be thoroughly tested.
Testability metrics and tools for computing them provide a dashboard that shows how well the system architecture is defined with respect to testability. In this way, upper management can decide how to allocate resources so to reduce the technical debt embodied in the system.
Techniques such risk-based test planning and test case design, adoption of explorative and regression strategies, execution of unit, behavioral, integration, end-to-end tests have to be carefully tuned, especially if part of the tests are to be automated.
We join the team while they work on their project and we contribute by analysing what has been done and how, what results could have been achieved and how to proceed further. These sessions will allow team members to quickly acquire the needed skills in the context of the problem in which they are needed. Sessions can be distributed over time as appropriate to provide enough time for people to absorb and practice the acquired skills without disrupting the project’s schedule.
If time constraints limit the possibility of coaching, we can act as external consultants and carry out activities that were agreed upon with the client, in the areas listed above. Consultancy requires less effort from the client side as opposed to coaching. We will help the client track the impact of our work so that the value we provide can be measured on a regular basis. These KPI of our value-focused consulting strategy are always identified in collaboration with our clients before the consultancy starts.
Similarly to consultancy and coaching, a workshop is focused on a specific project agreed upon with the client. Activities are organized in hands-on lectures with a mix of theory and practice. Tthis way, each team member can fill project-related gaps and start practicing the new skills “the day after”, autonomously. We monitor these subsequent autonomous activities, but with less intensity than during coaching.
This solution is ideal for already experienced teams that need to fill a specific technical debt in a short period of time.
We provide training courses in the areas described above. Courses are organized at the client’s premises with a calendar that optimizes learning and technological transfer. Our approach is passionate and pragmatic, with a balance of sound theory and consolidated software engineering practices. Training courses are ideal for filling the gap (either cultural or technological) in a complex project, or to align heterogeneous teams in order to develop and share a common knowledge.