I was brought in to lead a team from a background in rich client development in building a real-time web product. The product offers real-time meeting management, with meeting attendees using their own devices (i.e. cross-platform mobile) to view content. The main features of the product are synchronised content, real-time voting, and peer-to-peer messaging. It would typically be aimed at providing voting for an AGM or at a conference.
At the point I joined, the team had built a prototype which needed work on its architecture to enable cleaner and simpler development of future features and better performance under load. I led this reengineering effort, focussing on 3 main areas: client-side architecture (replacing jQuery DOM manipulation with a MVVM framework and using in-house modules to remove repetitive and complex code), data access (redesigning the Entity Framework data layer for better performance, and splitting out some data into separate storage to remove bottlenecks) and real-time eventing (providing a more suitable way of accessing SignalR that would allow simpler development and testing).
To improve the quality of functional specifications and communication with the product owner and QA, I introduced the team to BDD style specifications, and also to TDD in areas of the codebase that were logic-heavy. This allowed us to have a low defect rate, and to have less churn in developing new features, improving the team’s velocity.
One of the main areas of the project was real-time web, via the new ASP.Net SignalR framework. I was heavily involved with load-testing, via spinning up Azure resources on demand, to fully test the application’s behaviour under load. We were able to identify an actual issue deep inside early builds of the SignalR library, which were causing messages to be dropped under certain conditions, and worked with the SignalR team directly on a resolution.
A main feature area that I led was the implementation of a rich content editor, so that custom pages could be made, and interact with other areas of functionality. I leveraged the ASP.Net Razor parser/compiler to achieve this, and designed a Domain-Specific Language of keywords to allow easy access to certain functionality, such as uploaded media, lists of discussion topics, and other dynamic content.
The main technologies used in this project were: C#, ASP.Net MVC, ASP.Net WebApi, ASP.Net SignalR, KnockoutJS, jQuery, Microsoft Azure, Entity Framework, SpecFlow, NUnit