Seek & Destroy
Assalamualaikum / Hi,
I’ve been posting about consultation and personal coaching in past few days/weeks and one day I did received an e-mail from a friend, seeking for consultation.
Below is his email content:
Salam Brother Nasrul,Saya xxx, di facebook nama akaun saya adalah xxx. Saya terjumpa story whatsapp bro pasal minta consultation.Tapi tujuan saya tulis email ini bukanlah urusan business tetapi more on career development. Cerita dia begini, diri saya boleh katakan belajar coding more on self-taught dan belajar melalui kelas-kelas yang dianjurkan melalui JomWeb/ apa-apa event di Peatix.Saya develop kira janji jalan.Sepanjang kerjaya, saya tiada mentor di company untuk dijadikan rujukan atau tegur cara best practice. Kini, bos saya assume diri saya as senior developer dan ramai junior ada belajar bawah saya. Tapi hati saya rasa tak cukup ilmu mengenai dunia web dev dari segi design architecture hingga ke deploy ke cloud or any devOps stuff. Semua google je.So, di sini ada beberapa perkara saya ingin belajar dari tuan, ataupun jika bro nasrul adakan kelas berkaitan topik ini,saya mahu join. Ataupun link tutorial pun boleh.
- Best Practice in coding/ Clean Code.
- Currently,saya develop angular application dengan Typescript, bila saya guna TSLint,saya perlu ‘strongly type’ untuk nama variable dan function. Saya tidak tahu adakah cara saya taip ifelse adalah implementation terbaik?
- How to develop a scalable web-based system for enterprise/startup? How to design system architect?
- Saya pernah develop sebuah laravel based application dengan jquery untuk personal project, tetapi itu dengan laravel 5.1.
- Currently, what is the best practice to develop a non-SPA page with laravel?
- Is Vue.js is the best choice? I prefer to stick with jQuery, but I don’t want my personal application looks outdated with the latest stack.
- When to develop SPA web and non-SPA web?
- How to determine what server spec suitable for an application? What are the information I need to look for?
- Documentation. How to do it? FSD? TSD? User-manual? Any IT-project related documentation.
Mohon Bro Nasrul boleh nasihati saya.Sekian terima kasih.
So, let’s split to different sections based on his email.
IMHO…
Eager, Self-Taught, Willingness, Humble
Here the interesting part – he’s been a senior in his company and yet, he still eager, willing to try something new, learn something new, improve his skill without been asking to do so. All these attributes, eager/passionate, self-taught, willingness and most important is being humble – is the keys to be a good leader. It’s not a day efforts to have those values. You won’t get, not easily get this type of person in an organisation. If you have one – take care of them. Taking care of them, doesn’t mean you have to keep them till the end of the person in the company, by letting go the person, pursue his / her career path, by supporting them, also means by taking care of them.
No mentor, Self-Taught
Being a self-taught person, it’s a good skill to have. But to have someone mentoring you – surely will create a better career path for you. I’m not saying i’m the good mentor – I’m kinda strict of mentor (those already have work with me, knew this) – what I meant is, his action seek for consultation, mentoring is one step improving himself, willing to learn something new.
What, google? seriously? Today I did Google quite a lot – even want to mysqldump also want to Google. hahahah. Google is not a crime, a sin. Doing nothing let someone feed you is a crime. Hell no for me if you now trying first before asking.
Google for solution is not a crime. hahaha.. Chill la bro.
Designing Architecture
Recently, I got certified with CITA-F and never expected to pass with the exam – cause I know how my theory examination. I’m more on technical, hands-on.
So, what did I learnt from taking CITA-F? Even I’m already about 10 years in software development in many area – online market research, GIS, HR, Payroll – I’m still feel far from what it call architecture.
You need to sit in different industries, to see how IT, solutions should be architect. The larger organisation, much more things need to be done on designing the IT architecture of the organisation – you may want to google the EA, Enterprise Architecture.
Some advise on solutions / applications architecture perspective:
- Basically, minimum 3 stacks of category – web, application, database – this is most simple stack of architecture.
- If you go with mobile application, the stacks is – Mobile (hybrid / native), API – which rely on 3 stacks above.
- If you want to go with high availability (HA) – ensure you have WAF, Load Balancer, MySQL Route & MySQL Cluster (in case you use MySQL – other RDBMS is quite similar)
Above are some fundamental of solution architecture nowadays. It depends on your application needs – basically look into business, infrastructure, information and solutions perspectives.
Business need to have a dashboard of sales.
Information of sales need to be fetch from database, but yet, you don’t want to reduce the performance.
Look into infrastructure, how can you reduce the burden of getting sales information – it can be from network latency, using cloud, etc.
And lastly you may look at application solutions – there is some area you need to have the right tools for the right job. For instance, you might want to use SQL view to generate reports, rather than dependent on application to generate the reports.
So above are just a simple example how you should look into architecture – business, information, infrastructure and solutions.
Q&A
Best Practice in coding/ Clean Code.
Currently,saya develop angular application dengan Typescript, bila saya guna TSLint,saya perlu ‘strongly type’ untuk nama variable dan function. Saya tidak tahu adakah cara saya taip ifelse adalah implementation terbaik?
To be honest, the key words is there – best practice, clean codes. But looking at the question, using if else is not a crime, but if you notice similarity, a pattern of implementation – that’s the first sign, you see there is design pattern. But which design pattern? You may want to categorise it, is it belongs to any of these categories:
- Creational – These design patterns are all about class instantiation. This pattern can be further divided into class-creation patterns and object-creational patterns. While class-creation patterns use inheritance effectively in the instantiation process, object-creation patterns use delegation effectively to get the job done.
- Structural – In Software Engineering, Structural Design Patterns are Design Patterns that ease the design by identifying a simple way to realize relationships between entities.
- Behavioral – In software engineering, behavioral design patterns are design patterns that identify common communication patterns between objects and realize these patterns. By doing so, these patterns increase flexibility in carrying out this communication.
You can see more details about Design Pattern here.
Previously I have a class on Design Pattern – this slide might help. If you interested learn in details, do let me know.
How to develop a scalable web-based system for enterprise/startup? How to design system architect?
This question, I think already answered above in Designing Architecture section but I will elaborate some more.
To make a scalable web-based system is not a small deal. It’s a big deal.
First, make sure you have Unit Test. Imagine you have scale up your applications, but not really anyone writing tests. What will happen if someone making changes that break the application workflow?
Second, if you already familiar with DevOp, I think you just need orchestrate how the deployment should goes. Having different environment for the application is important. Most typical environment – development, SIT, UAT, Staging and Production. If want more simple environment you can have development, test and production.
Third, scaling means you need to handle more heavy traffics / transactions. Depends on you business needs, this part will be different – but most of the time is handling concurrency, high availability, having redundant servers, clusters.
Rule of thumb, make a practice having proper development workflow, then everything should be well organise and structured.
Different organisation have different set of development workflow, business concerns, security. Do identify each of business, information, infrastructure and solutions perspectives.
Saya pernah develop sebuah laravel based application dengan jquery untuk personal project, tetapi itu dengan laravel 5.1
Currently, what is the best practice to develop a non-SPA page with laravel?
To be honest, I’m not really focusing on SPA – is it working on iOS devices now?
For non-SPA, you can continue develop with standard Laravel practices. You can include jQuery too. Should be no problem. Just make a good practice on organising you views, using Laravel Mix, multilingual.
At the moment, I have a boilerplate for my team to use – which built ready with common features such as ACL, standard security setup, common commands such as php artisan reload:cache
to recache application caches, and many more.
Is Vue.js is the best choice? I prefer to stick with jQuery, but I don’t want my personal application looks outdated with the latest stack.
If you and your team ready to take new stack in, feel free. It’s an option.
For me, some of the criteria to add in new technology stack in our development is:
- How fast team can adapt?
- How much time available for the team to learn, and
- Is learning the new stack causing the delivery of the product fail?
These are some of questions you need to answer before proceed with new stack.
If it’s personal project, it’s up to you.
When to develop SPA web and non-SPA web?
Really, to be honest, most of the time I will go with non-SPA – unless you are really focusing on mobile solutions, and Android based only.
How to determine what server spec suitable for an application? What are the information I need to look for?
Easiest, put a baseline for your applications that need to have.
If you require a 3 tier solutions, put a baseline for those 3 tiers.
If want to go for cloud, the minimum of 4GB RAM and 50GB SSD Storage. That’s the typical one for me.
Others will be dependents on business needs.
Infrastructure decision always not my forte, that’s why I have a baseline of what I need to have my application up and running.
Documentation. How to do it? FSD? TSD? User-manual? Any IT-project related documentation.
If you have a team, it should be BRS, URS, SRS. But on application perspective, start with README
, or Wiki.
Some basic documentation on application level:
- Minimum requirements
- Setting up the application on different environment
Lastly…
Thank you for reaching me out brother.
I’m not really 100% sure my advises will be sufficient, but to be honest, if I’m in your position right now, this what I will do:
- Teach your juniors, to have the baseline of you think that they can be independent
- It’s time to explore new industry aka search for new job – get into new environment, learn new things! remember, you might be senior in your previous company, but you just a junior in other company. It’s worth to try it out, to test your knowledge and understanding in software development
Thanks again for reach me out!
p/s: Forget about this blog title, let’s hear it out.