Origin of the team
“Genetec is looking for motivated and curious mobile developers to create a brand new team in downtown Montreal.”
This announcement made in early 2018 was just the beginning for the developers who embarked on this adventure with the mobile team.
“A brand new team” … this aspect of the proposal is rare enough to make the challenge even more interesting. Of course, new talents have since joined us, but the mandate remains unchanged:
Accompany the Genetec product line by creating native, platform-friendly applications around common architectures and designs.
“Around common architectures and designs” … It’s the mojo of the mobile team.
We believe native technologies provide the best user experience and the best developer experience!
However, Android and iOS developers must be able to share programming paradigms and good practices opening up a world of shared learning.
View of Mount Royal from the Genetec downtown office
How do we make a founding principle a reality?
Our first act as a team was to bring together all the developers and lay the foundations for a common architecture and to define design tools across platforms.
The SOLID Principles
We will not explain the SOLID principles here since they are heavily documented (phew!).
We are, however, referring to them in order to establish satisfactory isolation of the concerns and to identify the mechanisms of abstraction in order to:
- share a similar breakdown in terms of application layers, thus respecting the principles set out by Uncle Bob in his Clean Architecture
- set up dependency injection mechanisms producing a testable and evolutionary code
Reactive programming & functional programming
These programming paradigms allows us to lay the foundations for a unidirectional data flow to:
- segregate side effects and asynchronous mechanisms
- rely on pure functions to ensure changes in the application state
- easily test our use cases as they are based on functions with predictable test results
The advantage of relying on these development techniques is that they provide agnostic concepts of the platforms. We are writing chains of functions whose syntaxes are extremely similar in Swift and Kotlin, thus facilitating the communication of best practices within the team.
Our army of Bugdroids
Architectures based on state immutability
We chose to manage the application state as the sole source of truth at the heart of our applications.
Benefiting from design decisions centered on an immutable and reproducible state brings us interesting guarantees:
- no change in the state can propagate uncontrolled within the application. Given that the state is immutable, any modification will spawn a copy. We also benefit from the ability of the Swift and Kotlin languages to offer sure ways to manage this immutability, whether with “value-type” data structures or data/sealed classes
- requests for state transfers are framed providing a de facto safe environment for developers
- concurrent state mutations are, by design, impossible
unidirectional data flow
A development team can sometimes behave like an old couple: you must constantly cultivate the flame and surprise each other 😏.
It is obvious that a team that rests on its technological achievements is dying; this is not interesting for anyone. The Genetec mobile team is a place where you have the opportunity to grow and develop.
We meet every two weeks as a full team to share our latest discoveries and advancements and to determine the possibility of introducing them in our applications.
Moreover, we attach great importance in striving to be an influencer to our community by regularly visiting local meetups, publishing technical articles on Medium, or attending internationally renowned conferences.
We are the “Wrecking Crew”
Demolishers: this is what we were encouraged to be when we formed our mobile team:
- demolish misconceptions about the cost of native development.
- demolish our code base to rebuild them whenever we deem it necessary.
It is extremely reassuring to know that the company encourages risk-taking and promotes the improvement of our technical expertise:
- we were able to introduce a progressive refactoring of our architecture on our first Android app only a few months after its first delivery with the support and encouragement of the project managers
- during the project, we did not hesitate to migrate our integration and continuous deployment pipelines to a new platform that offered us more features
- we’re already in the process of designing the next iteration of our common architectures to introduce more functional programming and to promote compositional techniques
Our team is a mobile center of excellence within Genetec. “With great power comes great responsibility”, the technical independence bestowed on us is accompanied by the responsibility for the quality of our achievements to guarantee the value of the Genetec line of products.
Interested in joining the Genetec mobile team?
Check out these jobs:
About the AuthorMore Content by Thibault Wittemberg