I got a new offer in Monterrey (828.9 km from where I lived), so I decide 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 an Integration with external services in 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 last features I also updated .Net Framework to 4.6 and latter to 4.7, 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 more big jumps in knowledge, I learned a lot in the first months, like:
- Basic AWS and EC2 administration
- Parallel deploy of systems around the world
- How technical debt can really slow you down in the short time
- You need to consider time to create software, but also to maintain it
- C# great tools and libraries, like Entity Framework, Linq and the language itself
I was surrounded by brilliant people, I participated in the design of other several projects, one of our heaviest servers started processing around 3 millions requests per day and grow to around 8 million.
Playing with other stuff
Thanks to the open policy for suggestions and developments of the organization, 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 a Gitlab hosted in one of our instances and started generating our own Nugets to reuse code in several projects.
Thanks to a project I did with my friends (Carwash, details below), I learned scala, and latter had the oportunity to build a simple system in Scala, with 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 hundred different database connections).
Microsoft Net Core era
Latter we started working in other all new, shinny projects, so we began using Net Core Framework.
I really missed dependency injection from Java, I tried to included it in the previous projects, but since they were already done or almost done, and Microsoft did not have an “official” dependency injection manager, I could not find enough support to include it, but now, Dependency Injection was the core way (yehiiii).
I worked with merge revisions and code reviews in group to facilitate the transition to the new working flow of core, just as a guide. The team taught me more about AWS Services, I started using more:
- Route 53
- ElasticSearch with Redis
- Load balancers and autoscaling groups
While I loved to learn and use all those services, my involvement in the selection and maintenance is limited, generally creating and using, but not administrating those services.
We throw IIS away and went full linux deploy, with docker and docker-compose (and it was great), we started designing more as microservices and have a system handling more traffic than ever, with a cycle of very frequent changing requerimients and process, so, it has been a really enriching experience.
2017 — Carwash
This project also deserve a separate post, and have a very special place in my heart, so I will try to keep it short.
I had the oportunity to help my father with a dream business of him, a Carwash called “Pepe y Toño”, it will be a small business, the construction is happening little by little with the help of my father, his brother and any help I can give and some savings.
We search for some software for the business, but almost all looked old, or were really expensive for our littler budget, so, to help more, what better than made our own administrative software?
I keep contact with some friends from university (the same from the multitouch table and other one) and we got together one more time to work in this personal project.
So, we started with the mockups using balsamiq (here are some of them)
Then we decide the basics of our architecture, 2 members were in charge of the front end, were they use React, meanwhile me and other friend started working in the backend, for which we choose Scala and Play Framework, why? because it was a personal project and we always love to try new things, and I really wanted to learn some functional programming, since it was getting fashionable again, so, with nothing to lose we started this project.
For the project, I seted up 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 use to this new way of thinking, my last change was from Java to C#, so they were very similar, in scala the paradigm shift was hard, or I thinked so, but latter, watching some videos of Venkat Subramanian, it made things clear for 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 littler slow but very fun, and latter I used what I learned here to create another system in my work, with Scala, Playframework and akka (already write about this one in the previous section).
While the system is almost finished (we have all the happy paths, but need more testing), It came to a pause because the physical construction also paused, so we let the project while this is resolved and started working in other things, but hey!, next month (May 2019) the construction will start again, and this time to finish, so, the system will be productive soon!
Sadly, 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, and out ORM (Slick), while was also great, was very far from the community around Hibernate or Entity Framework, so we are thinking about moving the backend to Java and Spring, with the help of JHipster, but more on that latter.
2018 Auto parts store
While the Carwash was paused, we started working in other project for a friend of a friend, a point of sale for an auto parts store. It was basic (Sales, purchases, clients, providers), but with some customized quirks for the business.
For this project we had a very constrained time, and since we four knew PHP, Yii was choosen as framework… I did wanted JHipster with Java and Spring, but only two of us knew Spring, so, we did it in PHP, but, oh boy!, while I could not say I do not like php, I strongly prefer some other languages like Java or C#, maybe Go, or any static typed language, but this is history for other 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 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 ofthe 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 (somehting 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 learn 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.
2017–2018 Mentor and other talks
Whats new in net core? meetup
While working in Lagersoft, I was invited to give a talk in a C# meetup, where I presented “Whats new in net core?”, a short talk about the evolution of the language and the microsoft shift to a more open source paradigm.
After the talk I create a simple demo project showing some features as unit testing, dependency injection, async, configuration management and other details.
It was fun and interesting to participate as speaker, and maybe my presentation was good, so later I recieve an invitation to work as mentor in the programming school “CeroUno”.
Net Core Architecture course mentor
As I said before, I got the oportunity 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 create my presentation about architecture.
Since I wanted to be as pragmatig 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 super hero expert. But everything worked fine, and it was really fun to work as mentor, I recieved good feedback at the end of the course!
The other week of Big Data processing was more practical, first we talked about what is big data and some techniques to deal with it, then we talked about some problems like shared data and mutability, concurrency and functional programming as a tool to achieve immutability.
Then we made some simple examples in C# and later we mounted an Hadoop cluster with azure, processing the data with C#.
2019 JHipster dental office
Again, with my friends we started other project for a friend, this time we choose JHipster because:
- I still love java.
- While I had play a little with Spring Framework, I was really interested in use and learn more of it.
- Because front end it is not my strong side, the JHipster layout provided a really good base to work on.
- The JHipster stack looks very promising.
So, we started practicing with JHipster, since one of my friends already knew React, we first tried with the React integration, and I even got one pull request merged by the project! (really simple contribution, but it felt awesome!), we also tried the inspinia layout again, and, well, while I loved the part of immutability and the virtual dom… I really did not got convinced by the reducers part, the switches with strings.
But the thing that hit me more: the code was hard to update, so we tried a side by side approach (keep the generated code intact and extend everything in new files), but React was not so fit for this technique, so we change to angular, I knew that angular had dependency injection, something that I loved, and inheritance of components seemed to be more natural (coming from a Java background).
Inspinia was short of components for angular, so we changed our layout to appwork, also from wrap bootstrap.
I felt more comfortable with angular to be honest, but again, I am pretty sure that was for my Java EE and C# Net Core previous experience (I am not close to take react again, it has some really great capabilities, you can even make a native app!).
This app is in process, little slower that I wanted, but I am having more office work these days, not much free time (While I love programming, I also love playing video games and hiking!), but still learning one of my most liked stacks, JHipster courtesy:
- Angular with TypeScript for the front end app
- Spring in the backend
- Java 8 (update 2019–05–19 JHipster 6 is out, Java 11 ready!, gonna update soon)
- Postgresql as database
- Deploy with kubernetes
- Code source in gitlab
- CI/CD Pipeline with Gitlab
The end for now
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 in so simple things, and now have an impact in so much people lives.
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.
Thanks for read till the end, any comment, question, suggestion, I all open! and I wish you a Happy codding!