Lessons learned during my time in Flywire

I joined Flywire two years ago with the expectation of joining a team in which I could grow both personally and professionally. Before I move on to the next step in my career, I wanted to dedicate some time to writing down the most valuable lessons I’ve learned from working in there.

From the moment I graduated from university, my goal was to achieve technical excellence. Joining an Extreme Programming (XP) team such as the one in Flywire seemed like the right choice. Looking back, I can confirm that it definitely was. It took my technical skills to the next level.

However, the most important lesson I received it wasn’t related to the technical knowledge that I gained. Instead, it involved a mindset shift about how I approach software development. When building a product, software is a means to an end and not an end in itself. I learned that the ultimate goal is to deliver the value contained in the user stories and keep it always just right for the current needs. Here’s when practices such as Simple Design, Pair Programming, Test-Driven Development and Design Improvement deliver all its value.

As I was polishing my technical practices I also noticed the extent to which interpersonal skills play an important role in the development process. Since developing software is a team effort, maintaining communication and a good relationship between team members is key to completing the team’s goal. Ironically, we developers, aren’t known for our soft skills. Hence, I focused on improving my communication in order to become a better team member. For instance, the talk Think Fast, Talk Smart helped me overcome one of my main problems, which was that my speech lacked of structure. Consciously practicing storylines such as “Problem>Solution>Benefit” or “What is it?>Why it’s important?>What do we do now?” made my arguments easier to understand.

In addition to improving our interpersonal skills, I learned the importance of establishing certain dynamics to help the communication flow. Theses processes should keep the engineers, product and the business aligned. Carrying out quarterly planning, applying goal frameworks such as OKRs, or the Planning Game, with dynamics such as Story Mapping, helps to reach that alignment.

Another factor I didn’t take into account before joining Flywire was the importance of releasing early and often. In this manner we deliver the value quickly and we receive feedback from our users. At the end, software that isn’t in production is useless software. Some XP practices such as Small Releases, Continuous Integration, Ten Minutes Build, and, Continuous Delivery help to get this done.

In sum, these two years surpassed my expectations and changed the way I approach software development. I started out by going after the technical excellence, but along the way, I realized that software development is much more than just technical expertise.

h4ckademy: Week 2 and 3

As I said in the first week, any of the partner’s projects seduced me but I had an idea.

I’m going to apply to the Google Summer of Code again, it’s my third time and I wasn’t selected the two previous by different reasons. So my idea was to start to get myself involve in the organization even before they are published as accepted, a little bit risky, but, what can go wrong if I choose Mozilla? I started looking for the project idea, choosing it, reading a ton of documentation, picking my first bug to fix and suddenly, someone gave me the bad news: Mozilla hasn’t been accepted as mentoring organization this year. Oh, man! I couldn’t believe it!

As quickly as I could I started to look through all the organizations accepted in order to pick a couple of project ideas. I already got them but I’ll comment the details next week.

However, no matter the election of my project is being a nightmare, I stick to what I came here, improve my test-driving and refactoring skills. So, in the meanwhile, I did some katas with other colleagues, I read some TDD related stuff and I kept doing the refactoring course in which I’m enrolled. I really feel that I’m improving, above all my smells’ scanner, every time I look at some code I start seeing a ton of things that could be improved.

Between the week 2 and 3 I went to the SoCraTes conference in Canary Islands, deserves a post for itself, I hope to have time to write it. It was an awesome experience where I learn a lot and met many interesting and good people. I was about to miss it because of economics reasons, but, fortunately, I took the right decision. We’ll see if l have to eat only rice for a week or two.

h4ckademy: Week 1

Fortunately, I was accepted into the h4ckademy program, which means I’m going to enjoy 6 weeks of immersive code retreat in Madrid together with 11 likeminded fellows. The idea is inspired by Hacker School in NY, and likewise is self-directed. The goal is become in a better programmer.

I’m really excited, I’ve moved to Madrid for the program and Madrid is different than my native Alicante. There are a lot of tech meet ups and most of the best Spanish startups are here, so I’ll have the chance to attend to a bunch of them and meet very interesting people.

The first week has been quite intense, I wanted to choose a partner’s project, because they offer a sort of mentorship that I think it could be very valuable. In my opinion, this is the most important decision of the program, as it is 6 week long, I consider there’s not so much room to change my mind afterwards.

After attend to many meetings with the different partners, I finally chose a project, but the next day I found a project 100% open source which solves just the same that was demanded. By now, I still have no project, but I have a roughly idea to the path I’m going to follow I’ll talk about it the next week, when everything becomes true.

I have to confess I’m a little bit disappointed because my main goal was to improve my TDD flow and refactoring skills. They are difficult to improve on my own, so I expected to pair a lot with the other participants in the program in order to exchange knowledge. However, there is only a person, apart of me, with TDD’s professional experience. Thus I’m going to be able to teach some TDD to the others, even though I’m not consider myself proficient at all, my growth in this practice isn’t going to be as big as I expected inside the program. Anyways, I’m sure I’ll manage to maximize it!

I’m back

I participated in Jóvenes con futuro (JcF) 2014 edition, a program to intern with tech startups in San Francisco and New York, a dream for me. Over the previous months I was subjected to several technical tests and a couple of Skype interviews in order to check my english level and cultural fit.

Finally, I managed to be between the 10% who reached the last step. They sent my CV to 10 companies and I had 2 interviews with them. Unfortunately, none of these turned to offers of employment. In the first one, they were looking for a mobile developer, I didn’t have any experience on it, and the startup who arranged the second interview finally retired of the program because they realized they actually needed a senior profile, not an intern.

As the phases were passing my hopes were getting bigger and bigger, I didn’t want but I couldn’t help it. The hit was really hard when I received the mail telling me that the program was over and it wasn’t going to have more interviews. I usually get what I intend, not this time.

After that, I’ve passed a period of time when I didn’t know if it was actually my dream or something I made up because I felt too tied up and it was my way to get over the situation. Anyway, I’ve been unfocused for a few months where I tried and researched about a bunch of things non-related with IT but I’m back here.

I’m focused again, stronger than ever with the purpose to be a better programmer than yesterday but worse than tomorrow.

Test-Driven Development is a must

I applied TDD during the first development half of my master thesis project, I had to drop it out because of the work load I got when I started my study abroad period on the second semester of the year. I know it’s not the way to go, but I had to do it, otherwise I wouldn’t have been able to deliver it on time. Surprisingly, this decision gave me some valuable insights that I want to share.

I really struggled to make my code testable at the beginning, I discovered that the main problem was that I mixed object graph construction with application logic and I didn’t inject the dependencies to the components. As a result I couldn’t test the modules in isolation, since I didn’t have the needed seams. Besides I found a couple of big challenges more, apart the smaller ones, like stop designing upfront letting the design emerge, or stick to the new development cycle. Actually I spent more time reading about how to resolve the problems that arose than coding, it was a hard learning process but it was totally worth it.

Once the “hard work” had been done in the backend, I had to start in the frontend, with AngularJS, a framework I hardly knew, and a way to develop tests completely different. I started to learn about it, but as soon as I realized the process could be too long, and the work load from my university abroad was growing day after day I had to stop and take a decision. Finally, as you know, I decided dropped it out, because I knew if I kept applying it I won’t meet the deadline, I even thought about quitting for the next year, but, actually, I couldn’t wait more to work on the real world, hopefully, a startup.

The next sprint went well, but not the followings. I didn’t have that feedback for refactoring and the code started to be duplicated and coupled, besides I was working against time, the experience was like previous times in the classroom projects, I placed a patch over another to make it to work out. Definetly, I don’t want that my future professional life become in something like that.

I can perfectly understand to the people who refuses to apply TO, the process hits everything they have done so far, and the beginnings aren’t easy at all, actually there’s not such a thing, TDD is a continuous process of learning and improvement. However, IMHO, I still have a lot to learn, the trade off of develop a code you are proud of, and don’t be afraid to change it for adapt to whatever comes, because your code is ready for that, is priceless.

That’s why Test-Driven Development is a must, at least, for me.



Don’t be afraid to make mistakes, just do it

A lot of things have happened since the last time I wrote. While I was finishing my fifth year at Computer Engineering I applied for Google Summer of Code. Unfortunately, I hadn’t the needed time to apply properly and the result was the expected, they didn’t pick me. At least, I managed overcome all classes at college.

Currently, I have a few elective credits and the end-of-studies project pending. I have picked develop a webapp for my final project, my idea is learn and apply all these things that nobody taught me at university, this way it will become part of my portfolio showing what I can get to do, the only important thing nowadays.

Sincerely, I have to admit I feel overwhelmed, there are too many things I would like to learn in this project. My usual learning process is the following:

  1. I sketch an overview on my mind and
  2. then I pass to learn everything top-down doing small examples to consolidate knowledge, I go as low as I can because I need to know what’s going on under the hood,
  3. all this without forgetting best practices and more.

For me, this is the optimal way, but too long if I want to deliver my final project before the deadline, I’m going to change my learning process for a while. Now, while I was writing I just realized that all is about my fear to do things wrong, to make mistakes. I always have to do everything right and master a technology before I type a line of code in a real project.

I thought differently but, certainly, my final project isn’t a real project, is a kind of pet project that, maybe, someday, it will become in a real project in production, although, it will probably never happen. Finally if that day comes, I will be ready because I’m going to use TDD while it is only a pet project, and the rest would be a problem for my-future-self.

A technical blog and something else

This is my fifth year studying Computer Engineering at University of Alicante. I adore developing software and all things related, even though it is ugly that I say it, but I think that I have great aptitudes for it.

In Spain the developers are not as valued as they should be. There are not a lot of interesting enterprises where you can work. Ultimately, I will have finished the degree next year and then I wish to find a motivating job far away from Spain.

In recent years I have realized about all these things that are not taught along the degree and they are extremely useful for the way I have choose. I researched the hiring section of some of these interesting companies where I would love to work. And fortunately and unfortunately, depends on the point of view, remains to learn a lot yet.

Spain is not the best place to learn English. The point is, Spanish people think that their language is the third most spoken in the world, so that why they would want to learn English. This told me a bulgarian friend and I think that he is completly right. They could not be wrong more. Actually, I also have some lacks in English, as you can see, but I am doing my best to improve my level, I would not like that it become a problem when I try to get job in another country where English is the main language.

So I have decided kill two birds with one stone. I am going to write a blog, this blog, in English about these useful concepts and technology that nobody told me at university and of course something else not so technical.