I'm familiar with all layers of the web application or service stack. This includes:
- Network, server, hosting environments and their constraints: scalability, storage, file-systems, redundancy, race conditions, DevOps.
- Data modeling: using reasonable data storage depending on the needs: traverse, index, handle transactions, replication, redundancy, etc.
- Business logic: good understanding of the project end-goal and business logic.
- Programming: API Design, framework decisions for scalability, performance and maintainability.
- Being an actual user: it's impossible to give a good service to the users if you don't use your own product.
I'm running a technical blog and from time to time I write something on my personal weblog. br>
I've worked on 6 projects in the company as back end software developer such as Pornhub.com and VideoBash.com.
The company being in constant expansion and new teams being built, it didn't took long until I was promoted to lead software developer.
The technologies involved in most of the projects I've worked in are PHP, MySQL, Redis, MemCache.
I worked in the Tubes division in not least than 6 end-user products and in some internal tools. I take care of interviewing and hiring, mentoring and supporting; of the communication between the BackEnd team and different teams such as Content, Product Owners, SEO, Security and IT; and everything related to the high-traffic projects, such as infrastructure design, software architecture, resources management, tasks management. code reviews and deployments.
“Nico is a leader you definitely trust and want to work with. His approach of open communication and trust has made a big positive impact on the team's dynamic. On the technical side, Nico's analytical and problem solving skills, his sense of responsibility and his impressive knowledge of the variety of technologies we use made him one of the pillars of the TrafficJunky team.”
“Working with Nico was a great experience. As a team lead he was always opened for discussions and suggestions. I remember many times where I went up to him and we discussed how to tackle issues and you could see he was actually listening to what you had to say and taking it into account. On many occasions, even if he wasn’t sure that me, or my teammates, had the right solution; he allowed us to try our solution and learn from the results. He would also give great advice on how to proceed to succeed.”
While I worked in the project I was in charge of the code, third-party providers integration, deployments and testing. I also managed the migration to a different datacenter and a set of domain changes (before was porn.md, now is pornmd.com)
Integrated to a third-party service which helps in the search between more than 1.2 million videos, PornMD provides a set of filters to get exactly what you're looking for. When no exact match is found for your query, we'll use your history information to get suggestions we know you'll like. Give a try to the Porn Doctor at Porn.md
According to them: Video Bash is your first and final stop for free funny videos, games and pictures guaranteed to brighten up your day. The funniest jokes and the most unbelievable pranks caught on tape have been collected in one spot for your viewing pleasure. This is entertainment at its best and no one does it better than Video Bash. These funny clips crackle with humor and they will definitely have you laughing till your sides hurt. Quality is our number one priority and the free funny vids here are the best of the best. There are no mediocre videos here. All the videos, jokes, pranks on Video Bash are the cream of the crop and you'll be hooked from the get go. The best part is you don't have to keep all this good stuff to yourself, you can share all the free entertainment videos with your friends.
Some weeks later another web developer joined the team, and since then we needed somebody to take for real the leading position. It's not easy to have a big projects in hands of four high skilled programmers without anybody taking the lead. Where were we going? Who will coordinate all tasks? With four people in a team, the product managers started to request more from us, but we were lacking internal management. Four creative minds are not a guarantee of success, if each of them pull in the wrong direction. That's why I've talked with my manager to help me to take the leading position: I was the developer with most experience in that particular project and I had a couple of innovative ideas to apply on it. That's how I became, for a period of 5 months, the Pornhub lead developer. The biggest project in the company -in terms of revenue- was on my hands while I was learning on my own -with some help of my superior, some management books mixed with MySQL, Sphinx and Redis manuals- how to manage a team. I've proposed many changes in the daily tasks, changes in the workflow, in the way we were interacting with other teams such as web designers, front-end developers, product managers, advertisers, quality assurance and system administrators among others; and established a working way that nowadays is still in use, even if I am not managing the team anymore.
At that time I was responsible of reviewing all changes in the project -code, database structure, new implementations, caching strategies, infrastructure- while another member of the team was in charge of task assignements. This gave me the opportunity to focus 100% in the technical aspect of the project and making sure that each release was fully stable. I was getting all commits in the Development branch and merging them in the Production branch according to requirement's priorities, and only me was allowed to make changes in the production environment. Nobody than me was allowed to deploy. I decided what was going to live and what will stay in the development branch until was fully optimized, always keeping happy my product manager.
But that was not the end. Such a big project as Pornhub can not be handled by somebody who's making the first steps on management. The best thing to do at that moment for my career, for Manwin and for the project was to change the lead of the team for a more experienced developer. Somebody older in the company. That's how I got switched with another lead programmer; he took Pornhub and I took part of his workload. I've got assigned a team of three new Manwin employees to work on four projects simultaneously. Given that I had the experience of managing a single big project before; with the team change the challenge was to keep being focused in four different projects, training new developers to feel comfortable in the company, making them feel confident on themselves and on myself to deal with high-traffic volume while mixing different technologies and dealing with external teams. My story continues on my next position: lead software developer at Manwin Canada
About PornHub: its based on 100% object-oriented PHP using an in-house framework. The technologies involved in Pornhub are mostly MemCached -we were moving away from it when I was leading the team-, MySQL databases with replication, Sphinx as the search engine, multiple external services on REST calls and Redis as a NoSQL database. It's hosted in 10 web servers behind a high-availability proxy, has 8 relational database servers, six Redis servers, four Memcached and four Sphinx.
With them I made many developments for different big companies and small startups, and I participated on many internal projects.
“Nicolas is a very responsible developer and a very deep technology enthusiastic. It was very constructive to me have been worked with him.”
“Nicolás is an amazing programmer and most important a great partner. As our lead programmer he directly managed the development team and was a key participant in the succeed of every single big project we did (most of them for big corporations like Universal Music and also for an important list of international startups). I strongly recommend him for any kind of new media project, specially if he can be on a leading development role.”
In the back-end site we provided a flexible CMS with statistics, so the customer was able to see trends, analyze the impact of different campaigns, see the blogs with more stream, trace the time a video was watched (how many people started to see the video but didn't reached the half of the duration, how many people watched until the end, how many people restarted to play the video, etc) and from which sources (the site itself, affiliated blogs, etc).
I worked as head developer for this project, being responsibly of it's technical success. Currently it has been replaced by the official Universal Music France website.
This includes networking, server and hosting environments and their constraints: scalability, storage, file-systems, redundancy, race conditions, DevOps, deployments, disaster-recovery, observability.
As a Lead Developer I've dealt with different people styles, building a team of specialists in the different aspects of the software development process: front-ends, back-ends, managements, database specialists, code specialists, strategy specialists, etc.
More than 7 years of experience with Object-oriented PHP, using frameworks like Zend Framework, CakePHP 1.3, Kohana 3, Symfony 2; and collaborating with the development of in-house frameworks serving more than 20 million visits a day.
MySQL was picked as the database server in multiple projects. I'm familiarized with it and it's internals, such as the different storage engines, replication, multi-master environments and load-balancers. I've used tools as MySQL WorkBench, PhpMyAdmin and of course the command-line interface. I've optimized MySQL servers and usage across many different projects.
Redis is an open source, advanced, replicated key-value store. It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets and sorted sets.
Redis can handle atomic operations on these types, like appending to a string; incrementing the value in a hash; pushing to a list; computing set intersection, union and difference; or getting the member with highest ranking in a sorted set.
In order to achieve its outstanding performance, Redis works with an in-memory dataset. Depending on your use case, you can persist it either by dumping the dataset to disk every once in a while, or by appending each command to a log.
Memcached is a general-purpose distributed memory caching system that was originally developed by Danga Interactive for LiveJournal, but is now used by many other sites. It is often used to speed up dynamic database-driven websites by caching data and objects in RAM to reduce the number of times an external data source (such as a database or API) must be read.
I've used MemCache in almost all my projects, together with NutCracker (aka Twemproxy) for better sharding, load balancing and performance.
Some of the biggest products I've worked with are using HA-Proxy in production environment.
It's very important to know how to create a reasonably normalized relational model, with foreign keys, indexes, views, lookup tables, etc.
However in many cases it's much better to de-normalize the information and rely in not-so-strict data structures such as documents or graphs.
I've used protected CDNs with hashes and IP ranges for static (small) and large content; and as Http reverse proxy as well, such as Incapsula.