I was made aware of OpenTelemetry a while ago by a blog seriesJimmy Bogard and put it in my favourites to read at a later date. Of course I didn't really get back to it in depth and gave it a quick scan at the time although it is a well written in depth blog series so I suggest you do check it out. A while later I saw a blog post by Rehan Saeed which gives an introduction on what OpenTelemetry is and how it works and the concepts behind it and is definitely worth a read. At the same time I saw a YouTube video by Elton Stoneman that whilst more aimed at using tracing using Kubernetes he demonstrates a .NET app running and the tracing details appear in Jaeger.
Datum
29.01.2020
content.autor.writtenBy
![](/TTA_AT/Blog/Techblog/Tracing%20IO%20in%20.NET%20Core/33127/image-thumb__33127__TextCombo-image-size-1-1/img_001_tracing-io.png)
Now as some of you may be aware I have an OSS project called Carter which sits on top of ASP.NET Core and is IMO much nicer to use than MVC but still gives you everything you'd want in a web framework. I got thinking and wondered if I could take Elton's app and convert it to work with Carter.....well of course I could, rename some Controllers here and there, remove dependencies and voila here you go!
By the time I had it all working I had discovered that the code used OpenTracing and a .NET OSS library from Christian Weiss that used and enhanced tracing data from various components in .NET. Essentially the concept of tracing data was being worked on by two groups, OpenTracing and OpenCensus. These two groups merged to create OpenTracing and become part of a wider group CNCF(Cloud Native Computing Foundation). Microsoft was already invested in OpenCensus and obviously has now moved its efforts into OpenTelemetry. To read more about the merger take a visit here.
Luckily moving the apps to use OpenTelemetry wasn't too much work and the output is very similar to the efforts Christian had put into his library. The new codebase can be found on my main branch in the repo.
What the apps consist of is a web app which is the entry point that lists products and their stock quantities. When making a request to the root of the web app it subsequently calls a products API and then for each product it makes a call to get the stock. From the screenshot above you can see we have 3 products as there are 3 requests to the stock api.
If we look a bit further we can see that OpenTelemetry allows us to see HTTP requests going out of our app and into our other API to get the data:
![](/TTA_AT/Blog/Techblog/Tracing%20IO%20in%20.NET%20Core/33128/image-thumb__33128__TextCombo-image-size-1-1/img_002_tracing-io-2.png)
One is the client making the request and the other is the server responding with a 200 response.
If you look at the main screenshot we can delve a bit deeper as there is something marked as DemoData. This is the name of our database. If we click this we can get an overview of the SQL statement and how long it took to return data:
![](/TTA_AT/Blog/Techblog/Tracing%20IO%20in%20.NET%20Core/33129/image-thumb__33129__TextCombo-image-size-1-1/img_003_tracing-io-demo-data.png)
Now at this point I hope you're suitably impressed but I can hear you asking what's the effort to get all this information? Am I going to have litter my codebase with lots of objects tracking IO calls? Well let's take a look at the HTTP server implementations of getting the products:
this.Get("/products", async (req, res) =>
{
var products = await productsRepository.GetProducts();
await res.AsJson(products);
});
So it accepts the request, invokes the product repository to get the data writes this to the HTTP response. Hmm, no tracing code. Ok it must all be wrapped in the SQL logic:
public async Task<IEnumerable<Product>> GetProducts()
{
using var connection = new SqlConnection(this.connectionString);
return await connection.QueryAsync<Product>("select * from products");
}
Nope no tracing there either!
So the tracing code is done at Startup and that's it:
public void ConfigureServices(IServiceCollection services)
{
services.AddCarter();
services.AddTransient<ProductsRepository>();
if (Configuration.GetValue<bool>("Tracing:Enabled"))
{
services.AddOpenTelemetryTracing(builder =>
builder
.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("Widgetario.ProductApi"))
.AddAspNetCoreInstrumentation()
.AddSqlClientInstrumentation(sqloptions => { sqloptions.SetTextCommandContent = true; })
.AddJaegerExporter());
}
}
When a request is made into our products API and it hits the database the .NET underlying types emit tracing data that can be exported to a number of different tools. This can be AWS, GCP, Azure, Prometheus, Akka, Elasticsearch, DataDog, GraphQL, gRPC and pretty much anything else you can think of. To note, OpenTelemetry is not a .NET thing, it is a cross platform, cross language standard for tracing data in applications and services.
If you're still not convinced there isn't more to this lets take a look at the web app in our solution Startup code:
public void ConfigureServices(IServiceCollection services)
{
services.AddCarter();
services.AddScoped<ProductService>();
services.AddScoped<StockService>();
if (Configuration.GetValue<bool>("Tracing:Enabled"))
{
services.AddOpenTelemetryTracing(builder =>
builder
.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("Widgetario.Web"))
.AddSource("api-load-source")
.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation()
.AddJaegerExporter());
}
}
The only thing different here is that we have a line to add HTTP instrumentation rather than SQL instrumentation. You may notice we have a line about adding a source. This is purely if you want to write extra data or enrich the info you see in the Jaeger UI. If you look back to the main screenshot you'll see some annotations called api-load and stock-api-load which gives me a bit more of a clue to where this code is executed in my app. This does add a bit more code to your app but it's purely optional:
this.Get("/", async (req, res) =>
{
var stopwatch = Stopwatch.StartNew();
logger.LogDebug("Loading products & stock");
var model = new ProductViewModel();
using (ActivitySource.StartActivity("api-load"))
{
using (ActivitySource.StartActivity("product-api-load"))
{
model.Products = await productsService.GetProducts();
}
foreach (var product in model.Products)
{
using (ActivitySource.StartActivity("stock-api-load"))
{
var productStock = await stockService.GetStock(product.Id);
product.Stock = productStock.Stock;
}
}
}
logger.LogDebug("Products & stock load took: {@Time}ms", stopwatch.Elapsed.TotalMilliseconds);
await res.AsJson(model);
});
We use a static object called ActivitySource created earlier in the class like so: private static readonly ActivitySource ActivitySource = new ActivitySource("api-load-source");
and each time we want to add some data to our HTTP calls we call StartActivity
with a name of out choosing and it then appears in our Jaeger UI.
One thing to note is that the ILogger
data does not appear in our OpenTelemetry data. They consider this a separate thing altogether from tracing as well as metrics, all three are very different. That said I did mention it in the OpenTelemetry gitter room and they have raised a Github issue to implement support for this so maybe in time you'll be able to see your logs and your telemetry data side by side. Interestingly this was a feature in Christian's OSS library that used OpenTracing before I moved to OpenTelemetry.
Anyway I hope this has been an interesting introduction into OpenTelemetry and shown you how we can simplify and expose tracing data within .NET so we can keep an eye on the performance of the IO in our apps!
![](/TTA_AT/Blog/Techblog/Consistency%20and%20aggregates%20in%20event%20sourcing/32596/image-thumb__32596__MediumTileGrid-item-main-s1-3/thumbnail_Consistency%20and%20aggregates%20in%20event%20sourcing.jpg)
Consistency and Aggregates in Event Sourcing
![](/TTA_AT/Blog/Techblog/The%20Power%20of%20EventSourcing/33288/image-thumb__33288__MediumTileGrid-item-main-s1-3/thumbnail_The%20Power%20of%20EventSourcing.png)
The Power of Event Sourcing
![](/TTA_AT/Blog/Techblog/Building%20and%20Publishing%20Design%20Systems%20-%20Part%203/33604/image-thumb__33604__MediumTileGrid-item-main-s1-3/Building%20A%20Micro%20Frontend%20Consuming%20A%20Design%20System.jpg)
Building a micro frontend consuming a design system | Part 3
![](/TTA_AT/Blog/Techblog/ADRs%20as%20a%20Tool%20to%20Build%20Empowered%20Teams/33699/image-thumb__33699__MediumTileGrid-item-main-s1-3/adr_as_a_tool.png)
ADRs as a Tool to Build Empowered Teams
![](/TTA_AT/Blog/Techblog/How%20to%20gather%20data%20from%20Miro/33260/image-thumb__33260__MediumTileGrid-item-main-s1-3/thumbnail_How%20to%20gather%20data%20from%20Miro.png)
How to gather data from Miro
![](/TTA_AT/Blog/Techblog/Intro%20to%20Functional%20Programming/33352/image-thumb__33352__MediumTileGrid-item-main-s1-3/intro_to_f_sharp.jpg)
Introduction to Partial Function Application in F#
![](/TTA_AT/Blog/Techblog/Intro%20to%20Functional%20Programming/Introduction%20to%20Functional%20Programming%20in%20F-/33574/image-thumb__33574__MediumTileGrid-item-main-s1-3/intro_to_f_sharp_programming_%201.png)
Introduction to Functional Programming in F#
![](/TTA_AT/Blog/Techblog/Revolutionizing%20the%20Logistics%20Industry-%20Trustbit%20Logistics%20Simulator%20Framework/32437/image-thumb__32437__MediumTileGrid-item-main-s1-3/thumbnail_Revolutionizing%20the%20Logistics%20Industry-%20Trustbit%20Logistics%20Simulator%20Framework.jpg)
Revolutionizing the Logistics Industry
![](/TTA_AT/Blog/Techblog/Intro%20to%20Web%20Programming%20in%20F%20Sharp%20with%20Giraffe/Introduction%20to%20Web%20Programming%20in%20F-%20with%20Giraffe%20%E2%80%93%20Part%202/34309/image-thumb__34309__MediumTileGrid-item-main-s1-3/thumbnail_webdev-Giraffe-2.jpg)
Introduction to Web Programming in F# with Giraffe – Part 2
![](/TTA_AT/Blog/Techblog/Part%202-%20Data%20Analysis%20with%20powerful%20Python%20%E2%80%93%20How%20to%20get%20the%20best%20results%20from%20your%20data/32434/image-thumb__32434__MediumTileGrid-item-main-s1-3/thumbnail_Part%202-%20Data%20Analysis%20with%20powerful%20Python%20%E2%80%93%20How%20to%20get%20the%20best%20results%20from%20your%20data.png)
Part 2: Data Analysis with powerful Python
![](/TTA_AT/Blog/Techblog/Make%20Your%20Value%20Stream%20Visible%20Through%20Structured%20Logging/32252/image-thumb__32252__MediumTileGrid-item-main-s1-3/Make%20Your%20Value%20Stream%20Visible%20Through%20Structured%20Logging.jpg)
Make Your Value Stream Visible Through Structured Logging
![](/TTA_AT/Blog/Techblog/Intro%20to%20Functional%20Programming/Introduction%20to%20Functional%20Programming%20in%20F-%20%E2%80%93%20Part%2012/33577/image-thumb__33577__MediumTileGrid-item-main-s1-3/thumbnail_intro_to_f_sharp_programming_%2012.png)
Introduction to Functional Programming in F# – Part 12
![](/TTA_AT/Blog/Techblog/Intro%20to%20Functional%20Programming/Introduction%20to%20Functional%20Programming%20in%20F-%20%E2%80%93%20Part%2011/33576/image-thumb__33576__MediumTileGrid-item-main-s1-3/thumbnail_intro_to_f_sharp_programming_%2011.png)
Introduction to Functional Programming in F# – Part 11
![](/TTA_AT/Blog/Techblog/Intro%20to%20Functional%20Programming/Introduction%20to%20Functional%20Programming%20in%20F-%20%E2%80%93%20Part%203/33579/image-thumb__33579__MediumTileGrid-item-main-s1-3/thumbnail_intro_to_f_sharp_programming_%203.png)
Introduction to Functional Programming in F# – Part 3
![](/TTA_AT/Blog/Techblog/Intro%20to%20Functional%20Programming/Introduction%20to%20Functional%20Programming%20in%20F-%20%E2%80%93%20Part%206/33582/image-thumb__33582__MediumTileGrid-item-main-s1-3/thumbnail_intro_to_f_sharp_programming_%206.png)
Introduction to Functional Programming in F# – Part 6
![](/TTA_AT/Blog/Techblog/Intro%20to%20Functional%20Programming/Introduction%20to%20Functional%20Programming%20in%20F-%20%E2%80%93%20Part%209/33585/image-thumb__33585__MediumTileGrid-item-main-s1-3/thumbnail_intro_to_f_sharp_programming_%209.png)
Introduction to Functional Programming in F# – Part 9
![](/TTA_AT/Blog/Techblog/Intro%20to%20Functional%20Programming/Introduction%20to%20Functional%20Programming%20in%20F-%20%E2%80%93%20Part%2010/33575/image-thumb__33575__MediumTileGrid-item-main-s1-3/thumbnail_intro_to_f_sharp_programming_%2010.png)
Introduction to Functional Programming in F# – Part 10
![](/TTA_AT/Blog/Techblog/Intro%20to%20Functional%20Programming/Introduction%20to%20Functional%20Programming%20in%20F-%20%E2%80%93%20Part%204/33580/image-thumb__33580__MediumTileGrid-item-main-s1-3/thumbnail_intro_to_f_sharp_programming_%204.png)
Introduction to Functional Programming in F# – Part 4
![](/TTA_AT/Blog/Techblog/Why%20Was%20Our%20Project%20Successful-%20Coincidence%20or%20Blueprint-/33701/image-thumb__33701__MediumTileGrid-item-main-s1-3/successful_project.png)
Why Was Our Project Successful: Coincidence or Blueprint?
![](/TTA_AT/Blog/Techblog/My%20Workflows%20at%20Trustbit%20During%20the%20Quarantine/33285/image-thumb__33285__MediumTileGrid-item-main-s1-3/thumbnail_My%20Workflows%20at%20TIMETOACT%20During%20the%20Quarantine.jpg)
My Workflows During the Quarantine
![](/TTA_AT/Blog/Techblog/Intro%20to%20Functional%20Programming/Introduction%20to%20Functional%20Programming%20in%20F-%20%E2%80%93%20Part%202/33578/image-thumb__33578__MediumTileGrid-item-main-s1-3/thumbnail_intro_to_f_sharp_programming_%202.png)
Introduction to Functional Programming in F# – Part 2
![](/TTA_AT/Blog/Techblog/Intro%20to%20Functional%20Programming/Introduction%20to%20Functional%20Programming%20in%20F-%20%E2%80%93%20Part%205/33581/image-thumb__33581__MediumTileGrid-item-main-s1-3/thumbnail_intro_to_f_sharp_programming_%205.png)
Introduction to Functional Programming in F# – Part 5
![](/TTA_AT/Blog/Techblog/Intro%20to%20Functional%20Programming/Introduction%20to%20Functional%20Programming%20in%20F-%20%E2%80%93%20Part%207/33583/image-thumb__33583__MediumTileGrid-item-main-s1-3/thumbnail_intro_to_f_sharp_programming_%207.png)
Introduction to Functional Programming in F# – Part 7
![](/TTA_AT/Blog/Techblog/Event%20Sourcing%20with%20Apache%20Kafka/32426/image-thumb__32426__MediumTileGrid-item-main-s1-3/thumbnail_Event%20Sourcing%20with%20Apache%20Kafka.png)
Event Sourcing with Apache Kafka
![](/TTA_AT/Blog/Techblog/Intro%20to%20Functional%20Programming/Introduction%20to%20Functional%20Programming%20in%20F-%20%E2%80%93%20Part%208/33584/image-thumb__33584__MediumTileGrid-item-main-s1-3/thumbnail_intro_to_f_sharp_programming_%208.png)
Introduction to Functional Programming in F# – Part 8
![](/TTA_AT/Blog/Techblog/So%2C%20I%20wrote%20a%20book/32610/image-thumb__32610__MediumTileGrid-item-main-s1-3/thumbnail_So%2C%20I%20wrote%20a%20book.png)
So, I wrote a book
![](/TTA_AT/Blog/Techblog/Intro%20to%20Web%20Programming%20in%20F%20Sharp%20with%20Giraffe/Introduction%20to%20Web%20Programming%20in%20F-%20with%20Giraffe%20%E2%80%93%20Part%203/34379/image-thumb__34379__MediumTileGrid-item-main-s1-3/thumbnail_webdev-Giraffe-3.jpg)
Introduction to Web Programming in F# with Giraffe – Part 3
![](/TTA_AT/Blog/Techblog/Intro%20to%20Web%20Programming%20in%20F%20Sharp%20with%20Giraffe/Introduction%20to%20Web%20Programming%20in%20F-%20with%20Giraffe%20%E2%80%93%20Part%201/34308/image-thumb__34308__MediumTileGrid-item-main-s1-3/thumbnail_webdev-Giraffe-1.jpg)
Introduction to Web Programming in F# with Giraffe – Part 1
![](/TTA_AT/Blog/Techblog/How%20to%20use%20NLP%20%28Natural%20Language%20Processing%29%20libraries%20for%20post-processing%20Event%20Stormings%20in%20Miro/33689/image-thumb__33689__MediumTileGrid-item-main-s1-3/nlp_post_processing.jpg)
Using NLP libraries for post-processing
![](/TTA_AT/Blog/Techblog/Building%20Shell%20Application%20for%20Micro%20Frontend%20-%20PART%204/33606/image-thumb__33606__MediumTileGrid-item-main-s1-3/Building%20A%20Shell%20Application%20for%20Micro%20Frontends.jpg)
Building A Shell Application for Micro Frontends | Part 4
![](/TTA_AT/Blog/Techblog/Building%20and%20Publishing%20Design%20Systems%20-%20Part%202/33603/image-thumb__33603__MediumTileGrid-item-main-s1-3/Building%20and%20Publishing%20Design%20Systems.jpg)
Building and Publishing Design Systems | Part 2
![](/TTA_AT/Blog/Techblog/CSS%20-has%28%29%20%26%20Responsive%20Design/32424/image-thumb__32424__MediumTileGrid-item-main-s1-3/thumbnail_CSS%20-has%28%29%20%26%20Responsive%20Design.jpg)
CSS :has() & Responsive Design
![](/TTA_AT/Blog/Techblog/Composite%20UI%20with%20Design%20System%20and%20Micro%20Frontends/33605/image-thumb__33605__MediumTileGrid-item-main-s1-3/Composite%20UI%20with%20Design%20System%20and%20Micro%20Frontends.jpg)
Composite UI with Design System and Micro Frontends
![](/TTA_AT/Blog/Techblog/Process%20Pipelines/32608/image-thumb__32608__MediumTileGrid-item-main-s1-3/thumbnail_Process%20Pipelines.jpg)
Process Pipelines
![](/TTA_AT/Blog/Techblog/Designing%20and%20Running%20a%20Workshop%20series-%20An%20outline/33253/image-thumb__33253__MediumTileGrid-item-main-s1-3/thumbnail_Designing%20and%20Running%20a%20Workshop%20series-%20An%20outline.png)
Designing and Running a Workshop series: An outline
![](/TTA_AT/Blog/Techblog/Learning%20-%20Sharing%20at%20Trustbit/33713/image-thumb__33713__MediumTileGrid-item-main-s1-3/kateryna-hliznitsova-LlLY1XVrzTA-unsplash.jpg)
Learning + Sharing at TIMETOACT GROUP Austria
![](/TTA_AT/Blog/AI/31380/image-thumb__31380__MediumTileGrid-item-main-s1-3/fehler-ki-entwicklung.png)
Common Mistakes in the Development of AI Assistants
![](/TTA_AT/Blog/Techblog/So%20You%20are%20Building%20an%20AI%20Assistant-/32438/image-thumb__32438__MediumTileGrid-item-main-s1-3/thumbnail_So%20You%20are%20Building%20an%20AI%20Assistant-.jpg)
So You are Building an AI Assistant?
![](/TTA_AT/AI%20Images/33360/image-thumb__33360__MediumTileGrid-item-main-s1-3/company-chatbot.jpg)
Let's build an Enterprise AI Assistant
![](/TTA_AT/Blog/Techblog/Learn%20%26%20Share%20Video%20Obsidian/32602/image-thumb__32602__MediumTileGrid-item-main-s1-3/thumbnail_Learn%20%26%20Share%20Video%20Obsidian.jpg)
Learn & Share video Obsidian
![](/TTA_AT/Blog/Techblog/Innovation%20Incubator%20Round%201/33680/image-thumb__33680__MediumTileGrid-item-main-s1-3/desola-lanre-ologun-IgUR1iX0mqM-unsplash.jpg)
Innovation Incubator Round 1
![](/TTA_AT/Blog/Techblog/Innovation%20Incubator%20at%20Trustbit/33263/image-thumb__33263__MediumTileGrid-item-main-s1-3/thumbnail_Innovation%20Incubator%20at%20TIMETOACT.jpg)
Innovation Incubator at TIMETOACT GROUP Austria
![](/TTA_AT/Blog/Techblog/The%20weekly%20shutdown%20routine/33715/image-thumb__33715__MediumTileGrid-item-main-s1-3/my_weekly_shutdown_routine.jpg)
My Weekly Shutdown Routine
![](/TTA_AT/Blog/Techblog/Five%20lessons%20from%20running%20a%20%28remote%29%20design%20systems%20book%20club/32598/image-thumb__32598__MediumTileGrid-item-main-s1-3/thumbnail_Five%20lessons%20from%20running%20a%20%28remote%29%20design%20systems%20book%20club.jpg)
5 lessons from running a (remote) design systems book club
![](/TTA_AT/Blog/Techblog/5%20Inconvenient%20Questions%20when%20hiring%20an%20AI%20company/33596/image-thumb__33596__MediumTileGrid-item-main-s1-3/questions_to_ask_when_hiring_an_ai_agency.jpg)
5 Inconvenient Questions when hiring an AI company
![](/TTA_AT/Blog/Techblog/Part%201-%20Detecting%20Truck%20Parking%20Lots%20on%20Satellite%20Images/32603/image-thumb__32603__MediumTileGrid-item-main-s1-3/thumbnail_Part%201-%20Detecting%20Truck%20Parking%20Lots%20on%20Satellite%20Images.jpg)
Part 1: Detecting Truck Parking Lots on Satellite Images
![](/TTA_AT/Blog/Techblog/Strategic%20Impact%20of%20Large%20Language%20Models/32439/image-thumb__32439__MediumTileGrid-item-main-s1-3/thumbnail_Strategic%20Impact%20of%20Large%20Language%20Models.jpg)
Strategic Impact of Large Language Models
![](/TTA_AT/Blog/Techblog/Unlocking%20Potential%20with%20Natural%20Readers-%20The%20Intersection%20of%20AI%20and%20Voice%20Manipulation/32441/image-thumb__32441__MediumTileGrid-item-main-s1-3/thumbnail_Unlocking%20Potential%20with%20Natural%20Readers-%20The%20Intersection%20of%20AI%20and%20Voice%20Manipulation.jpg)
The Intersection of AI and Voice Manipulation
![](/TTA_AT/Blog/Techblog/How%20we%20discover%20and%20organise%20domains%20in%20an%20existing%20product/32600/image-thumb__32600__MediumTileGrid-item-main-s1-3/thumbnail_How%20we%20discover%20and%20organise%20domains%20in%20an%20existing%20product.png)
How we discover and organise domains in an existing product
![](/TTA_AT/Blog/Techblog/Celebrating%20achievements/32595/image-thumb__32595__MediumTileGrid-item-main-s1-3/thumbnail_Celebrating%20achievements.jpg)
Celebrating achievements
![](/TTA_AT/Blog/Techblog/Machine%20Learning%20Pipelines%20%28Pt.%201%29/32431/image-thumb__32431__MediumTileGrid-item-main-s1-3/thumbnail_Machine%20Learning%20Pipelines%20%28Pt.%201%29.jpg)
Machine Learning Pipelines
![](/TTA_AT/Blog/Techblog/State%20of%20Fast%20Feedback%20in%20Data%20Science%20Projects/32611/image-thumb__32611__MediumTileGrid-item-main-s1-3/thumbnail_State%20of%20Fast%20Feedback%20in%20Data%20Science%20Projects.jpg)
State of Fast Feedback in Data Science Projects
![](/TTA_AT/Blog/Techblog/Creating%20a%20Cross-Domain%20Capable%20ML%20Pipeline%20for%20Image%20Classification/32597/image-thumb__32597__MediumTileGrid-item-main-s1-3/thumbnail_Creating%20a%20Cross-Domain%20Capable%20ML%20Pipeline%20for%20Image%20Classification.jpg)
Creating a Cross-Domain Capable ML Pipeline
![](/TTA_AT/Blog/Techblog/Running%20Hybrid%20Workshops/32609/image-thumb__32609__MediumTileGrid-item-main-s1-3/thumbnail_Running%20Hybrid%20Workshops.jpg)
Running Hybrid Workshops
![](/TTA_AT/Blog/Techblog/Interest%20Maps-%207%20Positive%20effects%20of%20visualizing%20the%20interests%20of%20your%20team/33265/image-thumb__33265__MediumTileGrid-item-main-s1-3/thumbnail_Interest%20Maps-%207%20Positive%20effects%20of%20visualizing%20the%20interests%20of%20your%20team.jpg)
7 Positive effects of visualizing the interests of your team
![](/TTA_AT/Blog/Techblog/Part%201-%20Harnessing%20the%20Potential%20of%20Data%20Analysis%20with%20ChatGPT/32433/image-thumb__32433__MediumTileGrid-item-main-s1-3/thumbnail_Part%201-%20Harnessing%20the%20Potential%20of%20Data%20Analysis%20with%20ChatGPT.png)
Part 1: Data Analysis with ChatGPT
![](/TTA_AT/Blog/Techblog/Inbox%20helps%20to%20clear%20the%20mind/32601/image-thumb__32601__MediumTileGrid-item-main-s1-3/thumbnail_Inbox%20helps%20to%20clear%20the%20mind.jpg)
Inbox helps to clear the mind
![](/TTA_AT/Blog/Techblog/LLM%20Performance%20Series-%20Batching/32430/image-thumb__32430__MediumTileGrid-item-main-s1-3/thumbnail_LLM%20Performance%20Series-%20Batching.jpg)
LLM Performance Series: Batching
![](/TTA_AT/Blog/Techblog/Announcing%20Domain-Driven%20Design%20Exercises/33248/image-thumb__33248__MediumTileGrid-item-main-s1-3/thumbnail_Announcing%20Domain-Driven%20Design%20Exercises.png)
Announcing Domain-Driven Design Exercises
![](/TTA_AT/Blog/Techblog/Designing%20and%20Running%20a%20Workshop%20series-%20The%20board/33254/image-thumb__33254__MediumTileGrid-item-main-s1-3/thumbnail_Designing%20and%20Running%20a%20Workshop%20series-%20The%20board.png)
Designing and Running a Workshop series: The board
![](/TTA_AT/Blog/Techblog/Part%202-%20Detecting%20Truck%20Parking%20Lots%20on%20Satellite%20Images/32605/image-thumb__32605__MediumTileGrid-item-main-s1-3/thumbnail_Part%202-%20Detecting%20Truck%20Parking%20Lots%20on%20Satellite%20Images.jpg)
Part 2: Detecting Truck Parking Lots on Satellite Images
![](/TTA_AT/Blog/Techblog/Boosting%20prediction%20speed%20of%20scikit-learn%20regression%20algorithms/32423/image-thumb__32423__MediumTileGrid-item-main-s1-3/thumbnail_Boosting%20prediction%20speed%20of%20scikit-learn%20regression%20algorithms.jpg)
Boosting speed of scikit-learn regression algorithms
![](/TTA_AT/Blog/Techblog/License%20Plate%20Detection%20for%20Precise%20Car%20Distance%20Estimation/32428/image-thumb__32428__MediumTileGrid-item-main-s1-3/thumbnail_License%20Plate%20Detection%20for%20Precise%20Car%20Distance%20Estimation.jpg)
License Plate Detection for Precise Car Distance Estimation
![](/TTA_AT/Blog/Techblog/Using%20a%20Skill-Will%20matrix%20for%20personal%20career%20development/32613/image-thumb__32613__MediumTileGrid-item-main-s1-3/thumbnail_Using%20a%20Skill-Will%20matrix%20for%20personal%20career%20development.png)
Using a Skill/Will matrix for personal career development
![](/TTA_AT/Blog/Techblog/Part%204-%20Save%20Time%20and%20Analyze%20the%20Database%20File%20%28gold.db%29%20with%20GPT-4/32436/image-thumb__32436__MediumTileGrid-item-main-s1-3/thumbnail_Part%204-%20Save%20Time%20and%20Analyze%20the%20Database%20File%20%28gold.db%29%20with%20GPT-4.jpg)
Part 4: Save Time and Analyze the Database File
![](/TTA_AT/Blog/Techblog/Part%203-%20How%20to%20Analyze%20a%20Database%20File%20with%20GPT-3.5/32435/image-thumb__32435__MediumTileGrid-item-main-s1-3/thumbnail_Part%203-%20How%20to%20Analyze%20a%20Database%20File%20with%20GPT-3.5.png)
Part 3: How to Analyze a Database File with GPT-3.5
![](/TTA_AT/Blog/Techblog/Database%20Analysis%20Report/32425/image-thumb__32425__MediumTileGrid-item-main-s1-3/thumbnail_Database%20Analysis%20Report.jpg)
Database Analysis Report
![](/TTA_AT/Blog/Techblog/How%20ChatGPT%20%28GPT-4%29%20Created%20a%20Social%20Media%20Posts%20Generator%20Website/32599/image-thumb__32599__MediumTileGrid-item-main-s1-3/thumbnail_How%20ChatGPT%20%28GPT-4%29%20Created%20a%20Social%20Media%20Posts%20Generator%20Website.jpg)
Creating a Social Media Posts Generator Website with ChatGPT
![](/TTA_AT/Blog/AI/31411/image-thumb__31411__MediumTileGrid-item-main-s1-3/tipps-zur-entwicklung-von-ki-assistenten.jpg)
8 tips for developing AI assistants
![](/GROUP_Share/Stockbilder/Gekauft/6361/image-thumb__6361__MediumTileGrid-item-main-s1-3/AdobeStock_283492262.jpg)
Application Integration & Process Automation
![](/TTA/Technologien%20neu/Mendix/18947/image-thumb__18947__MediumTileGrid-item-main-s1-3/mendix-serviceangebot.jpg)
Our service offer for Mendix
![](/EDC/Partner%20Logos/Mendix/26478/image-thumb__26478__MediumTileGrid-item-main-s1-3/Partner-Academy-White-H.png)
TIMETOACT is Mendix training partner
![](/TTA_AT/Servicebeschreibungen/27963/image-thumb__27963__MediumTileGrid-item-main-s1-3/Cloud-Banner.jpg)
Cloud Transformation & Container Technologies
![](/TTA/Referenzen/KI.TEST/23128/image-thumb__23128__MediumTileGrid-item-main-s1-3/KI-TEST_Logo_mit_Schriftzug_rechts.png)
Interactive online portal identifies suitable employees
![](/TTA/Technologien%20neu/Mendix/18895/image-thumb__18895__MediumTileGrid-item-main-s1-3/Mendix-Banner.jpg)
Advice around Mendix
![Application Modernization beschreibt die Modernisierung bestehender Applikationen Headerbild zu Application Modernization](/TTA/Kompetenzen/Application%20Development/Application%20Modernization/14435/image-thumb__14435__MediumTileGrid-item-main-s1-3/Header-application-Modernization.jpg)
Application Modernization
![Incident Kommunikation Management als Benachrichtungstool für Statusveränderungen Ihrer Systemkomponenten. Headerbild zu Incident Kommunikation Management](/TTA/Technologien%20neu/Atlassian/Anwendungsgebiete/15457/image-thumb__15457__MediumTileGrid-item-main-s1-3/Header-Incident%20Kommunikation%20Management%E2%80%8B.jpg)
Incident communication management
![Bei Application Development bzw. Anwendungsentwicklung wird eine neue Anwendung konzipiert Navigationsbilc zu Application Development](/TTA/Kompetenzen/Application%20Development/17540/image-thumb__17540__MediumTileGrid-item-main-s1-3/Nav-Application-Development.jpg)
Application Development
![Mit Requirement Engineering Vielzahl an schleichenden Erweiterungen vermeiden. Header zu Requirement Engineering](/TTA/Kompetenzen/Application%20Development/Requirement%20Engineering/14431/image-thumb__14431__MediumTileGrid-item-main-s1-3/Header-Requirement-Engineering.jpg)
Requirement Engineering
![Containerisierung mit Open Source Headerbild zu Containerisierung mit Open Source](/TTA/Technologien%20neu/Open%20Source/11600/image-thumb__11600__MediumTileGrid-item-main-s1-3/containerisierung.png)
Containerisation with Open Source
![Mit Fullstack Development kommt das Projekt aus einer Hand Header zu Fullstack Development](/TTA/Kompetenzen/Application%20Development/Fullstack%20Development/7815/image-thumb__7815__MediumTileGrid-item-main-s1-3/header-fullstack-development.jpg)
Fullstack Development
![](/TTA/Referenzen/Schw%C3%B6rerHaus/11787/image-thumb__11787__MediumTileGrid-item-main-s1-3/schwoererhaus_teaser.png)
The digital customer file with IBM Content Manager
Jira Service Management from Atlassian
![](/TTA_AT/Servicebeschreibungen/27968/image-thumb__27968__MediumTileGrid-item-main-s1-3/Banner-Softwareentwicklung.jpg)
Software, Mobile and Web App Development
![](/TTA/Referenzen/VOV/7147/image-thumb__7147__MediumTileGrid-item-main-s1-3/vov_teaser.jpg)
TIMETOACT implements integrated insurance software
![](/TTA/Referenzen/HOCHBAHN/7133/image-thumb__7133__MediumTileGrid-item-main-s1-3/hochbahn_switchh_teaser.jpg)