UK: +44 20 7193 4743 Germany: +49 34 645869004
contact@linhartdigital.com

Programming

Software Engineering. As it should be.

It’s More Than Writing Code !

With distributed application architectures, virtualisation and cloud environments the Software Engineering discipline has been facing challenges that go way beyond coding and compiling. Developers are versatile, mastering aspects of programming languages and frameworks, development techniques, code quality and collaborate as part of Agile teams using both software engineering and DevOps tools.

EXPLORE

LANGUAGES / FRAMEWORKS

Java – C – Go – JavaScript – PHP – Ruby/Rails  
Python – PowerShell – Swift – C#/NET – HTML
Kotlin – C++ – Scala – Objective C – Spring -JPA

READ MORE

CODE QUALITY

Clean Code, Secure Coding, Continuous Inspection, Unit Tests, Linters, Static Code Analysis

READ MORE

DEVELOPMENT METHODS

Pair Programming,
Test Driven, Behaviour Driven, Reactive Programming 

READ MORE

12 FACTOR APPLICATIONS

A framework for design, development and maintenance of scalable and cloud-ready microservice applications.

READ MORE

MICROSERVICES

A collection of loosely coupled scalable services, focussed on business capabilities and highly suitable for cloud environments.

READ MORE

AGILE / DEVOPS

An iterative approach to Software Engineering with short but highly efficient development cycles and use of DevOps tools and methods.

READ MORE

DEVELOPMENT TOOLS

Integrated Development Environments, 
Software Build Tools, Source Code Management Tools

READ MORE

CLEAN CODE 

Easily maintainable, extendable and understandable source code. Small classes with single purpose and concise APIs.

READ MORE

DOCUMENTATION

Self documenting code.
Curated documentation.
Code context documentation.

READ MORE
Software Engineering

Languages

Whether front-end, database abstraction, back-end service or build chain as code – we support a wide range of development projects using programming languages and frameworks

   • Java, Spring/SpringBoot, JavaScript
   • Node.js, Angluar, React, JQuery, Bootstrap
   • C/C++/C#, Python, Scala, Ruby/Rails
   • PowerShell
   • HTML, CSS, PHP, Perl
   • Kotlin, Swift, Go Lang
   
Our developers are used to working in Agile mode and can be part of your team remotely or onsite.
Enquire today if we can help supporting your project!
ENQUIRE
Cloud Readiness

Cloud Ready 12 Factor Applications

Distributed applications in cloud environments can be extremely complex. The 12 Factor approach provides a framework for developing scalable and cloud-ready applications.

Managed and revisioned code
Isolated Dependencies
Environment stored configuration
Backing service as resource
Build and run separated
Stateless processes
Service export via port binding
Restartable, scalable processes
Fast start, graceful shutdown
Identical DEV, INT, PROD envs
Event stream logging
Long running admin processes
Good Practice

Development Methods

TEST DRIVEN
(TDD)

TDD is an innovative software development approach where tests are written, before writing the bare minimum of code required for the test to be fulfilled. The code will then be refactored, as often as necessary, in order to pass the test, with the process being repeated for each piece of functionality. 

BEHAVIOUR DRIVEN (BDD)

BDD has evolved from TDD. It differs by being written in a shared language, which improves communication between tech and non-tech teams and stakeholders. In both development approaches, tests are written ahead of the code, but in BDD, tests are more user-focused and based on the system’s behavior.

PAIR PROGRAMMING

Programmers work in pairs, one writing code (the driver) while the other one observes (the observer) and reviews the code as it is entered and injects short term ideas and strategically important ideas. 
This approach is an Agile development technique focussing on software quality by close collaboration. 

REACTIVE PROGRAMMING

Reactive Programming is by definition not a methodology but a programming paradigm required by and structured around applications concerned with data streams and the propagation of change. All programming is focussed on events delivered by data streams.
  

Application Architecture

Microservices

The mircoservice architecture style aims to strucure applications as a collection of loosely coupled  services. The services are organised around business capabilities and have a number of attributes that make them highly suitable for the use in cloud environments:

INDEPENDENTLY DEPLOYABLE

Deployable without dependencies to each other, automated and often containerised.

HIGHLY
SCALABLE

Able to dynamically adapt to workload changes by duplication and request routing.

EASILY
MAINTAINABLE

Maintained per services by small specialised teams.

LIGHTWEIGHT COMMS APIs

Standardised and lightweight communication interfaces such as REST.

MINIMUM CENTRAL ADMINISTRATION

Centralised administration is kept to a minimum. Admin processes are services.

HETEROGENEOUS TECH STACK

Services of the same application can employ various platforms and programming languages

Quality Software

Code Quality

The quality of code is often determined by the individual developer’s experience. Other factors are the availability of resources, time allocated and also the tools used for quality assurance. To effectively evaluate code as good or bad a number of methods and techniques must be employed:

REGULAR REVIEW

Regular and stuctured reviews enable improvement through the sharing of expertise and adherance to coding standards defined in a project

CLEAR METRICS

Clear definition of qualitative and quantitive metrics such as extensibility, maintainability, technical debt, complexity, duplication.

CODE ANALYSIS

The structured analysis of source code (automaded or manual) to detect vulnerabilities, functional errors, duplication, deficiencies or weaknesses.

AUTOMATION

Continuous Code Inspection supported by tools such a SonarQube or Veracode allows for comprehensive analysis that is fast and effective. 

TESTING

Structured functional testing puts the focus on business functionality to be delivered by software and reduces the amount of irrelevant code.

Efficient Development

Agile and DevOps 

DEVOPS

DevOps is a set of methods, tools and processes to support Agile Software Engineering.
Software and operations engineers work closely together across the entire product lifecycle, starting from the requirement stages, through development all the way to operational production support.
DevOps promotes a high degree of automation and relies on an integrated set of solutions, a “toolchain”, that will speed up build processes, test cycles and product deployment.

READ MORE

AGILE SOFTWARE ENGINEERING

Agile is an iterative approach to software engineering that is more cost effective, delivers quality software without the need for rework and allows for predictable resource requirements and delivery timeframes.
Stakeholders are closely involved into the software engineering process and see immediate value on their investment through short development cycles and transparent project metrics.
DevOps methods and tools support Agile software engineering aiming at a high degree of automation to rapidly evolve products and seamlessly test and deploy into production environemnts.

READ MORE
Software Engineering

Development Tools

Our Software Engineers use a wide range of development tools. Whether IDE’s, Source Code Management, Build Tools or Continuous Integration – we are ready to hit the ground running as part of your project.

ENQUIRE
Good Practice

Clean Code

Clean Code is easy to understand, to maintain and to extend. 

• Each class has a minimal and defined purpose.
•  Public APIs are clear and concise.
•  Code is easily testable and covered with unit tests.
•  Tests are easy to understand.
•  Object collaboration is understandable and clearly defined. 
•  Methods have a single purpose.
•  Classes, methods and variables are sensibly named according to purpose.

At LINHART DIGITAL we care about and practice clean code. We ensure that  all code we write can be easily revised, extended and maintained by our clients.

Good Practice

Documentation

What is good code documentation? Code should be written well enough to be able to document itself while context documentation should describe roadmap information, external dependencies, application APIs and any other information that will help extending the application or improving it.

1

SELF DOCUMENTING CODE

Code is written in a way where purpose of classes, methods and variables is obvious from their naming and their interfaces. Cyclomatic complexity is kept to a minimum to ensure maintainability

2

CURATED DOCUMENTATION

Maintain documentation that is not part of the code close to the source by using tooling such as document management systems that link to code versions or, where suitable, store documentation along code in source control.

3

CONTEXT DOCUMENTATION

Enable readability and purpose of code by maintaining context documentation to describe the overall application purpose, it’s roadmap and APIs. This enables quick orientation and targeted code extensions or improvements.

Get in touch !

Let us know how we can boost your software project !

UK: +44 20 71934743
Germany: +49 34 645869004

contact@linhartdigial.com

GET STARTED TODAY