Six Years, Thirty Companies, and One Bad Tkinter App

My career began with a surprising collaboration with my professor during the last semester of the year before my final year of my bachelor's degree in computer engineering at Çukurova University, around 2020. He had some experience working with government incentives and grants, especially Tübitak and official R&D Centers — Turkey's main public-funding routes for applied research. Machine learning and AI in general were the hotspots in those years, and grants were specifically targeting AI work. He hadn't been exposed to AI yet and wanted a workforce that knows what he is dealing with, could tackle and solve those problems, build the tools, products, and systems, and secure the grant, and he found the one-man army, which is me, of course. We started in September 2020 with a modest clothing company, Sefamerve, which wanted demand forecasting for their products' future sales, which, of course, needs no explanation. By December that year we'd added Comdata, one of the well-known call centers, which wanted to forecast future call volumes to optimize call agents' schedules and create a system they could use productively. And by January 2021, an international car parts manufacturer, Teknorot, came on with the same problem: demand forecasting.

After a while, it became clear that the industry needs this; forecasting future values for any given data will eventually occur, so instead of coding everything manually, we could have created an app that would make it possible for us, and even for others who are not proficient code writers, to get results using machine learning and AI in general. So I did that. There was already a similar ongoing project called DTReg, which was basic, only limited to Windows, and, of course, paid, and not free. Being a fresh young developer, I have made terrible mistakes, design choices, and engineering that will shoot me in the foot several times in the future. One bad decision was to use tkinter for the UI, since DTReg was already using it, so I went with the same approach. Don't get me wrong, I am not against Tkinter, but it didn't look good at all, and we weren't in 1980; it was the 2020s. Looking at it now, I could have used QT instead of Tkinter, which would have looked much better. Not stopping there, I didn't separate ui and logic from each other; it was one giant Python class where everything was tied together, mutable state everywhere, functions not returning, and changing the state itself, methods calling methods, no private functions, everything is one giant code. All of these could have been avoided if we had also been taught functional programming alongside object-oriented programming in our education, but that is a topic for another time. It started as a one-page LSTM-based time series tool and became a giant app that packed a bunch of algorithms together with no modularity, separation of concerns, or anything along those lines taken into consideration. As I said, I was fresh blood. But we used it well: for every client, I had to delete some places on one page, some on others, and maybe add a little something to serve more than 30 customers. I always had the thought of restructuring it, but I was telling myself, we won't get any more customers, of course, I was wrong, people had too many problems to solve.

After a while, I started getting work that is not just predictive modeling. Times are changing, people have learned what ML/DL can do, and they want that. I had started working with Datakod, which has a large volume of customer data. They wanted to understand customer behavior, so I studied and implemented systems such as customer segmentation, campaign recommendation, churn prediction, association rule mining, and even anomaly detection on customer data.

From One Model to Understanding Customers

The demand-forecasting approach I'd built for Sefamerve, matching new products to older ones by image similarity and borrowing their sales history, never worked as well as I wanted it to. By this point I'd learned to be more upfront with clients about what a model could and couldn't promise, instead of just shipping the cleverest idea I had.

Datakod ended up being one of the broadest engagements I've had, running from January 2022 to December 2024, and it's the one that pushed me from "build me a forecast" to "tell me who my customers are." Alongside segmentation and campaign recommendation, I built association rule mining with FP-growth and Apriori for their market-basket data, RFM scoring, and anomaly detection, packaged as BI and intelligence reports rather than another Tkinter screen.

Albert Solino, a consultancy firm, kept me busy from May 2021 to January 2023. The core deliverable was a churn and lifetime value system wired directly into their CRM, but the part I remember best is mentoring two of their mid-level engineers, who ended up rebuilding the MLStudio idea from scratch in Flask, a framework I'd never touched myself. Watching someone take the concept and remake it cleanly was a good sign that the idea itself, even if my implementation of it was a mess, had been sound the whole time.

Two more from this stretch are worth a mention. Unsped Customs Consultancy got funded through Tübitak 1511, the same government R&D grant track from the intro, off a churn and CLTV model I built for them, which is the kind of validation that matters more to me than any accuracy number. And HepsiEmlak, the real estate marketplace, had me spend most of my hours writing R&D Center registration and Tübitak proposal material rather than shipping models, with recommendation and duplicate-photo-detection work happening underneath.

Teaching Others to Fish

Somewhere in this stretch the work started changing shape again. I wasn't just being hired to build something anymore, I was being hired to teach other people how to build it.

Protel, the hospitality and restaurant-tech company, had me lead and mentor five people, from juniors to seniors plus one MSc student, on demand forecasting using ARIMA, LightGBM, XGBoost, and Random Forest — the first time I was responsible for other people's output instead of just my own. At Nano I taught ML/DL fundamentals and guided the team toward building their own MLStudio equivalent, except in C#, which proved the idea wasn't tied to my stack at all, it was tied to the workflow. Gtech, CukurovaMakine, and JForce rounded out this period: three more data scientists mentored into their own forecasting interface at Gtech, and straightforward ML/DL courses for engineering teams at the other two, one eight modules long, the other reaching more than ten engineers.

Taking a Real Job While Still Consulting

While all of this was going on, I also started taking on work that wasn't consulting at all. OxyAI brought me on as a contractor from May 2021 to January 2023 to build recommender systems for their clients. For Collectors, an online art gallery, I built a hybrid multi-modal recommender that combined a user's text preferences with CNN-extracted visual features from the artwork itself. For Dinlebi, an Audible-style audiobook app, I built collaborative filtering with matrix factorization, plus an onboarding data-collection flow specifically designed to take the edge off the cold-start problem. Both are apparently still running in production.

In April 2021 I joined Universal Software full time, a company that builds software for municipalities, ministries, and the utility companies that work closely with them, like water administrations and energy providers. This is where the work stopped being purely about a single client's forecast and started touching physical infrastructure. The two projects that stuck with me most: a route optimization system for municipal garbage trucks, built on IoT sensors mounted on the bins themselves reporting fullness and flagging fire or flood events, routed through heuristic algorithms instead of a fixed schedule; and a real-time object detector for Enerjisa, the country's largest electricity provider, that ran on the phones field workers used to photograph inventory, so blurry, duplicate, or empty shots never made it into the database in the first place. Around the same time I also built a predictive maintenance classifier for a client's CNC assembly line, LSTM forecasting pipelines for electricity and gas consumption under a project called GAM-GAD (short for Geographic Analysis Modules and Geographic Analysis Tools), and an LSTM pipeline forecasting future water demand for the Istanbul Water Administration.

Leading a Team and Chasing Grants

Universal Yazılım also runs the support software a lot of municipalities use, and two of the projects I'm most proud of came out of that side of the business. The first is a ticketing classifier that uses TF-IDF and sentiment embeddings to route incoming citizen complaints to the right department automatically, now running across every municipality the company works with and fully replacing the person whose job it used to be to read and route those tickets by hand. The second is a support-ticket system for the municipalities themselves — when something breaks or needs adding in the software we've deployed to them, or they just have a reproducible support question or an event to log, they open a ticket here. It was generating fifty to a hundred messages a day, many of them repeats of questions already answered, buried in typos and miscategorization. I shipped a first version that uses embeddings and clustering to find the underlying topics, an LLM to clean the raw text into something legible, and a sentence-similarity layer to auto-answer anything already solved before. It cut response time by roughly half, and it's still one of the most exhausting and most satisfying projects I've shipped.

I'm still on it, too. I've since been handed years more of that same ticket history, profiled it properly, and sketched out nine more directions worth building on top of version one — category prediction, time-to-resolution, SLA risk, routing, duplicate detection, clustering, process mining, response suggestion, anomaly detection. Haven't committed to which one's next.

In January 2024 I was promoted to lead Universal's AI R&D team. Since then I've been the technical lead on two Horizon Europe consortium proposals: FloodGuard, a flood prediction project Universal manages end-to-end, and Pre-act, a fire prediction project Universal only participates in. FloodGuard alone was a 3.5 million euro consortium. Neither was funded in the end, but putting them together taught me more about scoping a multinational research project than a funded one probably would have.

Around the same time, I picked up a project funded under Tübitak's 1832 program: forecasting future river discharge across Turkey. I started with the obvious approaches first, supervised regression models, then autoregressive deep learning models, and all of them performed badly. What ended up working was a custom seq2seq LSTM with attention built in, which is now running across eight regions and sixteen river basins around the country. I'm leading the project together with our hydraulics engineer, which has been its own kind of education, explaining to a domain expert why the model is doing what it's doing, and learning enough hydrology from him to know which features were worth engineering in the first place.

In the middle of all this I also went back to school. I started a master's at Çukurova University in August 2023 and finished in February 2026, with a thesis on estimating an object's length from a photo without any physical reference point in frame, using depth estimation and attention-driven vision models. It's a narrower, more academic kind of problem than anything I'd been paid to solve, which was exactly the point of doing it.

Where the Consultancy Work Stands Today

The consultancy side never stopped while all of this was happening, it just kept compounding. Four engagements are still active as I'm writing this. Inveon, an e-commerce technology company, has me building product search that works off titles and descriptions without needing exact matches, a mixture-of-experts-style image classifier across more than fifty product subcategories, and similarity and recommendation systems that can take an image, a description, or a title as input, all shipped through Tkinter, Streamlit, and FastAPI. Ikas, an e-commerce SaaS platform, is running the full three-route pattern I eventually settled on for app delivery — Tkinter for model-building, Streamlit for people who need to use a model without touching code, an API for everything that needs to live inside their own systems — all deployed and actually in use, which is a long way from the single overloaded Tkinter file I was patching by hand for Comdata six years earlier. Moka, a fintech and payments company, has me on price prediction, churn, lifetime value, and forecasting, deployed on Azure with Docker and Kubernetes, working inside an actual team with git pull requests instead of being the only name on the commit log, which still feels new after years of working alone. Robokobi, a CRM platform for SMEs, has me on financial forecasting using the same Tkinter-plus-Streamlit pattern.

Smartiks, a software company, was a similarly long-running consultancy: three years working with their R&D center, eventually leading a small team of three there. Most of that time went into writing and leading the technical side of ITEA consortium proposals, the same kind of grant-scoping work I was doing for Universal, just for a different company's portfolio. Underneath that sat a handful of smaller deliverables — a Basal Metabolic Rate model for a health client, e-commerce customer segmentation, a bird-detection model for drone safety. That engagement wrapped up in May 2026.

Underneath those is a long tail of shorter, narrower engagements. Badem is the one with the most history — regression and churn/LTV models since 2022 for a company serving more than a thousand doctor-customers. Past that, it's a dozen more SME, fintech, and energy clients running the same handful of recurring problems: forecasting, churn, fraud, feasibility. The full roster, with dates and tech stacks, is on the /work page if you want the long version.

Looking back at all of it, the throughline isn't really the algorithms, it's that I started out as one person patching a single overgrown Tkinter file by hand for every new client, and somewhere along the way that turned into leading teams, writing European grant consortium proposals, and mentoring other engineers into building their own versions of the same idea in languages I don't even write. I'd still rewrite that first app from scratch if I had the time. I'm not sure I'd change much else.