Picking up the pen again
I haven’t written much in recent years, at least not publicly, and I decided now would be a good time to start again.
I also haven’t written much code in recent years, so I decided to re-write Factile in a more popular tech stack. It has been a great experience for various reasons:
- I could resurrect Factile which has been sitting on a broken server for past 3 years with me having no time to fix it
- I could experience first hand some of the techs my colleagues have been talking about - its been extremely fulfilling
- … and it gives me confidence that I can still write a fair quality of code
It took me about 4 weeks of few hours a day to completely rewrite it, and I followed the engineering practices I have been coaching my teams on.
Factile has been re-written in Node JS and React JS, something that has been a trend for a few years now, and I believe represents a robust developer community. I discarded Scala as a the language for Factile primarily because the frequent churn in the language made it extremely difficult to keep the stack up-to-date and stable in the past, not to mention the fact that it still has a niche in developer community as compared to the ultra vibrant JS community.
I chose Cypress for browser testing because a) I wanted to see what the fuss was about, and b) I absolutely love the idea that you can stub API calls inside of tests
Finally, I use UptimeRobot for monitoring, CircleCI for continuous integration and APIDoc for, well, API documentation. Of these, APIDoc suprised me the most - it is just amazingly simple to use, and simple to extend (which I did in a way because I did not like the default template/ color schemes).
I have been using CircleCI since 2015 and I think recently, it has become incredibly complex with poor documentation. I could have used TravisCI I guess, but I’ll stay with Circle for now.
Oh yes, I didn’t use Typescript. Why? I personally don’t like my JS code to have a need to compile, and I feel that instead of writing types for JS, I would rather write code in Scala (or Java, or Kotlin) ;-)