Hi, this is Jeffrey Li, a typical technical guy working at telecom software development field. My technical stack is like below,

coding skills

  • C++/C programming language over 15 years
  • Essential python script technique and using for data analysis
  • a little go language experience on HTTP Server/Client programming
  • a little Java language experience

domain knowledge

  • over 15 years telecom software experience
  • familiar with 3GPP architecture and corresponding processes
  • working for 2g/3g/4g/5g RAN nodes and Core network software implementation fields
  • focusing on IP networking domain and resolve computer data communications issues.

communication and soft skills

  • General commercial and technical English speaking and writing
  • Small group leadership on software development
  • Agile development mindset
  • open-minded on different opinions
  • logical thinking
  • strong problem-soling ability
  • make decisions based on facts.

Next we want to talk about my understanding on software engineering


software engineering

Talking about software industry, it can be roughly broken down to 2 categories. One is small software which is can be done below 2~3 person in quite a few time, the other one is big software which needs thousands of person to be done in quite longer time. I believe the telecom software is the latter.

For small software, it’s not a must that we have better software engineering sense. Probably we just need 2~3 person with strong programming competence. But for that big software, it’s not only individual software skills but also better software engineering skills from software development process perspective, especially for a big organization.
For software development process, it usually defined by CMMI or some light-weight modern development models such as Agile development. Basically the software development process can be classified below parts.

  • Requirement analysis
    • Functionality requirement
    • Non-functionality requirement
      • maintainability
      • security
      • scalability
      • flexibility
      • reliability
      • reusability
      • potability
      • performance
    • Domain requirement
      • some certain domain characteristic projects

software design

It’s a process of below parts:

  • architecture
  • components
  • interfaces

Some organizations have some sub-processes regarding design, such as architecture design (high level design), interface design, detailed design (algorithms and data structures per each component design)

For software design, usually we have some common design patter we can use, not only coding design patterns but also architectural patterns. These patterns are generally abstracted from some best practices over time. We should know about how to use that patterns. Before using these patterns we also should know about some general design principles such as single responsibility, High cohesion and low coupling. If you cannot follow some design patters, please follow these principles first.

software construction (building)

Typically it can include coding testing …

software release/maintenance

version management and release, how to deliver to the customer, how to provide the support to the customer.

I think one good software engineer should have more sense of the architecture design and better communication and collaboration skills because software is not just several 10x programmer can be done.

For a individual programmer, please try to be a disciplined coder and write readable code, and try to use tools to help you improve your efficiency, one point that try to use machine and be lazy somehow.

Finally, we should always remember to the purpose of writing code is that the code can be used by the end user, otherwise it’s useless. From that point of view, we make some decisions out of trade-offs.

Edited on 2023/12/26
Jeffrey.