Emily

Emily

Successful Software Development Crash Course

Preface: I’m not sure if thise is the right place, because this is not direclty Elixir related… but I’ve always got some of the best advice from this community.

Current situation: Spinning wheels… false starts… moving way too slow trying to get a software project airborne.

Mission:

Get a broad spectrum, eagles eye overview of best development practices, tools, resources, systems, techniques, streamlining, optimisations, unspoken tricks & practices etc. used to produce some of the best code we’ve seen so far, complete with case studies of successful projects, case studies of unsuccessful projects.

On the other side of the deep dive, have enough of an understanding of the landscape that I can avoid the common pitfalls that cause software projects to fail… compressioning years into days.

I’ve largely been self-taught. From that, a lot of frustration, and I’m sure bad habits developed.

I want to expose those now. And move forward with a much stronger, broad spectrum grounding of not the details of coding, but more so, what it takes to make a software project successful, from start to finish.

What do you recommend?

Most Liked

gregvaughn

gregvaughn

I suggest you find ways to get in-person time with someone more experienced. That could involve pair programming at work, or maybe spending lunches with co-workers discussing technical topics. It might also help to get involved with local user groups. Via these techniques over my career I discovered people I could learn from and I’ve continued to keep in touch with them over decades.

I know you want to have all the knowledge/experience now, and your enthusiasm is laudable, but have some patience with yourself. It will take time. Start with solving concrete problems, then working to more general abstractions. Over time you’ll see connections between past problems you faced and a current problem and gain intuition on how to approach it.

dwahyudi

dwahyudi

There are plenty books and courses about software development. But software development tends to follow the same path:

  • planning
  • design
  • coding
  • testing

The twist is, there are plenty branches, schools of thoughts, opinions, and best practices on how to do these things. Computer science is natural, much like math, but when you add people into it, it becomes software engineering, it is so different, because there are people, people are different to each other.

Some people prefer doing the TDD, others not so.
Some people prefer doing daily stand-up, others not so.
Some people prefer using framework like scrum, others not so.

Even Agile itself (according to Martin Fowler) means no framework, no rule, just follow what team knows best.

Now, if you ask me what universally makes a software project to fail (in engineering point of view), I can make you a simple stupid list:

  • Code has no test, bugs and regressions emerge because tests are not enough.
  • Hard to read/navigate/understand code, when even your text editor complaints about it, it means your code is not healthy. Developers need extra energy on maintaining them, developers tend to require more time to do anything about it, and new onboarding developers will have difficulty on learning about them. This brings us to other topics like design pattern, object oriented programming and functional programming itself.
  • Hard to change/adapt code. Read below.
  • Unclear software requirements/specifications, this is the bottom of the Jenga, the earliest domino. In modern time like this, a lot of developers work in startups with fast-moving environment which probably means fast moving requirements. This directly correlates with above point with writing code that adapt to changes. Plenty of startups as the sprints goes on and on, have difficulty moving quickly because their codes are harder to maintain then before. I know this is not 100% developers responsibilty, so that’s why people create BDD, so we create a ‘bond’ with non-technical people to specify the requirements.

The first point above actually correlates with the last point as well, as software requires more and more features, quickly, you need assurances on your hand, about the correctness of your features in your code. Some developers actually pairing up to write tests and code at the same time. Extreme programming. Whatever your software development methodology is, please write good tests and easy to read/understand/change code. The business will thank you.

tty

tty

These are some of the classics and some not that well known books which would address your specific question:

  1. Mystical Man Month - F. Brooks (wiki, book)

This is a classic book on SE and very easy reading as well.

  1. Introduction to the Personal Software Process - W. Humphrey (wiki, book)

Using a series of exercises the PSP teaches you to improve your estimating and planning skills, manage quality and reduce the number of defects in your work. I did the exercises in the older version of this book twice, once a week over 8-10 weeks. Perhaps the hardest book to read in this list.

  1. The Open Toolbox of Techniques - Brian Henderson-Sellers et al. (book)

One of the harder books to find (in a public/university library), this book is a survey of various SE techniques, giving a brief description of each, when it is appropriate to use a specific techniques, its relative difficulty and further references. This book exposes you to a grab-bag of techniques that you can draw on when needs arises.

  1. Peopleware - DeMarco et al (wiki, book)

Given that most projects are group efforts this book covers the social aspect of software development. Like Mystical Man Month this book is very easy going and informative.

Enjoy!

JEG2

JEG2

Author of Designing Elixir Systems with OTP

I would be happy to schedule some video chats if you just need to talk through some ideas and/or code.

sublimecoder

sublimecoder

In general, don’t feel like your project needs to be perfect from the ground up or follow every best practice since many of the best practices can and do contradict one another if you don’t know how to choose between them effectively you can hit a pitfall early of trying to adhere to all of them. Every software project is an evolution. A perfect solution at two years it might be terrible for year one or the first six months, and a great solution for year two may be terrible at year five.

Also, don’t think in terms of pitfalls, most software “pitfalls” are sane a logical responses to requirements at the time and worked at the time, but then needed to be heavily changed when the requirements of the project shifted in a completely different way than you ever expected.

Building a successful project is kinda like trying to find a store in a city, you think you know where the store is and you have an address, but when you arrive at the location you thought it was in the sign on the door that says they moved the store across the city to another location and you should have gone the opposite way three turns ago. Was it a mistake? Or did you need to make that choice in order to find out you had to drive the other direction? It’s really about how you respond to this kind new information that determines if your project is a success. Success is a moving target and changes depending on the day and month for almost every project I’ve ever worked on. very few are so constrained that they have a hard set finish with success or failure.

So I will say this, working software that gets the job done is far superior to perfect software that never makes it to production. Not to say you shouldn’t worry about code quality or about fixing bad habits, but those things come with time and won’t be solved with one conversation, blog/forum post, or reading a single book.

My advice is to ask targeted questions when you feel the frustration of a “pitfall”. If you start to get frustrated realize it’s not something you have to do in silence and reach out. I’ve been programming for nearly a decade now, and I still run into instances where I chose wrong originally and have to do a lot of work to change the direction of the code. There really is no way to avoid all pitfalls or bad choices from the start they’re all pretty much just trade-offs. If you manage to figure it out you will make billions selling it to every single software company on the planet.

So that all being said if you ever need help I’m usually on the elixir slack, and usually available for a skype call, and would be happy to help.

Where Next?

Popular in Chat/Questions Top

ariandanim
Hello all, I am still learning Elixir, then go into Phoenix, i am try search in google but find the programming phoenix 1.4, another for...
New
armanm
I know zero downtime deployment can mean different things depending on your application and what your users can tolerate so expectations ...
New
xgilarb
Hi there, I’m interested in using Elixir because of the rumors about the reliability of the Phoenix framework, and surprisingly, Elixir’...
New
New
New
ggwc82
Looking to get started with FP and Elixir coming mainly from an OOP Rails and PHP background. My first question is, whats the best cours...
New
zervis
Hello, I’m about to dive into web development. I was thinking about Laravel or Ruby on Rails, but then I found Phoenix. Do you recommen...
New
aswinmohanme
I recently finished the Udemy course on Elixir and Phoenix and I am thinking about using it for the next project. But I am stuck as how t...
New
jslearner
Will learning Erlang really help in being a better Phoenix or Elixir developer or is it a waste of time?
New
QueenSvetlana
My bookstore has Introducing Elixir: Getting Started In Functional Programming and the front cover says the book uses Elixir 1.4. The cur...
New

Other popular topics Top

senggen
Erlang/OTP 25 [erts-13.2.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] 15:22:35.803 [error] gen_event {lager_file_backend...
New
Jim
As a follow up to my earlier question: I have the code compiling and running but not getting a successful login from the rest server. ...
New
fireproofsocks
I’m working on defining a simple Ecto schema for a table (in PostGres), but I don’t see where I can define a column as NOT NULL. Conside...
New
minhajuddin
I have seen a lot of code which picks the first element from a list using Enum.at(0) instead of List.first. Is there a reason why people ...
New
fayddelight
I tried installing elixir 1.11.2 erlang 23.3.4 via asdf in my zsh shell. Enabled the versions locally and globally. When I list them ...
New
msaraiva
Surface is an experimental library built on top of Phoenix LiveView and its new LiveComponent API that aims to provide a more declarative...
564 42633 214
New
Qqwy
Original source of discussion: This topic on the Pragmatic Programmers' Functional Web Development with Elixir, OTP, and Phoenix forum. ...
New
AstonJ
We’ve put together this wiki for Phoenix LiveView - please feel free to add any info you feel is worth including. What is Phoenix LiveV...
New
Nvim
Elixir appears to be a superior language to Python. I don’t see any advantage of Python over Elixir. Are there any?
New
vrod
I am using the Starship cross-shell prompt – it seems pretty nice, but I get some errors: [WARN] - (starship::utils): Executing command ...
New

We're in Beta

About us Mission Statement