Technical Knowledge and Skills
1. SOLID Principles & Clean Code
- What is your favourite SOLID principle, and why?
My favourite SOLID principle is Single Responsibility Principle (SRP) because it ensures that each class or module has only one responsibility. This enhances maintainability and readability, allowing for easier debugging and modifications in the future. - What is your least favourite SOLID principle, and why?
The Dependency Inversion Principle (DIP) is often considered the most challenging among the SOLID principles. It suggests that high-level modules should not depend on low-level modules; both should depend on abstractions. While this promotes decoupling and flexibility, it can lead to overengineering if not applied judiciously. Introducing unnecessary abstractions may complicate the codebase, making it harder to understand and maintain. Therefore, it's crucial to balance the use of DIP to avoid excessive complexity. The Liskov Substitution Principle (LSP) is also discussed on this menu. - Can you provide an example of how you've applied SOLID principles in a previous project?
While working on a scheduling system at Highfield, I adhered to the Open/Closed Principle by designing abstract base classes for schedulers. This allowed new schedulers to be implemented without altering the existing codebase. - How do you differentiate between good and bad coding practices?
Good coding practices focus on clarity, maintainability, and adherence to principles such as DRY (Don't Repeat Yourself) and KISS (Keep It Simple, Stupid). Bad practices often involve tight coupling, lack of modularity, and unreadable or poorly documented code. - What are your thoughts on clean architecture, and how have you implemented it in past roles?
Clean architecture promotes separation of concerns, ensuring independence between the business logic and external systems like databases. At Gillies, I used clean architecture by structuring the application into layers (domain, application, and infrastructure) while working on an eCommerce platform upgrade.
2. .NET Core and Associated Technologies
- Can you explain your experience with .NET Core Web APIs and MVC?
I have extensive experience developing .NET Core Web APIs and MVC applications, such as the Confirmly product for LMS. This included secure API development, integrating Azure services, and implementing unit tests with tools like NUnit. - Have you worked with Blazor before? If so, can you provide an example of a project?
I have little experience with Blazor, but my comprehensive experience with modern .NET frameworks would allow me to adapt to it seamlessly if needed. - Describe how you've utilised C# to develop scalable applications.
I used C# and .NET Core at Invest and Fund to improve a critical administration tool. By implementing CQRS and unit testing, I ensured scalability and robustness. - How do you approach containerisation in your development process (e.g., using Docker)?
At DFDS, I configured Docker containers and deployed them into AWS using Terraform and Azure DevOps. This ensured consistent environments and simplified deployments. - Can you discuss your experience with cloud technologies like Azure?
My Azure experience includes working with CosmosDB, Function Apps, App Services, and Key Vault while at LMS. I also managed virtual machines and storage for optimised cloud-based solutions.
3. Database and Messaging Systems
- Have you worked with CosmosDB or MongoDB? How do they compare?
Yes, I worked with CosmosDB while developing distributed systems at LMS. CosmosDB's multi-model and global distribution capabilities are ideal for high-availability systems, whereas MongoDB provides more flexibility for on-premise or hybrid environments. - Describe your experience with ServiceBus or other messaging systems.
At LMS, I implemented messaging systems with Azure ServiceBus for inter-service communication, ensuring reliability and scalability in distributed architectures. - How do you ensure data consistency and security in distributed systems?
I use techniques like event sourcing, transactional outbox patterns, and encryption to maintain consistency and security. For example, while working on an eCommerce solution for Gillies, I implemented transactional queues and secure APIs.
4. Frontend and Responsive Design
- What is your experience with React, Angular and TypeScript?
I worked on React, Angular and TypeScript at Keoghs, Entain and other companies, developing responsive UI components and maintaining state using Redux. - How do you ensure responsive web development using SASS, CSS3, and HTML5?
I use a combination of media queries, flexbox, and grid layouts to ensure responsive designs. Tools like SASS allow modular CSS structures to be implemented at the British Library for an Angular-based project. - Have you worked with mobile or desktop development frameworks like Xamarin or MAUI?
I have not explicitly worked with Xamarin or MAUI. Still, my experience with cross-platform tools like ReactJs and my knowledge of .NET frameworks positions me to work effectively with these technologies if required.
Justin Barnes Consultancy Ltd
2 Peter Lane
York
YO1 8SW
01904 310231