Skip to content

Software Development Opinions #11

@fespinoza

Description

@fespinoza

Recently I read this post Software development topics I’ve changed my mind on after 6 years in the industry - Blogomatano and even though I didn’t agree with all the points in there, it did motivate me to write my own collection of opinions regarding software development in general. These are a collection of my opinions, you can agree or disagree with and that's ok.

General

  • A good software engineer needs to understand/care for the business and user needs to solve problems in an efficient way.
  • It’s 100% better to solve the right problem with a less optimal solution, than to have a 100% technical perfect solution for the wrong problem.
  • Developers should talk to users as much as possible in order to understand their main pain points and test their solutions “on the field”.
  • Build less features and increase the quality of the ones you have.
  • Writing is a very important skill to a developer and we need the most practice.
  • When presenting ideas, one of the most effective methods I know is to present them in a “story-telling” way. The delivery may sometimes be more important than the content itself.
  • When you read other people's code or your past code you will always find flaws and that’s ok, we are all continuously learning.

Craftsmanship

  • Writing code requires craftsmanship. Code that shows little care in the small things it's very likely to not be optimal for the big things.
  • Linters are essential in projects that involve multiple developers and when there is a lot of developer rotation. They prevent small avoidable mistakes that will compound and make code bases a mess.
  • Writing detailed explanations on commits/PRs and code is essential to understand the context in the future for any code that you write. When relevant this context must be provided as code comments as well.
  • Understandable code is 100% better than "smart" code, this often ties as explicit code is better than overly-abstract code.
  • Always share your learning with others, by any means you feel comfortable with.

System Design

  • System design is a very important and under looked skill when it comes to development.
  • System design means you think on the whole system when adding/changing features and how those changes affect the whole system.
  • For a given piece of UI, the least states that UI can be in, the more easy is to reason about it.
  • Writing a higher level documentation with diagrams and so on is something that software developers should do more often.

iOS Specific

  • Writing iOS code that is close to the system is way better than writing “fancy” architectures just for the sake of it.
  • Developing iOS apps that support most system features: Dark Mode, dynamic type, split screen on iPad, etc. leads to more robust apps overall.
  • Subviews should not be declared in view controllers instances, they should be created in custom view types to make the UI “stupid” as it should be a reflection to the state. Defining UI inside a view controller contributes to massive view controllers and poor UI implementations.
  • For an iOS developer is important to have a passion for UI and UX, trying to find the best experiences possible for users.
  • Implementing a robust design system library is the best way to ensure your UI is consistent and easy to build.
  • UI interactions must be the closes to the default apple guidelines, doing custom things should always be a conscious decision with a clear purpose.
  • In most cases people use enums they should be using structs, they allow for customization and can be used with a similar syntax to enums.
  • Doing cheap discovery prototypes is essential for learning and being an effective developer.
  • UI should be able to be invoked from a vacuum (no networking, no tracking), just simple views and simple data passing. Then it's easier to test that UI in multiple contexts: iPhone, iPad, dark mode, different language, different accessibility settings, etc.

I will probably update this list if something important comes to my mind.

You can comment bellow if you want me to elaborate more on a certain points, some of them may deserve their own post.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions