Here are some of the things that I have achieved professionally. When I think of each project, it is hard to summarize which project has contributed more to my professional growth as each technology has made a great impact on me.
I got a new offer in Monterrey (828.9 km from where I lived), so I decided to try my skills and luck. After working with Java for so long, I started working with C#.
The main project was using
- C# 5
- .Net Framework 4.5
- SQL Server
- AWS EC2 Instances
- Github as code repository
I started working in integration with external services at a site with moderate traffic, with recurrent tasks running more than 250,00 transactions per day in the background. Since I like to test the latest features, I also updated .Net Framework to 4.6 and later to 4.7, I also updated the language version to C# 6 (I really wanted string interpolation).
The system was already big, but it was entering to a new expanding phase, with lots of technical debt, so I started promoting a refactoring culture and some talks and advises about architecting software.
Latter, I made several other integrations for deployments around the world, and improved several processes, like a task queue processor from 700,000 to more than 1,200,000 transactions per day with less resources.
I think this was one of my biggest leaps in knowledge as I learned a lot in the first months, including:
- Basic AWS and EC2 administration
- Parallel deploy of systems around the world
- How technical debt can really slow you down in a short term
- You need to consider time to create software, but also to maintain it
- C# has great tools and libraries, like Entity Framework, Linq and the language itself
I was, and still am, surrounded by brilliant people. I participated in the design of several other projects, one of our heaviest servers started processing around 3 million requests per day and grew to around 8 million.
We are still learning new things every day, pushing our boundaries and learning from each other, it has been a great place to work and grow. The organization gave us a lot of freedom by having us always trying new things and technologies.
Thanks to the organization's open policy for suggestions and developments, I had the opportunity to install XWiki to centralize our documentation, which was spread through mails, chats and technical knowledge of our engineers. We also shifted from Github to Gitlab hosting in one of our instances and started generating our own Nugets to reuse code in several projects.
Thanks to a project that I did with my friends (Carwash, details below), I learned Scala, and latter had the opportunity to build a simple system in Scala. I implemented CI thanks to Gitlab runners and docker. It used Playframework and akka for some simple recurrent tasks (update some log stats in more than 100 different database connections).
After this project, a new bigger project started with me as one of the main architects and technology leads. I then worked on the base of a more complex system, with a really high throughput of traffic. This was were our team refined our talent in cloud architecture, creating a complex system with AWS services with Redis, RDS with Aurora, Dynamo, CloudFront, CloudWatch and many others.
The main system is scalable, allowing us to save resources when the traffic is low, and prepare when the traffic is growing. There is still a lot of challenges in this project, but it is working and growing at a really fast pace. It has been the biggest project in which I have been involved in and I am grateful for the opportunity. I continue to search for new ways to improve our codebase and infrastructure.
We discarded IIS and went full Linux deploy, with docker and docker-compose, which was great. We then started designing as micro-services, while the systems started handling more traffic than ever, with a cycle of very frequent changing requirements and process. It has been a truly enriching experience.
This project also deserves a separate post, and has a very special place in my heart, so I will try to keep it short.
I had the opportunity to help my father with a dream business of his, a Carwash called “Pepe y Toño”. It is a small business, the construction is happening step by step with the help of my father, his brother and any help that I can provide.
We searched for software for the business, but almost everything we look at was outdated or over our budget. Besides, a custom program would allow us to apply our development skills.
I contacted my friends from the university and we got together one more time to work on this project.
We started with the mockups using balsamiq (here are some of them)
Then we decided the basics of our architecture, 2 members were in charge of the front end, were they used React, meanwhile me and another friend started working on the back end, for which we used Scala and Play Framework. The reason why we chose Scala was that it was a personal project and we always love to try new things.
Since it was getting fashionable again, we decided to learn functional programming. So, with nothing to lose we started this project.
For the project, I installed a server in my home, were I mounted Gitlab to keep our code repository, it also worked as test server.
The learning curve again was a little hard, I had some problems getting used to this new way of thinking. My last change was from Java to C#, but they were very similar, in Scala the paradigm shift was hard, or I thought so, but latter, watching some videos of Venkat Subramanian, it made things clear to me.
After some time working with futures and functions, it became natural, it was less code, and I loved it! The front end team was also learning React, so our advance was a little slow but very fun. Later, I used what I learned here to create another system in my work with Scala, Playframework and akka.
While I loved Scala and functional programming, I feel more comfortable in other frameworks. Play Framework was great, but I liked spring and AspNet core more.
We decided against going forward with Scala due to the fact Hibernate and Entity Framework had more established communities. Therefore we decided to move the back end to Java and Spring with the help of JHipster, but more on that latter.
We started working on another project for a friend of a friend, which was a point of sale product for an auto parts store. It was basic (Sales, purchases, clients, providers), but with some customized quirks for the business.
For this project we were very constrained for time, since the four of us knew PHP, Yii was chosen as the framework. I personally wanted to use JHipster with Java and Spring, but only two of us knew Spring, so, we decided to go with PHP. Now, PHP is not my favorite language to say the least, I strongly prefer some other languages like Java or C#, maybe Go, or any static type language, but this is a story for another time.
The stack ended up being
- Mysql for the database
- PHP and Yii for the web app
- Html layout with Inspinia from Wrap bootstrap
- Boostrap, jquery and react in some components
- A sidecar running Spring with Hibernate search for full text search
- Running in an instance in Google Cloud
- Code repository was in our Gitlab in house server (now moved to Gitlab.com)
One of the reasons to choose us, was an automated process to update the parts catalog with a list of providers, allowing the business to focus on what matters and not keeping up their catalog updated, this also permits to create sales of products not in stock, to be latter purchased on request (all this process with the help of the software).
Other thing that we put a lot of effort was the product searching, It can be as detailed as you want, specifying brand, year and other things, or you can use our full text search (something that we did not see in other stores) powered by Hibernate Search and Lucene, allowing to make more vague requests from the customers.
This system is in production and we are in the maintain cycle, adding some features on request from our client. It has around 200,000 products and growing each day.
Here I learned more things, like how hard can be to get a full text search working as you want, and to try harder to convince my teammates next time to not use PHP.
I got the opportunity to be one of the mentors of a course for C# and Net Core, the course last several weeks, each one with one subject (Architecture, Testing, CI/CD, Handling big data and others) each week had 3 days of course, 12 hours a week (3 hours on Tuesday, 3 on Thursday and 6 on Saturday).
I got two weeks, architecture and big data processing, so, I created my presentation about architecture.
Since I wanted to be as pragmatic as possible, I presented a simple problem and ask them how they would design the system, then I give my talk with the power point presentation talking about architecture, definitions, advices and other details. Later we started working on architecture of the problem with this knowledge in a Github repo.
It was heavy to prepare the course, since I love the subject, I wanted to make it the best possible, and while I think a lot about architecture, I do not consider myself a superhero expert. But everything worked fine, and it was fun to work as mentor, I received good feedback at the end of the course!
So, these are some of my highlights as programmer, I would really love to hear more histories from more people! I feel so lucky for start programming things so simple, and now, to have an impact in so much people daily life.
I still love programming, and I still love to share knowledge, it is what brought me here today, so I hope I can share with more people, and maybe help some soul like so many forums, blogs, stack overflow answers did and continuing doing for me.
The other parts are older experiences that I like to share, thanks for read till the end, any comment, question, suggestion, I all open! and I wish you a Happy codding!