Jump to content

How do you approach the design process?

LukeTim
Okay, so there's a lot of threads about the nitty gritty of programming in here but not so many on the "Software Design" portion of the forum heading. I thought we could maybe discuss it a little here.
 
Relatively recently, I have come to recognize the importance of designing and planning out your software project before you even commit to writing a line of code. However, to date I haven't really practiced it. I am a Software Developer at work, yes, but when I arrived all the software was done, my job is mainly maintenance of an existing codebase, and so I was never around for the initial design. Since my degree was primarily Electronic Engineering it wasn't really an aspect of software development I was really exposed to in any specific way.

 

So, I do have something of an ulterior motive for this thread. I have decided upon an Android App I would like to develop in my free time and I would like to do it properly, and efficiently. Oftentimes in my past projects I have simply dove in and made it all up as I go along... and I have of course found that that will most often end up in messy code that is not only not very efficient or optimized, but it is incredibly difficult to optimize without rewriting a whole lot of it.

 

So, I was hoping some of you could share your ideas about how to approach software design. How do you begin? How do you choose what sort of design/architecture patterns are most appropriate? Do you draw diagrams? Write out a problem statement?

 

Hopefully some of the more junior members can get some ideas and insights as well as myself, because I think this is an aspect of software development which is very often forgotten or overlooked but it can potentially make or break a project.

Link to comment
Share on other sites

Link to post
Share on other sites

I think this is a fantastic topic! For me it's all about Test Driven Development; if you're interested go here and watch this and this first. Your design is driven out by the process; red, green & refactor, you write a failing test, make it pass and then refactor if necessary. When I first started it I was amazed at the number of silly bugs this process caught, also my objects and names for things simply emerged/coalesced!

The single biggest problem in communication is the illusion that it has taken place.

Link to comment
Share on other sites

Link to post
Share on other sites

Hello

I can only tell you, how I do it for myself (as a student, not a professional). I always beginn with a really basic concept of the website, app I wanna do. I basically write down my major functions on a paper (mind map). When I finished with this, I beginn drawing my basic Design Ideas. Always with the idea in mind, that it should be as usable as possible (I am a fan of minimal design). I think design is the user experience and does matter a lot for your success! 

 

What I never do, is writing down some coding solution / problems. Maybe drawing some diagrams, but never writing code on a sheet of paper ;)

Obviously, when time goes on, my ideas may change, then I always redraw my ideas. So that I always have the opportunity to look back and decide which is best.

 

Also I often look at websites from/for designers, sometimes you find great solutions for your problems and get new ideas for what you are doing.

Here some of them: 

http://www.cssauthor.com/

http://www.smashingmagazine.com/

http://freebiesbug.com/ (follow them on twitter)

http://dribbble.com/

 

Also like said before, I always look back at my old ideas, so I can judge which is best.

Also I try to order all as much as possible, and have a clean and well documented code as well.

 

Hope it helped you and I m really open for other approaches.

 

Leo

Business Management Student @ University St. Gallen (Switzerland)

HomeServer: i7 4930k - GTX 1070ti - ASUS Rampage IV Gene - 32Gb Ram

Laptop: MacBook Pro Retina 15" 2018

Operating Systems (Virtualised using VMware): Windows Pro 10, Cent OS 7

Occupation: Software Engineer

Link to comment
Share on other sites

Link to post
Share on other sites

I think this is a fantastic topic! For me it's all about Test Driven Development; if you're interested go here and and watch this and this first. Your design is driven out by the process; red, green & refactor, you write a failing test, make it pass and then refactor if necessary. When I first started it I was amazed at the number of silly bugs this process caught, also my objects and names for things simply emerged/coalesced!

 

Yeah, I did a little TDD when I tried out AngularJS since that framework is heavily dependent on TDD so they include it in the tutorial. It was so lovely. Being able to easily define unit tests and automatically run lots of them at once was awesome. Then you could pick out the problems really easily. That website looks like I need to pay for it, though...?

 

 

Hello

I can only tell you, how I do it for myself (as a student, not a professional). I always beginn with a really basic concept of the website, app I wanna do. I basically write down my major functions on a paper (mind map). When I finished with this, I beginn drawing my basic Design Ideas. Always with the idea in mind, that it should be as usable as possible (I am a fan of minimal design). I think design is the user experience and does matter a lot for your success! 

 

What I never do, is writing down some coding solution / problems. Maybe drawing some diagrams, but never writing code on a sheet of paper  ;)

Obviously, when time goes on, my ideas may change, then I always redraw my ideas. So that I always have the opportunity to look back and decide which is best.

 

Also I often look at websites from/for designers, sometimes you find great solutions for your problems and get new ideas for what you are doing.

Here some of them: 

http://www.cssauthor.com/

http://www.smashingmagazine.com/

http://freebiesbug.com/ (follow them on twitter)

http://dribbble.com/

 

Also like said before, I always look back at my old ideas, so I can judge which is best.

Also I try to order all as much as possible, and have a clean and well documented code as well.

 

Hope it helped you and I m really open for other approaches.

 

Leo

 

That sounds good, Leo. I suppose writing down the core idea of your app/website - in a sentence or two - before beginning anything else would really help me keep it in mind, too! Thanks for the links, they look like they have some great info on UI/UX design!

Link to comment
Share on other sites

Link to post
Share on other sites

Start with wireframe for the most important parts. Basically start with the first screen when the app is opened and then move to next when button or link or whatever is clicked. You can do it even on paper with markers. For new projects we have workshops like this. One paper sheet is one screen.  In the end you get a spider so it's easy to see how different parts are connected. This must be simple no fancy stuff just paper and 2-3 color markers. Google "wireframes" for examples. The software architecture then comes naturally.

 

Someone already mentioned TDD. TDD != good architecture. IMHO TDD is a overkill in a lot of cases.

 

Haven't done any mobile development so no concrete suggestions.

Link to comment
Share on other sites

Link to post
Share on other sites

I think it's also important to mention that TDD complements the agile process quite well. As we progress in a sprint working on stories our TDD fills in the language and sentences that become the acceptance criteria; given when then.

The single biggest problem in communication is the illusion that it has taken place.

Link to comment
Share on other sites

Link to post
Share on other sites

Start with wireframe for the most important parts. Basically start with the first screen when the app is opened and then move to next when button or link or whatever is clicked. You can do it even on paper with markers. For new projects we have workshops like this. One paper sheet is one screen.  In the end you get a spider so it's easy to see how different parts are connected. This must be simple no fancy stuff just paper and 2-3 color markers. Google "wireframes" for examples. The software architecture then comes naturally.

 

Someone already mentioned TDD. TDD != good architecture. IMHO TDD is a overkill in a lot of cases.

 

Haven't done any mobile development so no concrete suggestions.

 

I disagree with you there, it might be more correct to say: when it is applied correctly and given that the developer is competent and cares about what they are doing then TDD == good architecture.

The single biggest problem in communication is the illusion that it has taken place.

Link to comment
Share on other sites

Link to post
Share on other sites

Yeah, I did a little TDD when I tried out AngularJS since that framework is heavily dependent on TDD so they include it in the tutorial. It was so lovely. Being able to easily define unit tests and automatically run lots of them at once was awesome. Then you could pick out the problems really easily. That website looks like I need to pay for it, though...?

 

I think there's a 30 day free trial?

The single biggest problem in communication is the illusion that it has taken place.

Link to comment
Share on other sites

Link to post
Share on other sites

I disagree with you there, it might be more correct to say: when it is applied correctly and given that the developer is competent and cares about what they are doing then TDD == good architecture.

Yes, I meant it this way. I just wanted to point out that TDD by itself doesn't mean you will end up with good architecture. Anyway I agree with DHH http://david.heinemeierhansson.com/2014/tdd-is-dead-long-live-testing.html. TDD is great for certain things I use TDD for writing APIs and for things where something like your mentioned  given when then easily applies.

Link to comment
Share on other sites

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×