Webcashier

My biggest project so far

In 2016 we started with an application for ticket agents in busstations to sell tickets.

I have been lead- and/or solo developer of the application for the whole time.

Since 2016 then the application has grown a lot.

What started out as a small application to be used in busstations in France, is now a tool for busstations, trainstations and phone customer support.

The application supports more than 20 languages and is in everyday use in

Europe: Estonia, Latvia, Lithuania, Sweden, Norway, Poland, Germany, France, Spain

Africa: Morocco and USA

Technology

Aurelia.js

Our main dilemma when choosing framework was between Angular.js (first generation of Angular) and Aurelia. We picked Aurelia because it was lightweight and highly configurable

Typescript

We chose to use Typescript to reduce errors in runtime and make code readable. And it did the job well. Looking back now: I love the decision!

Bootstrap

It was called "Twitter bootstrap". We chose it to make the start of the project quicker and it did it's job.

Less

We chose between SASS, LESS and vanilla CSS. At the time less was very popular so we also chose less. It is similar to Sass and makes writing CSS easier. Also worked well with Bootstrap.

Mocha

For testing we chose Mocha. At some point we had 90% of the application covered with tests.

React

Since React became so popular we've injected some parts to the application that have been made in React

REST api

The communication with backend is done over dedicated REST api.
General
Youtrack
Git
Upsource
Octopus
Teamcity
Kibana
SQL

My responsibilities

The first choices of stack were made by our tech arhitect.

Later I made the decisions and architectured the application.

There were times when I had thorough analysis and documentation to base the code upon, but most of the time my input was the description of the requested feature and I figured out what was need from backend and from the application to make this feature a reality.

  • Interfaced with clients, providing technological expertise
  • Proposed and implemented scalable solutions to issues identified during end-user research
  • Planned, architectured and wrote the code for the application
  • I did not design the visuals and I did not design the UX!
  • But I worked closely with designer, management team and backenders to understand the needs, develop, document, and manage the application
modify

What I have learned

You learn most from the mistakes you make, they say.
Oh, I should be smart as hell for believe me, I've made many..
But after all is said and done I've always tried to take some time and think things over.
Some conclusions that I've made along the way:
  • Team love! Team is important. Team is your family, your lover and best friend. You learn from them and you teach them. Team is the most important thing in development!
  • No spaghetti code! Please! Take your time. Think. And refactor.
  • Keep your methods small. Keep your files small. Keep your commits small.. Small is better
  • Every corner you cut will bite you before the end
  • Write tests for your code! But not any tests. Only meaningful tests matter!
  • Research the end user
  • Learn! Keep learning! And learn some more. You will never know it all..
  • Do not be afaid!
  • Comfort zone is not your friend! It's ok to be calm for a few months, but then you have to start pushing again

More about the application. What can you do with the it?

  • Sell tickets (of course)
  • View already bought tickets. There is A LOT of data that comes with a ticket. Names, addresses, comments, routes, addoms, seats, etc.. Lot of stuff.
  • Return tickets. And get a refund. Or not get a refund
  • Modify tickets. With cost or without cost..
  • Check in the whole bus
  • Check in individual people or mark them as no-shows
  • Release seats for no-shows or book seats for other passengers
  • Add luggage. Add more luggage. Return the added luggage. Change the luggage. Lose the luggage.. Oh, no, wait.. this is not done by the application.
  • Change seats. Book seats for pets or children or special needs. And make sure everyone has their friend beside them.
  • Sell different addons. Like water. Or bycicle. Or insurance. Or parking pass for your car.
  • Download reports. Many reports. All kinds of reports. I would never have thought there are so many reports in the world
  • Sell vouchers. This is a cool one! You can specify the value of a voucher and the price. And then sell them and later use them to pay for the bus tickets
  • Connect bus tickets to different client cards. Or travel passes - which is like a prepay that lets you ride for free for some time or some routes.
  • Etc... It is a big application :)

What the heck is Aurelia?

Usually when I say my project uses Aurelia I get: Aurelia? Never heard of it.
Well.. Aurelia is a javascript framework made by Rob Eisenberg
Rob used to be one of the main developers behind Angular, but then decided to make his own framework.
At the time Aurelia seemed fresh. Unopinionated. Highly configurable. Easy to learn. It really was a good framework.
I would say it is somewhere between Vue and React.
It has two way bindings and computed elements like vue. But it uses javascript classes like React did back then and is highly unopinionated. Just like React.
Our final choice was between Angular (the 1st edition) and Aurelia and we chose Aurelia because it was lighter and more configurable. Aurelia helps you to write an application but it does not force you to write it in a certain way.
aurelia