Introduction to Functional Programming in F#

Dive into functional programming with F# in our introductory series. Learn how to solve real business problems using F#'s functional programming features.

Datum

18.05.2022

content.autor.writtenBy

Ian Russel

Introduction

This series of posts will introduce you to the world of functional programming (FP) in F#. Rather than start with theory or a formal definition, I thought that I'd start with a typical business problem and look at how we can use some of the functional programming features of F# to solve it.

Setting up your environment

  1. Install F# (Installing the dotnet core SDK will install F#)

  2. Install VSCode with the ionide extension (VS2019 or JetBrains Rider will work as well)

  3. Open VSCode and open a blank folder to store your code.

  4. Add a new file and name it first.fsx

  5. Type 1 = 1 into the file.

  6. Highlight the code and press ALT + ENTER

  7. You should see F# Interactive (FSI) open in your Terminal and be able to see 'val it : bool = true'

If all is OK, let's take a look at a simple business Use Case and see how we can use functional programming in F# to implement it.

Stage 1 - The Problem

This problem comes from a post by Chris Roff (https://medium.com/@bddkickstarter/functional-bdd-5014c880c935) where he looks at using F# and BDD together.

Feature: Applying a discount
Scenario: Eligible Registered Customers get 10% discount when they spend £100 or more

Given the following Registered Customers
|Customer Id|Is Eligible|
|John       |true       |
|Mary       |true       |
|Richard    |false      |

When <Customer Id> spends <Spend> Then their order total will be <Total>

Examples:
|Customer Id|   Spend|   Total|
|Mary       |   99.00|   99.00|
|John       |  100.00|   90.00|
|Richard    |  100.00|  100.00|
|Sarah      |  100.00|  100.00|

Along with some examples showing how you can verify that your code is working correctly are a number of domain-specific words and concepts. I want to show how we can represent some of these in our code. We will start of with something simple but naive and then we'll see how F# can help us make it much more domain specific and as an added benefit, less susceptible to bugs.

Stage 2 - Initial Version:

Along with simple datatypes like string, decimal and boolean, F# has a powerful Algebraic Type System (ATS). At this stage, think of these types as data structures to use in functions. The first of the types we will use is the Record Type. We can define our customer like this:

type Customer = {
    Id : string
    IsEligible : bool
    IsRegistered : bool
}

To create an instance of a customer we would write the following below the type definition:

let fred = { Id = "Fred"; IsEligible = true; IsRegistered = true }

By using the let keyword, we have bound the name 'fred' to the this instance of a Customer. It is immutable (cannot be changed).

Delete fred as we don't need him.

Below the Customer type, we need to create a function to calculate the total. The function should take a Customer and a Spend (decimal) and return the Total (decimal).

let calculateTotal (customer:Customer) (spend:decimal) : decimal =
    let discount = if customer.IsRegistered && customer.IsEligible && spend >= 100.0M then (spend * 0.1M) else 0.0M   
    let total = spend - discount
    total

There are a few things to note about functions:

  • We have used 'let' again to define the function and inside the function to define discount and total.

  • There is no container as functions are first-class citizens.

  • The return type is to the right of the input arguments.

  • No return keyword. The last line is returned.

  • Significant whitespace (Tabs are not allowed).

  • The function signature is Customer -> decimal -> decimal. The item at the end of the signature (after the last arrow) is the return type of the function.

Function Signatures are very important; Get used to looking at them.

The F# Compiler uses a feature called Type Inference which means that most of the time it can determine types through usage without you needing to explicitly define them. As a consequence, we can re-write the function as:

let calculateTotal customer spend =
    let discount = if customer.IsRegistered && customer.IsEligible && spend >= 100.0M then (spend * 0.1M) else 0.0M   
    spend - discount

I also removed the total binding as I don't think it adds anything to the readability of the function. The function signature is still Customer -> decimal -> decimal.

Highlight the code you've written so far and press ALT + ENTER. This will run this code in F# Interactive (FSI) in the Terminal window.

Now create a customer from our specification and run in FSI:

let john = { Id = "John"; IsEligible = true; IsRegistered = true }

Rather than write a formal test, we can use FSI to run simple verifications for us. We will look at writing proper unit tests later in the series.

let assertJohn = (calculateTotal john 100.0M = 90.0M)

What you should see after running the test in FSI is the following:

val assertJohn : bool = true

Add in the other users and test cases from the specification.

let john = { Id = "John"; IsEligible = true; IsRegistered = true }
let mary = { Id = "Mary"; IsEligible = true; IsRegistered = true }
let richard = { Id = "Richard"; IsEligible = false; IsRegistered = true }
let sarah = { Id = "Sarah"; IsEligible = false; IsRegistered = false }

let assertJohn = calculateTotal john 100.0M = 90.0M
let assertMary = calculateTotal mary 99.0M = 99.0M
let assertRichard = calculateTotal richard 100.0M = 100.0M
let assertSarah = calculateTotal sarah 100.0M = 100.0M

Highlight the new code and press ALT + ENTER. You should see the following in FSI.

val assertJohn : bool = true
val assertMary : bool = true
val assertRichard : bool = true
val assertSarah : bool = true

Your code should now look like this:

type Customer = {
    Id : string
    IsEligible : bool
    IsRegistered : bool
}

let calculateTotal customer spend =
    let discount = if customer.IsRegistered && customer.IsEligible && spend >= 100.0M then (spend * 0.1M) else 0.0M   
    spend - discount

let john = { Id = "John"; IsEligible = true; IsRegistered = true }
let mary = { Id = "Mary"; IsEligible = true; IsRegistered = true }
let richard = { Id = "Richard"; IsEligible = false; IsRegistered = true }
let sarah = { Id = "Sarah"; IsEligible = false; IsRegistered = false }

let assertJohn = calculateTotal john 100.0M = 90.0M
let assertMary = calculateTotal mary 99.0M = 99.0M
let assertRichard = calculateTotal richard 100.0M = 100.0M
let assertSarah = calculateTotal sarah 100.0M = 100.0M

Whilst this code works, I don't like boolean properties representing domain concepts. To this end, we will make Registered/Unregistered explicit in the code.

Stage 3 - Making the Implicit Explicit (1)

Firstly, we create specific Record types for Registered and Unregistered Customers.

type RegisteredCustomer = {
    Id : string
    IsEligible : bool
}

type UnregisteredCustomer = {
    Id : string
}

To represent the fact that a Customer can be either Registered or Unregistered, we will use another of the built-in types in the ATS; the Discriminated Union (DU). We define the Customer type like this:

type Customer =
    | RegisteredCustomer of RegisteredCustomer
    | Guest of UnregisteredCustomer

It is very hard to describe a Discriminated Union to an OOP developer because there is nothing in OOP that is remotely close to them. This reads as "a customer is either a registered customer of type RegisteredCustomer or a guest of type UnregisteredCustomer".

The easiest way to understand a DU is to use it! We have to make changes to the users that we have defined. Firstly the UnregisteredCustomer:

let sarah = Guest { Id = "Sarah" } // Guest of UnregisteredCustomer

Look at how the definition in the DU compares to the binding.

Now let's make the required changes to the RegisteredCustomers:

let john = RegisteredCustomer { Id = "John"; IsEligible = true }
let mary = RegisteredCustomer { Id = "Mary"; IsEligible = true }
let richard = RegisteredCustomer { Id = "Richard"; IsEligible = false }

Changing the Customer type to a DU has an impact on the function. We will need to re-write the discount calculation using another F# feature - Pattern Matching:

let calculateTotal customer spend =
    let discount = 
        match customer with
        | RegisteredCustomer c -> if c.IsEligible && spend >= 100.0M then (spend * 0.1M) else 0.0M
        | Guest _ -> 0.0M
    spend - discount

To understand what the pattern match is doing is matching, compare the match 'RegisteredCustomer c' with how we constructed the users 'RegisteredCustomer { Id = "John"; IsEligible = true }'. In this case, 'c' is a placeholder for the customer instance. The underscore in the Guest pattern match is a wildcard and implies that we don't need access to the instance. Pattern matching against DUs is exhaustive. If you don't handle every case, you will get a warning on the customer in the match saying 'incomplete pattern match'.

We can simplify the logic with a guard clause but it does mean that we need to account for non-eligible Registered customers otherwise the match is incomplete:

let calculateTotal customer spend =
    let discount = 
        match customer with
        | RegisteredCustomer c when c.IsEligible && spend >= 100.0M -> spend * 0.1M
        | RegisteredCustomer _ -> 0.0M
        | Guest _ -> 0.0M
    spend - discount

We can simplify the last two matches using a wildcard like this:

let calculateTotal customer spend =
    let discount = 
        match customer with
        | RegisteredCustomer c when c.IsEligible && spend >= 100.0M -> spend * 0.1M
        | _ -> 0.0M
    spend - discount

The tests don't need to change.

This is much better than the naive version we had before. It is much easier to understand the logic and much more difficult to have data in an invalid state. Does it get better if we make Eligibility explicit as well? Let's see!

Stage 4 - Making the Implicit Explicit (2)

Remove the IsEligible flag from RegisteredCustomer and add EligibleRegisteredCustomer to the Customer DU.

type RegisteredCustomer = {
    Id : string
}

type UnregisteredCustomer = {
    Id : string
}

type Customer =
    | EligibleRegisteredCustomer of RegisteredCustomer
    | RegisteredCustomer of RegisteredCustomer
    | Guest of UnregisteredCustomer
We need to make a change to our function.

let calculateTotal customer spend =
    let discount = 
        match customer with
        | EligibleRegisteredCustomer _ when spend >= 100.0M -> spend * 0.1M
        | _ -> 0.0M
    spend - discount

We no longer need to test for IsEligible and we also no longer need access to the instance, so we can replace the 'c' with a underscore (wildcard).

We make some minor changes to our helpers.

let john = EligibleRegisteredCustomer { Id = "John" }
let mary = EligibleRegisteredCustomer { Id = "Mary" }
Run your code in FSI to check all is still OK.

The state of our code after all of our improvements is:

type RegisteredCustomer = {
    Id : string
}

type UnregisteredCustomer = {
    Id : string
}

type Customer =
    | EligibleRegisteredCustomer of RegisteredCustomer
    | RegisteredCustomer of RegisteredCustomer
    | Guest of UnregisteredCustomer

let calculateTotal customer spend =
    let discount = 
        match customer with
        | EligibleRegisteredCustomer _ when spend >= 100.0M -> spend * 0.1M
        | _ -> 0.0M
    spend - discount

let john = EligibleRegisteredCustomer { Id = "John" }
let mary = EligibleRegisteredCustomer { Id = "Mary" }
let richard = RegisteredCustomer { Id = "Richard" }
let sarah = Guest { Id = "Sarah" }

let assertJohn = calculateTotal john 100.0M = 90.0M
let assertMary = calculateTotal mary 99.0M = 99.0M
let assertRichard = calculateTotal richard 100.0M = 100.0M
let assertSarah = calculateTotal sarah 100.0M = 100.0M

I think that this is a big improvement over where we started but we can do better! We will revisit this in a later post and we will look at Unit Testing where we can make use of the helpers and assertions we've already written.

Summary

We have covered quite a lot in this post:

  • F# Interactive (FSI)

  • Algebraic Type System
    - Record Types
    - Discriminated Union

  • Pattern Matching
    - Guard Clause

  • Let bindings

  • Functions

  • Function Signatures

In the next post, we will start to look at function composition - building bigger functions out of smaller ones.

Postscript

To illustrate the portability of the functional programming concepts we have covered in this post, one of my colleagues, Daniel Weller, wrote a Scala version of the final solution:

sealed trait Customer

case class RegisteredCustomer(id : String) extends Customer
case class EligibleRegisteredCustomer(id : String) extends Customer
case class Guest(id: String) extends Customer

def calculateTotal(customer: Customer)(spend: Double) = {
    val discount = customer match {
        case EligibleRegisteredCustomer(_) if spend >= 100.0 => spend * 0.1
        case _ => 0.0
    }
    spend - discount
}

val john = EligibleRegisteredCustomer("John")
val assertJohn = (calculateTotal (john) (100.0)) == 90.0
Daniel PuchnerBlog
Blog

Make Your Value Stream Visible Through Structured Logging

Boost your value stream visibility with structured logging. Improve traceability and streamline processes in your software development lifecycle.

Aqeel AlazreeBlog
Blog

Part 2: Data Analysis with powerful Python

Analyzing and visualizing data from a SQLite database in Python can be a powerful way to gain insights and present your findings. In Part 2 of this blog series, we will walk you through the steps to retrieve data from a SQLite database file named gold.db and display it in the form of a chart using Python. We'll use some essential tools and libraries for this task.

Nina DemuthBlog
Blog

Trustbit ML Lab Welcomes Grayskull e150 by Tenstorrent

Discover how Trustbit ML Lab integrates Tenstorrent's Grayskull e150, led by Jim Keller, for cutting-edge, energy-efficient AI processing.

Daniel WellerBlog
Blog

Revolutionizing the Logistics Industry

As the logistics industry becomes increasingly complex, businesses need innovative solutions to manage the challenges of supply chain management, trucking, and delivery. With competitors investing in cutting-edge research and development, it is vital for companies to stay ahead of the curve and embrace the latest technologies to remain competitive. That is why we introduce the TIMETOACT Logistics Simulator Framework, a revolutionary tool for creating a digital twin of your logistics operation.

Aqeel AlazreeBlog
Blog

Part 3: How to Analyze a Database File with GPT-3.5

In this blog, we'll explore the proper usage of data analysis with ChatGPT and how you can analyze and visualize data from a SQLite database to help you make the most of your data.

Rinat AbdullinRinat AbdullinBlog
Blog

The Intersection of AI and Voice Manipulation

The advent of Artificial Intelligence (AI) in text-to-speech (TTS) technologies has revolutionized the way we interact with written content. Natural Readers, standing at the forefront of this innovation, offers a comprehensive suite of features designed to cater to a broad spectrum of needs, from personal leisure to educational support and commercial use. As we delve into the capabilities of Natural Readers, it's crucial to explore both the advantages it brings to the table and the ethical considerations surrounding voice manipulation in TTS technologies.

Rinat AbdullinRinat AbdullinBlog
Blog

Machine Learning Pipelines

In this first part, we explain the basics of machine learning pipelines and showcase what they could look like in simple form. Learn about the differences between software development and machine learning as well as which common problems you can tackle with them.

Rinat AbdullinRinat AbdullinBlog
Blog

LLM Performance Series: Batching

Beginning with the September Trustbit LLM Benchmarks, we are now giving particular focus to a range of enterprise workloads. These encompass the kinds of tasks associated with Large Language Models that are frequently encountered in the context of large-scale business digitalization.

Christoph HasenzaglChristoph HasenzaglBlog
Blog

Common Mistakes in the Development of AI Assistants

How fortunate that people make mistakes: because we can learn from them and improve. We have closely observed how companies around the world have implemented AI assistants in recent months and have, unfortunately, often seen them fail. We would like to share with you how these failures occurred and what can be learned from them for future projects: So that AI assistants can be implemented more successfully in the future!

Rinat AbdullinRinat AbdullinBlog
Blog

Let's build an Enterprise AI Assistant

In the previous blog post we have talked about basic principles of building AI assistants. Let’s take them for a spin with a product case that we’ve worked on: using AI to support enterprise sales pipelines.

Jörg EgretzbergerJörg EgretzbergerBlog
Blog

8 tips for developing AI assistants

AI assistants for businesses are hype, and many teams were already eagerly and enthusiastically working on their implementation. Unfortunately, however, we have seen that many teams we have observed in Europe and the US have failed at the task. Read about our 8 most valuable tips, so that you will succeed.

Aqeel AlazreeBlog
Blog

Part 1: Data Analysis with ChatGPT

In this new blog series we will give you an overview of how to analyze and visualize data, create code manually and how to make ChatGPT work effectively. Part 1 deals with the following: In the data-driven era, businesses and organizations are constantly seeking ways to extract meaningful insights from their data. One powerful tool that can facilitate this process is ChatGPT, a state-of-the-art natural language processing model developed by OpenAI. In Part 1 pf this blog, we'll explore the proper usage of data analysis with ChatGPT and how it can help you make the most of your data.

Rinat AbdullinRinat AbdullinBlog
Blog

5 Inconvenient Questions when hiring an AI company

This article discusses five questions you should ask when buying an AI. These questions are inconvenient for providers of AI products, but they are necessary to ensure that you are getting the best product for your needs. The article also discusses the importance of testing the AI system on your own data to see how it performs.

Aqeel AlazreeBlog
Blog

Part 4: Save Time and Analyze the Database File

ChatGPT-4 enables you to analyze database contents with just two simple steps (copy and paste), facilitating well-informed decision-making.

Aqeel AlazreeBlog
Blog

Database Analysis Report

This report comprehensively analyzes the auto parts sales database. The primary focus is understanding sales trends, identifying high-performing products, Analyzing the most profitable products for the upcoming quarter, and evaluating inventory management efficiency.

IPG
Marco RohrerMarco RohrerBlog
Hintergrundgrafik für IPG Partner Clearsky
Blog

Bring IT service management and IAM systems together

How do companies bring their complex IT service management and IAM systems together in an end user-friendly way? In our interview, Clear Skye and the IPG Group show, how it works very easily

TIMETOACT
News
News

TIMETOACT is Mendix training partner

We are convinced of Mendix's no-code/low-code platforms and are therefore not only a Mendix partner, but also a Mendix training partner.

Kompetenz
Kompetenz

AI - A technology is revolutionizing our everyday lives

For ARS, AI is an increasingly natural and organic part of software engineering. This is particularly true in cases where it is an integral part of applications and functions.

Rinat AbdullinRinat AbdullinBlog
Blog

So You are Building an AI Assistant?

So you are building an AI assistant for the business? This is a popular topic in the companies these days. Everybody seems to be doing that. While running AI Research in the last months, I have discovered that many companies in the USA and Europe are building some sort of AI assistant these days, mostly around enterprise workflow automation and knowledge bases. There are common patterns in how such projects work most of the time. So let me tell you a story...

TIMETOACT
Technologie
Logo Atlassian Confluence
Technologie

Confluence from Atlassian

Create, organize, and collaborate on tasks - all in a single place. Confluence is a workspace for teams and organizations where you can store your documentation and collaboratively develop and share knowledge. Dynamic pages give your team a place to create, capture, and collaborate around projects or idea development.

TIMETOACT
Service
Headerbild zu Application Modernization
Service

Application Modernization

Application Modernization focuses on modernizing existing applications. The key to success in Application Modernization is the strategy and selection of projects.

TIMETOACT
Technologie
Logo Jira Service Management
Technologie

Jira Service Management from Atlassian

Enable developers, operators, and other teams from different departments to collaborate and improve their service management responsiveness. Respond quickly to incidents, requests, and changes, and provide your customers with an optimized service experience.

TIMETOACT
Martin LangeMartin LangeBlog
Checkliste als Symbol für die verschiedenen To Dos im Bereich Lizenzmanagement
Blog

License Management – Everything you need to know

License management is not only relevant in terms of compliance but can also minimize costs and risks. Read more in the article.

Service
Service

Cloud Transformation & Container Technologies

Public, private or hybrid? We can help you develop your cloud strategy so you can take full advantage of the technology.

TIMETOACT GROUP
Branche
Branche

Digital transformation in public administration

The digital transformation will massively change the world of work, especially in public administration. We support federal, state and local authorities in the strategic and technical implementation of their administrative modernisation projects.

Service
Service

Application Integration & Process Automation

Digitizing and improving business processes and responding agilely to change – more and more companies are facing these kind of challenges. This makes it all the more important to take new business opportunities through integrated and optimized processes based on intelligent, digitally networked systems.

TIMETOACT GROUP
Branche
Headerbild für lokale Entwicklerressourcen in Deutschland
Branche

On-site digitization partner for insurance companies

As TIMETOACT GROUP, we are one of the leading digitization partners for IT solutions in Germany, Austria and Switzerland. As your partner, we are there for you at 17 locations and will find the right solution on the path to digitization - gladly together in a personal exchange on site.

TIMETOACT GROUP
Branche
Schild als Symbol für innere und äußere Sicherheit
Branche

Internal and external security

Defense forces and police must protect citizens and the state from ever new threats. Modern IT & software solutions support them in this task.

TIMETOACT
Service
Header zu Fullstack Development
Service

Fullstack Development

The trend in Software Development is towards Full-Stack Development. Full-stack developers are programmers who work in both frontend and backend development and thus have competencies in the areas of databases, servers, systems and clients.

TIMETOACT
Referenz
Referenz

The digital customer file with IBM Content Manager

The prefabricated house specialist SchwörerHaus KG has relied on IBM technology for many years to set up a digital customer file.

TIMETOACT GROUP
Service
Headerbild zur offenen und sicheren IT bei Versicherungen
Service

Open and secure IT

Just a few years ago, insurers were reluctant to move into the cloud or platform world. Concerns about security and governance often prevailed. The paradigm has changed. Insurers are looking at cloud solutions and are increasingly willing to rely on standard solutions for core applications as well.

TIMETOACT
Referenz
Referenz

Introduction of Jira to Hamburger Hochbahn

The Hamburger Hochbahn AG controls the development of its new mobility platform "Switchh" via the Atlassian project management tool Jira – introduced, administered and hosted by the TIMETOACT GROUP.

TIMETOACT
Referenz
Referenz

Interactive online portal identifies suitable employees

TIMETOACT digitizes several test procedures for KI.TEST to determine professional intelligence and personality.

Kompetenz
Kompetenz

DevOps and CI/CD

A DevOps introduction gains momentum and focus with the support of our experts. We record the initiatives and capture the context of the company.

Kompetenz
Kompetenz

ARS Golden 4

Agile development, DevOps, APIs and microservices are the state-of-the-art gold standards for their digital systems and products.

TIMETOACT
Service
Header zu Requirement Engineering
Service

Requirement Engineering

Requirement Engineering, also known as Requirements Analysis, is a central component of the Software Development process. In this process, the requirements for the system to be developed are defined using a systematic procedure.

TIMETOACT
Referenz
Referenz

TIMETOACT implements integrated insurance software

Less than one year from project start to system implementation: TIMETOACT developed the integrated, browser-based insurance software "HERMES" for the VOV D&O insurance association. The cross-departmental individual software completely covers all core processes of the insurance company. Users particularly appreciate the intuitive user interface and the high performance of HERMES.

TIMETOACT GROUP
News
News

Proof-of-Value Workshop

Today's businesses need data integration solutions that offer open, reusable standards and a complete, innovative portfolio of data capabilities. Apply for one of our free workshops!

Service
Service

Managed Service: Mailroom

In the TIMETOACT mailroom, business documents are converted into data in a highly efficient manner and returned securely to the end customer for further processing.

Service
Service

Software, Mobile and Web App Development

Standard software often cannot completely fulfill a company's own requirements - TIMETOACT therefore develops customized software solutions.

TIMETOACT
Service
Navigationsbilc zu Application Development
Service

Application Development

Application Development refers to the process of modifying, designing and/or developing one or more applications. Gaps in the software landscape can be closed by tailoring applications individually to the customer.

Kompetenz
Kompetenz

Software Engineering

Software engineering is the art of creating good software. Software engineering is the discipline of creating your digital products using methods proven by science and practice.

TIMETOACT
Technologie
Technologie

Our service offer for Mendix

The Dutch software manufacturer gives us the possibilities to create platform-independent low/no-code solutions for you with its products. In addition, we offer a wide range of services related to Mendix and are available to you from conceptual design to hosting and operation of your new solution.

TIMETOACT
Technologie
Technologie

Advice around Mendix

Develop your solutions quickly and independently in low-code with the leading technology vendor. Use the Mendix toolkit and model your applications with visual elements.

TIMETOACT
Referenz
Referenz

Smarter mobility with the portal switchh

Subway, S-Bahn, bus, car, ferry or bicycle: The pilot project "switchh" of HOCHBAHN in cooperation with Europcar and Car2Go makes Hamburg mobile.

TIMETOACT
Technologie
Headerbild zu Containerisierung mit Open Source
Technologie

Containerisation with Open Source

Containerization is the next stage of virtualization and provides secure and easy compartmentalization of individual applications. The process of deploying an app has been simplified many times in recent years.

TIMETOACT
News
News

HCL license and price adjustments as of 8.8.2024

HCL Software has informed us that the license and maintenance prices for the various product categories will be increased as of 8.8.2024.

TIMETOACT
Blog
Blog

TIMETOACT starts with the implementation of ESG-Suit

Compliance with ESG and sustainability standards is mandatory for companies in order to meet the requirements of the EU's Corporate Sustainability Reporting Directive (CSRD).

TIMETOACT
Blog
Blog

TIMETOACT starts with the implementation of ESG-Suit

Compliance with ESG and sustainability standards is mandatory for companies in order to meet the requirements of the EU's Corporate Sustainability Reporting Directive (CSRD).

TIMETOACT
Technologie
Headerbild zu Incident Kommunikation Management
Technologie

Incident communication management

Statuspage allows you to keep track of the status of individual system-relevant components as well as a history of past incidents. Our self-created solution also allows you to connect various monitoring tools and query them in specific cycles. The component failure automatically generates an e-mail to your ticket system.

TIMETOACT
Technologie
Atlassian Logo
Technologie

Bamboo, Bitbucket, Sourcetree

Continuous Integration and a Continuous Delivery Pipeline with Bamboo, Bitbucket and Sourcetree. We can help you with our years of experience as a user as well as a solution partner of Atlassian products in many areas.

TIMETOACT GROUP
Service
Headerbild zur AI Factory for Insurance
Service

AI Factory for Insurance

The AI Factory for Insurance is an innovative organisational model combined with a flexible, modular IT architecture. It is an innovation and implementation factory to systematically develop, train and deploy AI models in digital business processes.

TIMETOACT GROUP
Referenz
Logo Armacell
Referenz

Bundled expertise for fast mail migration to M365

Based on the ten-year partnership with TIMETOACT, the experts supported the mail migration from Lotus Notes Domino to M365 - together with novaCapta. As a Managed Service Partner, TIMETOACT continues to ensure optimal functionality of the mail system.

Kompetenz
Kompetenz

Cloud platforms and automation technology

Lost in the jungle of possibilities? We help with the selection and implementation of modern cloud Platforms and cloud technologies.

TIMETOACT
Technologie
Technologie

Timechanger: Bulk changes to worklogs in Jira Datacenter

Adapt Tempo for Jira to your needs and integrate your Atlassian time recording into the ERP landscape, such as SAP or HCL Domino, seamlessly.With our Timechanger plugin, you can move worklogs in Jira Datacenter to another issue and another account via bulk change.

News
Nachbericht Atlassian Team' 23: Neue große Produktankündigungen - Atlassian Intelligence, Atlassian Confluence Whiteboards oder Atlassian Beacon
News

Highlights & Impressions: Follow-up to Atlassian Team'23

The ultimate event for modern teamwork is over - Atlassian Team' 23 took place from April 18 to 20 in Las Vegas. No matter if live on site or online, for the participants there were great new product announcements - first and foremost Atlassian Intelligence, Confluence Whiteboards or Beacon - exciting insights and conversations and a lot of personal exchange.

TIMETOACT GROUP
Branche
Headerbild zu Cloud bei Versicherungen
Branche

Paths to the cloud for insurers

Cloud ist die Blaupause für eine moderne Nutzung von IT-Ressourcen. Doch traditionell scheuen viele Versicherer den Weg in die Cloud. Befürchtet werden Kontrollverlust oder fehlende Sicherheit für vertrauliche Daten. Doch all dies sind Themen, die technisch und organisatorisch gelöst sind. Es überwiegen die Vorzüge einer flexiblen und kostengünstigen Architektur.

TIMETOACT
Technologie
Headerbild zu Cloud Pak for Data – Test-Drive
Technologie

IBM Cloud Pak for Data – Test-Drive

By making our comprehensive demo and customer data platform available, we want to offer these customers a way to get a very quick and pragmatic impression of the technology with their data.

Leistung
Leistung

E-commerce – synaigy supports you with structure and experti

Profitable solutions for retailers, industry, brands and manufacturers.

Blog
Blog

Supply Chain Optimization

A Use Case

TIMETOACT
Service
Headerbild IT Controlling
Service

IT Controlling – Determination and allocation of IT costs

We help to make IT controlling processes efficient and effective and to introduce suitable procedures for the internal allocation of IT costs.

TIMETOACT
Technologie
Headerbild zum Enterprise Service Portal
Technologie

Enterprise Service Desk

With technical and professional-methodical competence, our ITIL experts advise our customers in all questions regarding the design and organization of processes and the further development of a modern service desk.

TIMETOACT
Technologie
Technologie

Pimcore als Open Source Software Platform

Pimcore is a free-to-use open source software platform and is already used effectively in many corporate fields. With Pimcore, your classic day-to-day business problems with portals and websites are easily solved as we tailor the platform to your specific business requirements.

IPG
Referenz
Risiko Management im Bereich der Governance immer wichtiger
Referenz

Introduction of an Identity Management System (IDM)

Introduction of an identity management system (IDM) in a corporate division with the focus on automating the joiner/mover/leaver processes. In addition, data cleansing was to take place in the user area to also enable a reduction in licensing costs.

TIMETOACT
Technologie
Technologie

Microsoft Azure Synapse Analytics

With Synapse, Microsoft has provided a platform for all aspects of analytics in the Azure Cloud. Within the platform, Synapse includes services for data integration, data storage of any size and big data analytics. Together with existing architecture templates, a solution for every analytical use case is created in a short time.

TIMETOACT
Service
Headerbild von Enterprise Service Management
Service

Enterprise Service Management

Our Enterprise Service Management Solution offers you a way to make Service Management accessible to all participants via an easy-to-use service portal. You can map your processes in this portal according to defined procedures and connect them to other systems. In addition, you relieve the process participants through automation.

TIMETOACT
Service
Teaserbild zu IT-Strategie Beratung
Service

IT strategy – A clear goal and the way to achieve it

The IT strategy provides you with the plan for the long-term development of your IT organisation, necessary technologies, processes and digital culture.

IPG
Edith StinglEdith StinglReferenz
Teaser Referenz IAM Silhouette
Referenz

From zero to one hundred in just three months

Attacks on IT infrastructure are a serious threat to companies. Silhouette Group wanted to better protect itself against cyber attacks. ✅ Read more.

novaCapta
Lösung
Laptop mit Valo Intranet Seite und mit roter Tasse vor einem Wald.
Lösung

Valo Intranet Exit: Integration and Replacement Options

Valo Intranet is a simple and cost-effective modular solution that fulfills typical requirements for intranet and collaboration very well. Now, Staffbase has announced the discontinuation of Valo Intranet by July 2025. As a leading Valo and Staffbase Premium Partner in the DACH region, we offer you a powerful alternative solution and automated decommissioning of your Valo Intranet.

TIMETOACT
Referenz
Referenz

TIMETOACT simplifies reporting in IBM Cognos

In the course of modernizing the application for Bette GmbH & Co. KG, TIMETOACT individually expanded the filter and selection options in IBM Cognos to include important customer-specific functions. The family-owned company particularly benefits from the search and grouping function.

Leistung
Leistung

Digital Consulting International

For us, consulting means working with you to achieve your goals, show you new options and get the most out of your resources and requirements..

TIMETOACT
Technologie
Headerbild zu Microsoft Azure
Technologie

Microsoft Azure

Azure is the cloud offering from Microsoft. Numerous services are provided in Azure, not only for analytical requirements. Particularly worth mentioning from an analytical perspective are services for data storage (relational, NoSQL and in-memory / with Microsoft or OpenSource technology), Azure Data Factory for data integration, numerous services including AI and, of course, services for BI, such as Power BI or Analysis Services.

novaCapta
Leistung
Middle aged Hispanic business manager ceo using cell phone mobile app, laptop. Smiling Latin or Indian mature man businessman holding smartphone sit in office working online on gadget with copy space.
Leistung

Managed Modern Endpoint: Holisitic endpoint management

Diverse endpoints and applications, different user and IT needs: Endpoint management poses increasingly significant challenges for companies. Our holistic Managed Modern Endpoint approach helps establishing the fundament for a secure, future-oriented modern workplace.

TIMETOACT
Event
Produktive Teams führen zu zufriedenen Kunden
Event

Webcast: Productive teams lead to satisfied customers

In a webcast, Arne Ralf, Atlassian Specialist at the TIMETOACT GROUP, will explain in a practical example how to unleash the full potential of your teams with a company-wide service desk and much more.

TIMETOACT
Technologie
Headerbild zu IBM Decision Optimization
Technologie

Decision Optimization

Mathematical algorithms enable fast and efficient improvement of partially contradictory specifications. As an integral part of the IBM Data Science platform "Cloud Pak for Data" or "IBM Watson Studio", decision optimisation has been decisively expanded and embedded in the Data Science process.

novaCapta
Produkt
Young Man holding digital tablet
Produkt

novaAudit – PowerCloud Edition

novaAudit - PowerCloud Edition as a cloud-based all-in-one solution stands for efficient, flexible and smart audit management. The standard solution with maximum customizability for your optimized auditing.

TIMETOACT
Technologie
Headerbild zu Microsoft SQL Server
Technologie

Microsoft SQL Server

SQL Server 2019 offers companies recognized good and extensive functions for building an analytical solution. Both data integration, storage, analysis and reporting can be realized, and through the tight integration of PowerBI, extensive visualizations can be created and data can be given to consumers.

novaCapta
Produkt
Drei Personen in einer Besprechung an einem Tisch besprechen den Zeitplan auf ihrem Microsoft-Laptop
Produkt

IT Governance & Lifecycle Management with novaWorxx

Adapt governance rules and IT processes with novaWorxx - for successful collaboration in the cloud. Create a central basis for a Modern Workplace. Want integration with all Microsoft 365 applications? novaWorxx offers that, too. Learn more now.

Training
Training

Getting More from Jira Workflows (Cloud)

Over the course of the "Getting More from Jira Workflows (Cloud)" training participants will learn about common status and transition properties and advanced workflow functionalities and how to configure them.

TIMETOACT
Kompetenz
Network Performance Management
Kompetenz

Network Performance Management

With Network Performance Management you can monitor the performance of complex IT landscapes. This enables you to detect capacity bottlenecks, unexpected deviations from normal operation as well as faults at an early stage and to remedy them immediately.

TIMETOACT
Service
Headerbild zu Data Governance Consulting
Service

Data Governance

Data Governance describes all processes that aim to ensure the traceability, quality and protection of data. The need for documentation and traceability increases exponentially as more and more data from different sources is used for decision-making and as a result of the technical possibilities of integration in Data Warehouses or Data Lakes.

TIMETOACT
Service
Teaserbild zu Data Integration Service und Consulting
Service

Data Integration, ETL and Data Virtualization

While the term "ETL" (Extract - Transform - Load / or ELT) usually described the classic batch-driven process, today the term "Data Integration" extends to all methods of integration: whether batch, real-time, inside or outside a database, or between any systems.

TIMETOACT GROUP
Kompetenz
Kompetenz

Sustainability consulting for your sustainability goals

The legislator demands more transparency in the area of sustainability. Create your sustainability reporting with us and implement the findings in a targeted manner.

Kompetenz
Kompetenz

DevOps culture change

Cloud native architecture and architecture modernization

Lösung
Lösung

Migrate to the Google Cloud with CLOUDPILOTS

Migrate easily to the Google Cloud Platform with Cloud Pilots. Reduce costs, enhance security, optimize scalability, and modernize your workloads.