All tags:

About me


I have been working as a software engineer since 2004. From initial video encoding/decoding algorithm (H.263 back then) optimization written in pure C, to log based inter database real time data replication research and implementation using C++ (I also coded some RPG on OS/400 if you are old enough to know). I stopped dealing with allocating and releasing memory life and started coding using C# on top of .net Framework 1.1. I have worked with almost all .net versions since then until currently the most recent one -- this page is meant to be rendered by .net Core 2.0. I started using Java when I was already very familiar with C# and .net and found them quite similar from each other -- they all try to solve the same problem using similar approaches, they all try to invent more and more grammar sugar to attract beginners while not telling them sugar overdose causes problems. I miss C#'s real runtime generic types while using Java; I miss Java's immensive libraries while using C#.

Regarding the big website I have been maintaining, most of the active front pages are rendered by and maintained in Adobe AEM while the backend parts are mainly on .net framework and will be working on .net core based on Docker maintained by Kubernetes soon (well, hopefully). I work deeply with AEM and solve most of AEM platform related problems. I also maintain most of our main website's Varnish code (Or I call varnish script because of grammar restriction). Like all of online business company's websites, Adobe Analytics tracking, Google Analytics tracking, Adobe Targeting, SEO implementation, Qubit tag management, Adobe DTM tag management, E-Commerce payments support are all maintained by team in London now. When dealing with all of these internal and external products, business requirements and technical requirements, and some tough platform based problems, I found something worth writting down and being shared -- those that cannot be Googled -- that's why you are seeing this website.

I also love writing python code and I use it to create development tools. We also have a big python based automation test framework (we also have a Java based one for history reason). But my python code has got only one chance to run on live environment -- it lasted around 2 hours acting as an emergency file based storage during database switch and saved several thousands Pounds they say. Things will improve after platform and language agnostic architecture is fully set up -- we are working on that and the legacy systems migration lasts very very long.

As a realist, I use javascript heavily as well. But I still get surprised nowadays when javascript spreads everywhere. The frontend requirement growth hides this language's issues and even makes it prosper. I also don't understand, after so many years, why I still see third party code listening and eating all javascript errors, manipulating all ajax communications and waiting for asynchronous call to finish by using while(true). Not to mention dealing with browser and device differences -- sometimes even crying in toilet doesn't ease the frustration.

And my css skill is as good as you see on this website. Just one question to you css guy, I saw some third party css defining my title to be with red color using important, can I change it to be black by using more important?


Since most of my working time is spent on long term software products develpment(no matter a new product development or existing systems' maintenance) instead of short term projects, I do realize my professional point of view normally stems from treating product as a whole comparing to finishing projects in phases -- that is even after I hold a PMP(Project Management Professional) certificate. When software development process is treated as separated phases, instead of inter connected whole package, short cuts emerge. And short cuts nearly always hurt -- users, customers, developers -- and the costs they generate normally are much more than they save. I've been on this direction so far that I am not sure I am holding some bias in it.

Regarding framwork, library and architechture evaluation, I also find myself tend to take those tools like, parts replacable, non-invasive, standard based implementations as decent, while taking those whole platform like, closed, invasive, unnecessary self invention approaches as "old fasioned", "better to avoid". That might be because I've been working on, maintaining and building software running on these kinds of frameworks, libraries and architectures and was hurt too many times -- where extreme views against "better to avoid" approaches might grow.

Contact information

Best way to contact me is through email:

Mailing Address

Martin Cui
EF Solutions (Services) Ltd
22 Chelsea Manor Street
United Kindom

Social Media


I was born in a small village in Inner Mongolia, China. I grew up there before I went to a boarding school in TongLiao city for high school education. From TongLiao I went to ZheJiang University and got my bachelor degree in Information Technology. After graducation I went to ShangHai and worked for a small software development company called Taoroad for 5 years. I joined EF Labs in 2010. Three years later I was transferred from ShangHai office to EF London office in 2013 and have been working for EF London since then.