Masha Reko - Apprenticeship Blog

What we have to learn to do, we learn by doing. (Aristotle)

Day 81-86: Floating Through SkillSpace

It’s been a while since I posted, but I guess that’s because I went too deep in my “developer mode” that I totally forgot about everything else, as usual. Today I realized I should take a step back and relax a bit - after all, we are on track with our goals for the week, the app is deployed and everything is going according to plan. Therefore, I’m back to blogging!

So what’s been going on in the Masterpiece universe? Well, first of all, it finally got a name! I always wondered why naming a thing gives it so much power and makes it so much more real. It truly feels like our baby now, and both me and Anastasia are fighting hard to give it the best life it can possibly have. It was difficult comming up with a name, though. There were a couple of options in the air, but we finally settled on SkillSpace. Perhaps we could have done a better job there, but it kind of grew on us over time. I did call it SkillShare the first couple of days for some reason, but now I finally got used to it :)

We also set our milestones, with a vision to deliver value every week. Those are namely:

  • Week 1: I can login and view my profile. Skills, recognitions and achievements fields exist, but are empty. I can also see my peers’ profiles.
  • Week 2: I can manage my skills (add, update delete). I can search for users and skills I need help with.
  • Week 3: I am able to give and receive recognitions from my peers.
  • Week 4: I am able to get achievements and view them on my profile. I can see my peers’ achievements as well.
  • Week 5: A Slackbot reports the newest events on a dedicated Slack channel.
  • Week 6: I can see a Newsfeed with all the newest events (skills, recognitions, achievements).
  • Week 7: The code is clean and maintainable. The documentation is done.

Over the course of the first week, we realized that login and profile views is a nice and necessary thing to have, but it doesn’t really provide any value to our users. So we either missed the mark with the first milestone, OR we were wrong in promissing any kind of value after the first week. To be honest, I am leaning more towards the latter, as it was probably not that realistic to do more than we did (in terms of functionalities) in just a week, with the technologies we are completely new in, and all the other things we also had to take care of (deployment, design, etc.). Of course, perhaps it was wrong to prioritize login and do it first (which was not very lean of us, I admit). On the other hand, even the login was something new to us, and therefore risky, as we had to find a way to use the company accounts for authentication. So we kind of had to get that out of the way as soon as possible.

All in all, we made a mistake somewhere, and I’m still not sure where exactly. But that’s okay - we are trying and learning, failing in some areas and triumphing in others - and I can live with that. At the end of the day, I am happy that we still managed to reach the goal we set. Now we can go into the next week without any leftover work weighing us down, and actually start producing value. And it should be at least a bit easier to do so, given that we finally figured out how the tecnologies that we chose work.

Speaking of technologies, we decided to go for NextJS, which is a React framework that also provides service-side rendering. It is easily integrated with Express, so we essentially ended up with a full-stack JavaScript app. I must say that I really like it so far. It makes things a bit easier to grasp, and with just one command you can magically build and run both the client and the server. There are some downsides, of course, with the biggest one being a very small online community and by virtue insufficient documentation and support. Additionally, NextJS is unfortunately still incompatible with some npm modules. Thankfully, these issues do not affect us that much for now. We’ll see if that changes as the project continues to grow.

For the frontend components, we use Material Design. I found it pretty neat, especially for people with zero skills in design, as it provides you with ready-to-use, of-the-shelf components that you can literally copy-paste into your code. We had some issues with the npm package that we were using, though (material-ui). Namely, for service-side rendering some additional configuration needs to be done, which we didn’t know at first. So it happened that only the first page that you open renders properly, and in all others the CSS just disappears. This caused hours of frustration, as you can imagine. Eventually, the solution was to manually set up the server to provide the required CSS to the page on every request. And then on the client side, the CSS needs to be injected a second time before removing the server-side injected CSS. Sounds complicated, but with the help of the official documentation, we managed to solve the problem and now everything works like a charm.

To conclude, I can say that I’m pretty satisfied with our progress. And also, it was a joy coming to work every day knowing that I have some coding to do. Oh, how much I’ve missed it! Perhaps a bit too much, as I find myself completely immersed by the project, unable to do or think about anything else. It’s been a while since I was as enthusiastic about something, but I guess I need to find a way to control that enthusiasm a bit better, relax a bit more, and learn how to appreciate other aspects of the project besides coding.

And yet again, this blog helps me put things into perspective. Sometimes I wonder how did I ever live without it…