Have a development need?
If you have a need for software engineering in Microsoft .Net - C# then do contact us with these requirements. You benefit from a UK based software consultancy. We can understand your business needs without involving reams of other technical staff, and will get the job done.
If you are an enterprise, it may be far easier to just get the development done by us than go to a hiring agency or advertising for the job.
Libraries are APIs
A library is a separate piece of functionality, reusable for multiple applications. When organisations try to build their own APIs internally, their internal business domain requirements leaks into them. Info Rhino builds agnostic libraries which are reusable and easier to abstract away.
An API is an endpoint which accepts arguments and returns information - typically XML and json data. We focus on separating functionality to facilitate reusability.
Remember, APIs and libraries are the same operations in different spaces. They may receive an input and always return an output. They are unopinionated and useful.
We build Libraries
Most intermediate and junior level developers build everything into an application. We develop on a continual development approach - we constantly refactor, moving code out of congested libraries. This is the exact opposite of how most enterprise development evolves. Code is considered locked in early, covered by unit tests, and nobody dare change it.
Instead, we focus on building what is needed, and ensuring code is as clean and structured as possible. The cleaner the code and the more test coverage - the longer the timeframe.
Our goal in building libraries is to leave clients with reusable code. However, if a client just wants something implemented, we can happily take this approach too.
Data connectivity and processing library experience
- Oracle ODP.Net
- SQL Server Entity Framework
- Dapper ORM
- ADOMD.Net (Cubes, Analysis Services)
- NetwonSoft json
Data, Business Intelligence, and C#
What sets Info Rhino apart from other software consultancies is our immense experience building reports, building data warehouses, implementing ETL, building and processing cubes. We have substantial experience writing PL/SQL, T-SQL, SQL, MDX, and other more esoteric querying language against document databases.
Clients can be assured that any C# development will be backed by a well-designed relational or analytic data model. We work with tooling such as SQL Server Project to ensure the database is buildable, which again gives assurance to the development and release process.
3rd Party API Integration
We frequently connect to APIs for retrieving data, and have written our own sophisticated scraping engines for automating handling of unstructured web content data. We are experienced in handling nested json data and moving it to more traditional relational data stores and data warehouses.
We are happy to create small applications to push data to public APIs if required.
Patterns, Unit Testing, Integration Testing, and Release Management
Our general approach
We focus on moving code to the right place as the project evolves. We only write unit tests when a complex calculation/evaluation is being performed. Indeed, we only write unit tests on our software as a means of understanding the task. It is a the way we communicate our understanding to other developers in the future.
In terms of SOLID principles, our code typically conforms to this approach, which leads to higher cohesion and lower coupling.
We use Dependency Injection and Inversion of control out of habit, but again, we don't have to.
Performance, Parallelisation, Multithreading, and Asynchronous Development
We have worked on large calculation engines, and had to really improve performance of these large applications. We have realised performance gains through micro adjustments. We regularly put Parallel execution into our processing applications, and will implement asynchronous patterns where necessary. However, there is a lot to be said for scaling out and not overburdening the software with highly complicated code.
We always prefer convenience over performance where it is clear performance is not the main focus. An example would be linq expressions. We have removed linq to achieve performance gains, but it is rare.
Wooahhhh - did you say you don't do much unit testing?
What about Test Driven Development? These are all valid and worthy pursuits, however, we are a data focused company and are more focused on data and outputs. We would rather use a data testing framework such as nBI, use Selenium to run tests on a website, inject json objects into unit tests, than hand-code thousands of unit tests.
We enjoy writing unit tests, so if you have a library which needs this work undertaken on it, feel free to contact us about this.
An important point to consider, if your code adheres to SOLID principles, it will facilitate test coverage implicitly.
Gang of four pattern based development
We are familiar with many of these patterns, but instead focus more on SOLID approaches. We will sometimes research a specific pattern or adopt our own consistent approaches to help convey meaning to our implementation.
We never set out to implement patterns for the sake of it. We would not use Hungarian notation liberally, and don't want this to get in the way of achieving the result a client needs.
Azure, Amazon Web Services, Web Hosting with C#
Our experience is solely Windows and Server based development. All websites we deploy are on a Windows Server hosting IIS. We have explored Azure, and Amazon Web Services on numerous occasions for our clients and our own projects. If you have specific needs, we work with many experts in these areas and are more than capable of implementing your needs.